Škôlka jazyka C

Fórum o programovaní v jazyku C založené 3. januára 2012

Aktuálny čas je 24 Apr 2024, 01:18

Všetky časy sú v GMT + 1 hodina




Fórum je zamknuté Táto téma je zamknutá, nemôžete posielať nové príspevky alebo odpovedať na staršie.  [ Príspevok: 1 ] 
Autor Správa
PoslaťNapísal: 28 Mar 2012, 08:02 
Offline
Stredoškolák
Stredoškolák
Obrázok užívateľa

Registrovaný: 06 Jan 2012, 19:26
Príspevky: 458
Bydlisko: pod Pátrovom
Udelené body: 228 bodov
Získané body: 21 bodov
1) Napíšte program, ktorý spočíta N prvých prirodzených čísiel a vypíše napr.:
Sucet prvych 5 cisiel je 15.
N definujte ako symbolickú konštantu.
Spoiler:
Kód:
#include <stdio.h>
#define N 5   // symbolicka konstanta N = 5

int main(void)
{
    int i, j = 0;

    for (i = 1; i <= N; i++) { // cyklus, i je 1 az 5
        printf("%2d + %d = ", j, i); // vypise j (pred vypoctom) + i =
        j += i; // pri kazdom cykle sa hodnota j zvacsi o momentalnu hodnotu i
        printf("%2d\n", j); // vypise j po vypocte a odriadkuje
    }
    printf("\nSucet prvych %d cisiel je %d.\n", N, j); // vypis vysledku

    return 0;
}

2) Čítajte znaky z klávesnice až do EOLN, ktoré sa zadefinujete. Po skončení čítania
vypíšte počet zadaných čísiel. Ďalej odpíšte len zadané malé písmená, ktoré preveďte
na veľké. Využite makrá isdigit(), islower() a toupper() zo súboru ctype.h.
Spoiler:
Kód:
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define EOLN '\n' // definovany koniec citania z klavesnice (ENTER)

int main(void)
{
    int ncislic = 0, c;

    printf("Zadavaj lubovolne znaky pre citanie, zadavanie ukoncis klavesou ENTER.\n\n");

    while ((c = getchar()) != EOLN) { // cyklus bezi kym sa nezada ENTER
        if (isdigit(c)) // ak je znak cislica
            ++ncislic; // pripocitaj jedna k celkovemu poctu cislic
        else if (islower(c)) { // ak je znak male pismeno
            printf("male %c\tvelke %c\n", c, toupper(c)); // vypis male pismeno a jeho ekvivalent velke pismeno
        }
    }
    printf("\nZadanych bolo %d cislic.\n", ncislic); // vypise celkovy pocet zadanych cislic

    return 0;
}

3) Napíšte makro na_tretiu(x), ktoré bude počítať tretiu mocninu. Vyskúšajte ho na výrazoch:
na_tretiu(3)
na_tretiu(i)
na_tretiu(2 + 3)
na_tretiu(i * j + 1)
Spoiler:
Kód:
#include <stdio.h>
#include <math.h>
//#define na_tretiu(x) ((x) * (x) * (x)) // klasicky spôsob x krat x krat x
#define na_tretiu(x) pow(x, 3.0) // pouzitie funkcie pow() z kniznice math.h

int main(void)
{
    int i = 6, j = 4;

    /* vo vypise musi byt float (%f), ak by bolo int (%d), vysledky by boli nuly */
    printf("%6.f\n", na_tretiu(3)); // %6.f vypise desatinne cislo bez desatinnej ciarky
    printf("%6.f\n", na_tretiu(i)); // a posledna cislica vpravo bude na 6 stlpci zlava
    printf("%6.f\n", na_tretiu(2 + 3)); // to iste
    printf("%6.f\n", na_tretiu(i * j + 1)); // to iste

    return 0;
}

4) Definujte makro je_velke(c), ktoré vráti 0 ak znak nie je veľké písmeno a 1,
ak je veľké písmeno.
Spoiler:
Kód:
#include <stdio.h>
#include <ctype.h>
#define EOLN '0'
#define je_velke(c) (isupper(c)) // funkcia isupper() z kniznice ctype.h => ak je znak velke pismeno, TRUE = 1, FALSE = 0

int main(void)
{
    int c;

    printf("Zadavaj lubovolne znaky pre citanie, zadavanie ukoncis znakom 0 (nula).\n"
           "Ak zadas velke pismeno, vytlacim 1, ak iny znak, vytlacim 0.\n");
    while ((c = getch()) != EOLN) // cyklus bezi kym nie je zadana nula
        printf("%c\t%d\n", c, je_velke(c)); // vypis zadaneho znaku, tabulator, 0 alebo 1, podla vysledku

    return 0;
}

