|
Dátové objektyObsah tém.
Čo je to dátový objektDátový objekt je časť pamäte, ktorú program používa na ukladanie údajov. Charakteristickou vlastnosťou tohto objektu je umiestnenie, veľkosť, spôsob použitia, názov a konečne informačný obsah. Základnou činnosťou počítača je programová transformácia dátových objektov a to:
Základné objekty s ktorými program, napísaný v jazyku C, narába sú premenné a konštanty Na ich pomenovanie sa používajú identifikátory. Používajú sa v algebraických a logických výrazoch ako symboly predstavujúce hodnoty. Premenné sú dátové objekty so zmeniteľným obsahom (na priradenie hodnoty používame priraďovací výraz). Hodnota konštánt sa raz určí a potom už nemení. Proces, ktorý premenným prideľuje názvy a typové označenie sa nazýva deklarácia. Ak sa premennej vyhradí v pamäti priestor, prípadne sa aj nastaví počiatočná hodnota hovoríme o definícii premennej. Tretím dôležitým dátovým objektom sú funkcie. Zatiaľ čo funkcia v matematike predstavuje matematický výraz ktorý transformuje vstupné atribúty do výsledku tzv. funkčnej hodnoty, v C jazyku je "funkcia" program, ktorý spracúva hodnoty vstupných premenných a výsledok umiestňuje do výstupnej premennej. Tu tiež, tak ako v matematike, dochádza k transformácii vstupných hodnôt na výstupnú hodnotu. Funkcia sa deklaruje, podobne ako premenná, určením identifikátora výstupnej hodnoty a jej typu. Na rozdiel od premennej sa za identifikátorom názvu funkcie uvádza do malých okrúhlych zátvoriek umiestnená deklarácia vstupných premenných - formálne parametre - ktoré používa funkcia v programe (záleží na poradí). Deklarácia funkcie je ako každý príkaz ukončená bodkočiarkou. Definícia funkcie má inú úlohu ako definícia premennej. Formálne začína rovnako ako deklarácia funkcie, ale miesto bodkočiarky je na konci prilepený programový blok. Použitie názvu funkcie (t.j. identifikátor funkcie) vo výrazoch je podobné ako premenných a konštánt. Rozdiel medzi nimi spočíva v okrúhlych zátvorkách za identifikátorom funkcie, v ktorých môžu ale nemusia (v prípade tkzv. prázdnej hodnoty - void) byť uvedené vstupné hodnoty atribútov funkcie. Názvy premenných aj funkcií majú vo výrazoch rovnaké použitie - predstavujú hodnoty identifikované ich identifikátormi. Dej ktorý je za tým, je však iný v prípade premennej a iný v prípade funkcie. Zatiaľ čo premenná poskytne svoju hodnotu hneď, lebo jej identifikátor určuje adresu umiestnenia hodnoty, funkcia predtým najprv spustí svoj program. Pri štarte sa hodnoty atribútov uvedených v malých okrúhlych zátvorkách skopírujú do formálnych premenných uvedených v deklarácii a program sa vykoná. Výsledok programu - funkčná hodnota - za zapíše na pozíciu, ktorú určuje identifikátor funkcie. Ďalej to už prebieha ako s hociktorou inou dátovou premennou. Poznámka: Nie každá funkcia vracia funkčnú hodnotu a nie každá funkcia potrebuje uviesť parametre. Sú funkcie ktoré vykonávajú transformácie externých dát a alebo vykonáva činnosť ovládajúcu hardware. Príkazy ktoré ich spustia obsahujú len Identifikátor a za ním prázdne zátvorky ukončené bodkočiarkou. Návratová hodnota funkcie sa dá aj v týchto prípadoch použiť ako správa - číslo - identifikujúce stav ako funkcia - procedúra splnila úlohu ( 0 - úspech , hocičo iné číslo chyby).
Vlastnosti dátového objektuDátový typ
Tabuľka č.1
Pre bližšie určenie dĺžky celého čísla sa používajú
kvalifikátory short a long. Kvalifikátor unsigned ( bez znamienka) pripúšťa len
celé kladné čísla no dvojnásobnej dĺžky. short int x; long int y; unsigned int z; V jazyku C chýba typ logický (boolean). Tento je nahradený
typom int, kde nulová hodnota je totožná s hodnotou (FALSE) a nenulová s
hodnotou true (TRUE). odvodené Odvodené dátové typy sú vždy zložené zo základných dátových typov alebo ich kombinácií.
Veľkosť
Pozn. Viac informácií o veľkosti jednotlivých dátových objektoch viď. tabuľka č.1 Adresa Obsah Obor hodnôt
Pozn. Viac informácií o obore hodnôt jednotlivých dátových objektoch viď. tabuľka č.1 Možnosť meniť obsah Meno
Rozsah platnosti POLEPole je dátový objekt zložený z dátových objektov, ktoré majú rovnaký dátový typ. Počet prvkov poľa sa určí pri deklarácií. Jednorozmerné poleDeklarácia poľa: Deklarácia poľa je podobná deklarácií
jednoduchej premennej s tím rozdielom že za meno premennej uvedieme v hranatých
zátvorkách počet prvkov poľa. dátový_typ meno_poľa[rozmer];
float pole[15]; Čo vieme zistiť z deklarácie? napr.: int a[20];
Počet prvkov poľa sa určí pri deklarácií. Údaj o počte prvkov je možné v deklarácií vynechať ( ak je pole definované inde) alebo v definícií (kde inicializujeme všetky prvky). Inicializácia Pri definícií je možné pole zároveň aj
inicializovať. Vtom prípade nasleduje za menom poľa a hranatými zátvorkami
znak rovnosti a za ním v zložených float pole[3]={ 2.24, 5.26 };
je to isté ako: float pole[0]=2.24;
float pole[1]=5.26;
float pole2]=0;
alebo float pole[]={ 2.24, 5.26 };
je to isté ako: float pole[2]={ 2.24, 5.26 };
K jednotlivým prvkom poľa sa pristupuje pomocou
indexov, ktoré sa zapisujú do hranatých zátvoriek za menom poľa.
Samotný identifikátor poľa predstavuje adresu 0-tého prvku poľa t.j. začiatok
poľa. Prvkom v poli priradzujeme hodnoty dvoma spôsobmi
a to buď v cykle napr. pomocou funkcie scanf alebo priamo, vymenovaním
jednotlivých hodnôt. Reťazce
napr.: char znak[10];
Inicializácia poľa prvkov typu char char znak[] = "skola";
veľkosť tohto poľa je o 1 znak väčšia ako počet znakov v reťazci, pretože každá reťazová konštanta je ukončená znakom \ 0 alebo char znak[] = {´s´,´k´,´o´,´l´,´a´,´\0´};
Príklady pre prácu s poľomPríklad č.26: #include<stdio.h> #include<conio.h> void main(void) // void - znamená "žiaden typ - žiadna premenná" { float pole[10]; //deklarácia poľa 10 reálnych čísel int i,n; //i - premenná určujúca index prvku, n - premenná pre počet prvkov poľa clrscr(); // zmaž obrazovku printf("\nZadaj počet prvkov pola:"); scanf("%d",&n); // do premennej n sa uloží počet prvkov poľa for(i=0;i<n;i++) // načítanie n prvkov do poľa s indexom od i=0 až n-1 { printf("\n [%d] prvok pola: ",i); scanf("%f",&pole[i]); // ulož načítaný údaj na pozíciu i-tého prvku poľa } printf("\nČísla v obrátenom poradí."); for(i=n-1;i>=0;i--) // píš prvky v obrát.poradí, prvý vytlačený prvok printf("\npole[%d]=%.2f",i,pole[i]); // má index i=n-1 a posledný i=0 s krokom i=i-1 printf("\nČísla v načítanom poradí."); // čísla sú idexované podľa načítania // prvé číslo i=0 a posledné i=n-1 for(i=0;i<n;i++) { printf("\npole[%d]=%.2f",i,pole[i]);// vytlačí index a obsah i-tého prvku z poľa } getch(); }Príklad č.27: Program, ktorý načíta z klávesnice 7 celých čísel a vypíše na obrazovku súčet párnych a súčet nepárnych prvkov poľa. #include<stdio.h> #include<conio.h> void main(void) // funkcia nepoužíva parametre ani nevracia hodnotu { int p=0,n=0,i,j,pole[10]; // pole 10 prvkov int clrscr(); //zmaž textovú obazovku printf("\nZadaj 7 celých čísel: \n"); // odriadkuje, vypíše text a odriadkuje for(i=0;i<7;i++) // pre i rovne 1 až 6 { printf("\n[%d] prvok pola: ",i); // scanf("%d",&pole[i]); // &pole[i] je adresa prvku poľa i } for(j=0;j<7;j++) { if(pole[j]%2==0) // operácia %2 mdulo 2 znamená - zvyšok po delení 2 p=p+pole[j]; // ... bol 0 - párne číslo else n=n+pole[j]; // ... bol 1 - nepárne číslo } printf("\nSúčet parných prvkov poľa je %d.",p); printf("\nSúčet neparných prvkov poľa je %d.",n); getch(); } Príklad č.28: #include<stdio.h> #include<conio.h> void main(void) { int pole[10],i,s=0; clrscr(); printf("\nZadaj 10 prvkov, ktoré chceš spočítať.\n"); for(i=0;i<10;i++) { printf("\n[%d] prvok pola: ",i); scanf("%d",&pole[i]); } for(i=0;i<10;i++) s=s+pole[i]; printf("\nSúčet prvkov poľa je %d.",s); getch(); } Príklad č.29:
Triedenie prvkov poľa
Tu bude teória
Príklad č.30: #include<stdio.h> #include<conio.h> void main(void) { int a[100]; //45,12,5,87,15,96,25,84,14,2}; int i,x,j,pom,n,k; clrscr(); printf("\nZadaj veľkosť poľa: "); scanf("%d",&n); for (i=0;i<n;i++) { printf("\n Zadaj a[%d]= ",i); scanf("%d",&a[i]); //&a[i] - adresa i-tého prvku poľa } printf("\nChcete usporiadať prvky poľa zostupne alebo vzostupne (z/v): \n"); x=getch(); if(x=='v') { for (i=0;i<n-1;i++) // pre n prvkov n krát zopakuj ... { for (j=0;j<n-i-1; j++) //... triedenie postupne zmenšujúceho sa zvyšku { //v každom cykle 1 prvok umiestnime na pozíciu if (a[j]>a[j+1]) { pom=a[j]; // výmena dvoch prvkov poľa cez pomocnú premenú a[j]=a[j+1]; a[j+1]=pom; } } } printf("\n Usporiadanie od najmenšieho po najväčší"); for (i=0;i<n;i++) printf ("\na[%d]= %d",i,a[i]); } if(x=='z') { for (i=0;i<n-1;i++) { for (j=0;j<n-i-1;j++) { if (a[j]<a[j+1]) { pom=a[j]; // výmena dvoch prvkov poľa cez pomocnú premenú a[j]=a[j+1]; a[j+1]=pom; } } } printf("\n Usporiadanie od najväčšieho po najmenší"); for (i=0;i<n;i++) printf ("\na[%d]= %d",i,a[i]); } getch(); }
Úlohy
Viacrozmerné pole - maticaViacrozmerné pole je vlastne jednorozmerné pole
pričom jeho prvky tvoria opäť pole. deklarácia matice: dátový_typ meno_matice[m][n]; Prvky viacrozmerného poľa sa ukladajú v pamäti
za sebou. matica matica[3][2];
matica[0][0] Pri deklarácií viacrozmerného poľa môže prvá hranatá zátvorka prázdna. Inicializácia Viacrozmerné pole môžme inicializovať dvoma spôsobmi, ktorými dosiahneme to isté Buď pre každú položku použijeme vlastný inicializačný systém, ktorý uzavrieme do zložených zátvoriek int matica[ ][2] = { alebo každému prvku podľa poradia priradíme hodnotu int matica[3][2] = {0, 0, 1, 1, 2, 2 };
Príklady pre prácu s maticouPríklad č.31:
#include<stdio.h> #include<conio.h> void main(void) { int matica[100][100]; int s,r,i,j,min; clrscr(); printf("Zadaj počet riadkov a stĺpcov\n"); scanf("%d%d",&s,&r); for(i=0;i<s;i++) { for(j=0;j<r;j++) { printf("\nZadaj prvok M[%d,%d] = ",i,j); scanf("%d",&matica[i][j]); } } printf(" \n Výpis prvkov matice vo forme indexov\n"); for(i=0;i<s;i++) { for(j=0;j<r;j++) printf("\nM[%d,%d] = %d ",i,j,matica[i][j]); } printf(" \n Výpis prvkov matice\n"); for(i=0;i<s;i++) { printf("\n"); for(j=0;j<r;j++) printf(" \t%d ",matica[i][j]); } printf("\nVýpis 3. riadku matice\n"); for(j=0;j<r;j++) printf("\t%d ",matica[2][j]); getch(); }
ŠtruktúryŠtruktúra je dátový objekt zložený z viacerých dátových objektov rôzneho dátového typu. deklarácia štruktúry: struct [menovka_štruktúry] { dátový_typ1 meno_prvku1; dátový_typ2 meno_prvku2; : dátový_typn meno_prvkun; } [premenná1, premenná2, ...]; Kľúčové slovo struct uvádza deklaráciu štruktúry, ktorá je zoznamom deklarácií uzavretých v zložených zátvorkách. Za kľúčovým slovom struct môže nasledovať nepovinný údaj, ktorý nazývame menovka štruktúry. Premenné uvedené v štruktúre sa nazývajú členy alebo položky štruktúry. Za pravou zloženou zátvorkou nasleduje buď bodkočiarka alebo zoznam identifikátorov premenných. Príklad: deklarácia našej štruktúry bude vyzerať takto: struct student { char meno[20]; char priezvisko [20]; int hodiny; }; Zoznam identifikátorov uvádzame najmä vtedy, ak nepoužijeme pri deklarácii štruktúry jej menovku. Ak menovku použijeme, môžeme premenné uvedeného typu štruktúry definovať zvlášť s použitím menovky. definícia štruktúry: struct student jano; Tým sme vytvorili premennú jano, ktorá je typu student. Na hociktorú položku sa potom vieme odvolať nasledovne: jano.meno sprístupnenie
položky meno vo všeobecnosti meno_premennej.meno_položky Bodku medzi identifikátormi nazývame operátorom
selekcie alebo kvalifikácie. struct student meno = {"jozef"}; Praktické je použiť štruktúru v poli. Jednoducho tak potom vieme vytvoriť napr. triedu, ktorá bude obsahovať 20 študentov s údajmi o nich struct student trieda[20]; Príklady na štruktúryPríklad č.32: #include<stdio.h> #include<conio.h> struct student // štrukturovaný dátový objekt { char meno[20]; char priezvisko[20]; int hodiny; }; void main(void) { struct student trieda[20]; // pole štrukturovaných prvkov int i, pocet; clrscr(); printf("\nZadaj počet ziakov v triede: "); scanf("%d",&pocet); for (i=0;i<pocet;i++) { printf("Meno: "); scanf("%s",trieda[i].meno); // string - reťazec má výnimku adresy t.j. bez & printf("Priezvisko: "); scanf("%s",trieda[i].priezvisko); printf("Vymeškane hodiny: "); scanf("%d",&trieda[i].hodiny); // adresa položky i-teho prvku poľa } for (i=0;i<pocet;i++) { printf("\nMeno %d.študent je %s ",i+1,trieda[i].meno); printf("\nPriezvisko %d.študent je %s ",i+1,trieda[i].priezvisko); printf("\nVymeškané hodiny %d.študent sú %d ",i+1,trieda[i].hodiny); } getch(); }
Príklad č.33: #include<stdio.h> #include<conio.h> struct student { char meno[20]; char priezvisko[20]; int hodiny; }; void main(void) { struct student trieda[20]; // pole štrukturovaných prvkov int indexmin,indexmax,maxh,minh,i=0,j,k,n; clrscr(); printf("\nKoľko študentov je v triede: "); scanf("%d",&n); for(i=0;i<n;i++) { printf("\nZadaj meno, priezvisko a počet vymeškaných hodín %d študenta:",i+1); scanf("%s%s%d",trieda[i].meno,trieda[i].priezvisko,&trieda[i].hodiny); } // stringy %s(reťazce) majú výnimku pri adresovaní trieda[i].meno bez & maxh=trieda[0].hodiny; minh=trieda[0].hodiny; for(j=1;j<n;j++) { if (maxh<trieda[j].hodiny) { maxh=trieda[j].hodiny; indexmax=j; } } for(k=1;k<n;k++) { if (minh>trieda[k].hodiny) { minh=trieda[k].hodiny; indexmin=k; } } printf("\nŠtudent s najväčším počtom vymeškaných hodín: %s %s %d"\ ,trieda[indexmax].meno,trieda[indexmax].priezvisko,maxh); printf("\nŠtudent s najmenším počtom vymeškaných hodín: %s %s %d"\ ,trieda[indexmin].meno,trieda[indexmin].priezvisko,minh); getch(); }
Príklad č. 34: #include<stdio.h> #include<conio.h> struct kniha { char meno[40]; char priezvisko[40]; char nazov[20]; char vydavatelstvo[10]; int cena; int atributy; char typ[20]; }; void main(void) { struct kniha kniznica[20]; // pole 20 štruktúr int i, pocet; int znak; clrscr(); printf("\nZadaj počet kníh: "); scanf("%d",&pocet); for (i=0; i< pocet;i++) { printf("\nNázov: "); // stringy majú výnimky pri adresovaní scanf("%s",kniznica[i].nazov); // kniznica[i].nazov - adresa stringu printf("\nMeno autora: "); scanf("%s",kniznica[i].meno); printf("\nPriezvisko autora: "); scanf("%s",kniznica[i].priezvisko); printf("\nVydavateľstvo: "); scanf("%s",kniznica[i].vydavatelstvo); printf("\nCena knihy: "); scanf("%d",&kniznica[i].cena); // &kniznica[i].cena - adresa položky cena printf("\nAtribúty: "); kniznica[i].atributy=getch(); putch(kniznica[i].atributy); printf("\n\nTyp knihy: "); scanf("%s",kniznica[i].typ); } printf("\nChcete vedieť info. o knihách s atribútom(\ voľná-v,\nrezervovaná-r, vypožička -p): "); znak=getch(); for (i=0;i<pocet;i++) { if(znak==kniznica[i].atributy) printf("\n%s %s %s %c %s ",\ kniznica[i].priezvisko,kniznica[i].meno,\ kniznica[i].nazov,\ kniznica[i].atributy,\ kniznica[i].typ); } getch(); // počkaj na stlačenie klávesnice }
Operácie s dátovým objektomdefinícia, deklarácia, inicializácia, priradenie Definícia dátového objektu
Deklarácia je
len formálnou
definíciou premennej bez nastavenia jej obsahu. Všetky premenné sa pred použitím musia
deklarovať. Deklarácia pozostáva zo špecifikácie typu a uvedenia zoznamu
premenných tohto typu. Príklad deklarácie jednoduchej premennej int x, y, pocet; Príklad deklarácie poľa char pole[10]; Príklad deklarácie štruktúry
Posledným zápisom sme deklarovali štrukturovanú premennú osoba ( jej typ sme nazvali typOsoba). Táto premenná obsahuje štyri premenné, nazývané členy štruktúry inak aj položky. Prvá je pole 40 bajtov pre uloženie reťazca ASCII kódov ukončeného nulou (hodnotou 0 nie ASCII kódom 0 !), ktorá musí byť súčasťou reťazca (t.j. maximum znakov je 39). Nasledovné tri položky sú typu int. S premennou osoba sa narába ako s celkom. Môže sa zapisovať/čítať do/z súboru ako jeden záznam (record). K položkám sa pristupuje s pomocou názvu štruktúry a mena položky takto: osoba->meno="Jano"; Deklaráciou sa určí, akého typu bude daná
premenná. Jednoduchú premennú je možné zároveň aj
inicializovať. int x = 0; int a = ´0´; Priradenie znamená napĺňanie obsahu dátového objektu hodnotou napr.: pocet_ziakov = 4; Tu budem ešte doplňovať ... Úlohy pre zopakovanie
Jazyk C umožňuje okrem používania knižničných funkcií aj vytváranie nových funkcií. Každý program napísaný v jazyku C musí obsahovať minimálne jednu funkciu nazvanú main. Vykonávanie programu začína aktiváciou funkcie main. Táto funkcia obsahuje buď príkazy celého programu, alebo ešte častejšie vyvoláva ďalšie funkcie deklarované vo funkcii main, tie môžu byť definované v danom programe (v zdrojovom texte) alebo v iných zdrojových súboroch. Užívateľom vytvorené funkcie môžu mať ľubovoľný názov, avšak aj tu existujú isté pravidlá. Názov funkcie musí začínať písmenom a obsahuje len zobraziteľné funkcie. Pre každú funkciu platí, že môže byť vo vnútri inej funkcie len deklarovaná. Môžeme vytvárať funkcie s parametrami, či bez parametrov, s návratovou hodnotou respektíve bez návratovej hodnoty. Jednotlivé možnosti si ukážeme postupne na jednotlivých príkladoch. Deklarácia funkcie Podáva prekladaču iba informácie o mene funkcie a type jej návratovej hodnoty. Tieto informáciu umožňujú prekladaču preložiť správne volanie funkcie z hľadiska prístupu k návratovej hodnote. Definícia funkcie dátový_typ meno_funkcie([vstupné
parametre a ich dátové typy]) Definícia funkcie pozostáva z dátového
typu a identifikátora funkcie.
Dátový typ udáva typ vracajúcej hodnoty funkcie. Ak je
funkcia bez návratovej hodnoty tak udávame void?? Spôsoby komunikácie medzi funkciami
pomocou globálnych premenných - využíva viditeľnosť globálnych premenných v rámci celého programu alebo v rámci jedného modulu (lokálne premenné). pomocou návratovej hodnoty - riadiaci príkaz pre vykonanie návratu z funkcie je príkaz return (používajte dôsledne). Najjednoduchšou užívateľom vytvorenou funkciou je funkcia bez parametrov a bez návratovej hodnoty. Funkcia bez parametrov a bez návratovej hodnoty Príklad č.34: Program, ktorý pre troch žiakov načíta priezvisko žiaka a dve známky z ktorých vypočíta priemer s využitím vlastnej funkcie bez parametrov a bez návratovej hodnoty. Do vlastnej funkcie žiak nevstupujú žiadne parametre teda funkcia je bez parametrov. #include < stdio.h> #include < conio.h> void ziak(void); //deklarácia funkcie void main(void) { clrscr(); ziak(); //volanie funkcie ziak(); ziak(); getch(); } void ziak (void) //definícia funkcie { float znamka1,znamka2,priemer; char priezvisko[20]; // premenná priezvisko je typu pole znakov printf("Zadaj priezvisko ziaka: "); //načítanie údajov scanf("%s",priezvisko); printf("Zadaj jeho dve znamky "); scanf("%f %f",&znamka1,&znamka2); priemer=(znamka1+znamka2) / 2; //výpočet priemeru printf("Priemer ziaka: %s je %.2f\n\n",priezvisko,priemer); //tlač výsledku } // %.2f - reálne číslo na dve desatinné miesto Funkcia s parametrami a bez návratovej hodnoty Príklad č.35 Program, ktorý vypočíta obsah štvorca s využitím vlastnej funkcie. Vytvorená funkcia bude obsahovať jeden vstupný parameter x (veľkosť strany štvorca), ktorú zadáme vo funkcií main. Obsah štvorca sa vypočíta vo funkcií obsah teda funkcia je bez návratovej hodnoty.
#include < stdio.h > #include < conio.h > void obsah(float); //deklarácia funkcie obsah void main(void) { float a; clrscr(); printf("Zadaj stranu a: "); scanf("%f",&a); obsah(a); // volanie funkcie obsah getch(); } void obsah(float x) //definícia funkcie { float s; s=x*x; printf("Obsah štvorca = %.2f",s); }Funkcia s parametrami a s návratovou hodnotou Príklad č.36 Program, ktorý sčíta dve celé čísla s využitím vlastnej funkcie s parametrami a s návratovou hodnotou. #include < stdio.h> int sucet(int, int); //deklarácia funkcie sucet void main(void) { int a, b, c; a = 5; //priradenie hodnôt b = 2; c = sucet(a, b); //volanie funkcie printf("sucet je %d", c); //tlač výsledku } int sucet(int x, int y) //definícia funkcie { int k; k = x + y; //operácia súčtu return (k); //návrat výsledku operácie } Funkcia nám prevedie
jednoduchý súčet dvoch čísel.
V jazyku C môžeme funkcie vyvolávať rekurzívne. Pri priamej rekurzivite funkcia vo svojom tele volá samu seba, pri nepriamej rekurzivite sa vzájomne vyvolávajú dve funkcie. Typickým príkladom rekurzívnej funkcie je výpočet faktoriálu pre celého kladné čísla.
Priklad č.37 Program, ktorý vypočíta faktoriál pre celé kladné číslo n s využitím rekurzívnej funkcie. #include < stdio.h> unsigned long fakt(unsigned int); // deklarácia funkcie faktoriálu void main(void) { unsigned int a; printf("Zadaj cele kladne číslo: "); scanf("%u", &a); //načítanie čísla printf("Faktorial %u je %lu", a, fakt(a)); //tlač výsledku } unsigned long fakt(unsigned int n) //definícia funkcie pre výpočet faktorialu { if(n==0) return (1); //test, či n nie je rovne 0 else return(n * fakt(n-1)); //ak nie, rekurzivne volanie fcie }
Funkcia
pre výpočet faktoriálu je napísaná podľa vzťahu
n!=n*(n-1)!Je typu
unsigned long, keďže výsledok bude kladný a podstatne väčší ako vstup.
Vytvorte program pre výpočet povrchu a objemu kvádra.(SWITCH a vlastné funkcie) Vytvorte program, ktorý vypočíta obsah a obvod kruhu.(SWITCH a vlastné funkcie)
Vytvorte program, ktorý vytlačí max. číslo z 2 celých čísel pomocou ternálneho
operátora a vami vytvorenej funkcie.(vlastná funkcia)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||