5) Definujte makro moze_tlacit(c), ktoré zistí, ži je znak tlačiteľný
(od ASCII hodnoty 32 do 126). Pomocou makra vytlačte ACSII tabuľku.
Spoiler:
Kód:
#include <stdio.h>
#include <ctype.h>
#define moze_tlacit(c) (isprint(c))
int main(void)
{
  int i;

  printf("Vytlacim tabulku ACSII (tlacitelne znaky od ASCII hodnoty 32 do 126).\n");
  for (i = 0; i <= 255; i++) {
    if (moze_tlacit(i))
      printf("%d  ->  %c\n", i, i);
  }
  return 0;
}

6) Definujte makro citaj_int(i), ktoré číta z klávesnice celé číslo. Makro sa musí dať
použiť vo výraze:
if ((j = citaj_int(k)) == 0)
Nápoveda: Využite operátor čiarka.
Spoiler:
Kód:
#include <stdio.h>
#define citaj_int(i) (scanf("%d", &i), i)
int main(void)
{
  int j, k;


  if ((j = citaj_int(k)) == 0)
    printf("%d\n", j);
  else
    printf("%d\n", k);
  return 0;
}

7) Predchádzajúci príklad rozdelte do dvoch súborov MAKRO.C a HLAVNY.C a pomocou príkazu
#include zaistite správne chovanie programu.

MAKRO.C
Spoiler:
Kód:
#include <stdio.h>
#define citaj_int(i) (scanf("%d", &i))

HLAVNY.C
Spoiler:
Kód:
#include "MAKRO.C"
int main(void)
{
  int j, k;

  if ((j = citaj_int(k)) == 0)
    printf("%d\n", j);
  else
    printf("%d\n", k);
  return 0;
}

8) Napíšte program, ktorý bude čítať 10 celých čísiel. Čísla bude čítať buď zo súboru
CISLA.TXT, kde bude každé číslo na novom riadku, alebo z klávesnice. Pri obidvoch
spôsoboch sa bude na obrazovke vypisovať text:
Zadaj 1. cislo :
Určite počet párnych čísiel.
Spoiler:
Kód:
#include <stdio.h>
int main(void)
{
  FILE *fr;
  int i, j, k, c, d;

  k = 0;
  if ((fr = fopen("CISLA.TXT", "r")) == NULL) {
    printf("Subor CISLA.TXT sa nepodarilo otvorit.\n");
    return 0;        /* ukoncenie programu */
  }
  for (i = 1; i <= 10; i++) {
    printf("Chces citat cislo zo <s>uboru alebo z <k>lavesnice? : ");
    c = getchar();

    if (c == 'k') {
      printf("Zadaj %d. cislo : ", i);
      scanf("%d", &j);
      if (j % 2 == 0)
        k += 1;
    }
    else if (c == 's') {
      fscanf(fr, "%d", &d);
      printf("Zadaj %d. cislo : %d\n", i, d);
      if (d %2 == 0)
        k += 1;
    }
    else {
      i -= 1;
      printf("Nespravna volba, znovu!!!\n");
    }
    while ((c = getchar()) != '\n')
      ;
    putchar('\n');
  }
  printf("\nPocet parnych cisiel z desiatich precitanych bol %d.\n", k);
  if (fclose(fr) == EOF)
    printf("Subor sa nepodarilo zavriet.\n");
  return 0;
}

_________________
kódy píšem na platforme: linux Ubuntu 12.04 (Geany, Code::Blocks), WinXP (Code::Blocks, PsPad editor),
Skype: libcokamo, ICQ: 56312279
Ak treba, napíš mi na libcosenior@gmail.com. To mám v mobile a stále po ruke.


Detaily príspevku Upozorniť užívateľa
Hore
 Profil  
 
Zobraziť príspevky z predchádzajúceho:  Zoradiť podľa  
Fórum je zamknuté Táto téma je zamknutá, nemôžete posielať nové príspevky alebo odpovedať na staršie.  [ Príspevok: 1 ] 

Všetky časy sú v GMT + 1 hodina


Kto je on-line

Užívatelia prezerajúci fórum: Žiadny registrovaný užívateľ nie je prítomný a 1 hosť


Rýchla úprava:
Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre
Nemôžete zasielať súbory v tomto fóre

Hľadať:
Skočiť na:  
cron
Powered by phpBB® Forum Software © phpBB Group

Hosted by FreeSpace SK