Příklady v jazyku C – část 7. Napište rekurzivní podprogram, který vypočítá faktoriál a použijte ho při vyvolání v hlavním programu: #include int fakt(int.

Slides:



Advertisements
Podobné prezentace
Standardní knihovní funkce pro práci s textovými řetězci
Advertisements

Vstup a výstup Ing. Lumír Návrat  katedra informatiky, A-1018 
Programování funkcí v Excelu (pole)
Přednáška 11 Jiří Šebesta
Příkazy Přednáška č. 4. Příkazy (statements)  Příkaz – dílčí krok programu (část kódu – zpravidla jeden řádek)  Program – posloupnost příkazů  Příkazy.
Cvičení Úloha 1: Rozhodněte zda posloupnost znaků v poli délky n tvoří palindrom (slovo, které je stejné při čtení zprava i zleva). Př.: [a,l,e,l,a] [a,n,n,a]
Algoritmy I Cvičení č. 5.
Algoritmy I Cvičení č. 2. Cíl hodiny Datové typy a přetypování (int, float, double, bool, char, long, short) Konstanty – Celočíselné Desítkové – 15, 0,
Algoritmy I. Cvičení č. 10.
C# pro začátečníky Mgr. Jaromír Osčádal
Cvičení 2 Proměnné(jednoduché a složené) a konstanty První program Zápis výrazů.
Algoritmy I Cvičení č. 4.
Algoritmy I Cvičení č. 3.
Programování v Pascalu Přednáška 7
Příklady z Matlabu 4 Příklady na řídící příkazy , IF , SWITCH , FOR , WHILE , příkazy vstupu a výstupu INPUT a DISP.
MATLAB® ( část 3 - scripty).
1 Vyhledávání Principy vyhledávání Klasifikace klíče:  Interní klíč – je součástí prohlížených záznamů  Externí klíč – není jeho součástí, je jím např.
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro práci se soubory 13 Verze
OSNOVA: a) Řetězce v C b) Funkce stdio.h pro řetězce c) Funkce string.h pro řetězce d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
C – strukturované příkazy
Příklady v jazyku C – část 6
Cvičení.
Vstupy a výstupy znaků a) Terminálový vstup a výstup ( getchar(), putchar() ) Přečtěte znak pomocí systémové funkce getchar() a vypište ho pomocí putchar().
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Příklady v jazyku C – část 4
2 CYKLUS S PEVNÝM POČTEM OPAKOVÁNÍ Podle řídící proměnné proveď n-krát příkaz P1.
Příklady v jazyku C – část 3
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro vstup a výstup 12 Verze
Spojové struktury BI-PA1 Programování a algoritmizace 1, ZS
Příklady v jazyku C – část 2
C – cyklus while Mgr. Lenka Švancarová.
Napište program v C pro výpočet plochy obdélníka se stranami A=3 a B=2. Výsledek vytiskněte s patřičným komentářem na obrazovku formátovým příkazem printf.
C – switch Mgr. Lenka Švancarová. switch syntaxe switch (výraz) { case hodnota_1: příkaz(y)_ve_větvi_1; case hodnota_2: příkaz(y)_ve_větvi_2; … default:
UNIX Shell skripty Roman Danel VŠB TU Ostrava, Hornicko – geologická fakulta.
Rozklad problému na podproblémy, rekurze
A1PRG - Programování – Seminář Ing. Michal Řízení běhu programu 5 Verze
ALGO – Algoritmizace 4. cvičení 1.ročník, ZS Ing. Zdena DOBEŠOVÁ, Ph.D.
C – jak na procedury Mgr. Lenka Švancarová. C – procedury #include int main() { printf("Ahoj\n"); return(0); } #include void pozdrav(void) { printf("Ahoj\n");
Příklady v jazyku C – část 8. Napište program, který inicializuje 2-rozměrné pole uživatele (5 řádků, 2 sloupce) a naplní ho hodnotami (první sloupec.
Ukazatele, řetězce Přednáška č. 3. Ukazatele  Ukazatel (pointer) – typ o velikosti 4 bajty (v 32bit. systémech) pro uložení adresy objektu na který ukazuje.
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Příklady v jazyku C – část 2
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
4. Typ pole 4.1 Jednorozměrná pole
Příklady v jazyku C – část 2
C – if Mgr. Lenka Švancarová. if vývojový diagram Podmínka Příkaz(y) Podmínka Příkaz(y) Úplné větveníNeúplné větvení ++--
C – cyklus do-while Mgr. Lenka Švancarová.
Rekurze. volání podprogramu opětovně v jeho těle –v době, kdy předchozí volání ještě nebylo ukončeno Druhy rekurze přímá rekurze nepřímá rekurze.
Funkce, intuitivní chápání složitosti
Funkce Přednáška č. 5. Funkce (functions)  posloupnost příkazů uvedená hlavičkou  využití – opakovaně volaná sekvence – strukturování programu – ošetření.
Algoritmizace a programování Algoritmy 4 – Vývojové diagramy (cykly)
Algoritmizace a programování Aritmetické, Relační a Logické operátory, Knihovny.
Algoritmizace a programování Algoritmy 2 – Vývojové diagramy (sekvence)
Programování KONSTANTY, ČTENÍ PO JEDNOM ZNAKU GETCHAR() FORMÁTOVANÝ VÝSTUP POMOCÍ PRINTF, VÝVOJOVÉ DIAGRAMY, CYKLY.
Řetězce v jazyce C ● řetězec je posloupnost znaků ● řetězcové konstanty se v C vkládají mezi uvozovky, např. "Ahoj Hugo!" ● v paměti je řetězec uložen.
Řídící struktury, if, while, switch BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií.
Programování ENUM, SWITCH,pole jednorozměrná a vícerozměrná, deklarace, inicializace, kopírování, porovnání Erik Král.
Algoritmizace a programování
Rekurze.
C# konzole – Podíl dvou čísel, podmínka IF
Programovací jazyk C Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Jitka Vlčková. Dostupné z Metodického portálu ISSN.
Algoritmizace a programování
Rekurze.
Podprogramy.
Opakování ze 3. cvičení deklarace proměnných výpis na monitor (výstup)
Algoritmizace a datové struktury (14ASD)
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Algoritmizace a datové struktury (14ASD)
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Transkript prezentace:

Příklady v jazyku C – část 7

Napište rekurzivní podprogram, který vypočítá faktoriál a použijte ho při vyvolání v hlavním programu: #include int fakt(int n) { return ( (n==0)? 1 : n*fakt(n-1) ); } int main() { int x; while (1) { printf(" Zadej hodnotu pro faktorial:"); scanf("%d",&x); if(x<=0) break; printf("%d faktorial je : %d \n\n", x, fakt(x) ); } return 0; }

Napište rekurzivní podprogram, který vypočítá Fibonnaciho posloupnost (každé další číslo v řadě je dáno součtem dvou čísel předcházejících) a zobrazí řadu od 0 do 15: #include long int fibo(long int x) { if (x<2) return (x); else return (fibo(x-1)+fibo(x-2)); } int main() { long int x; printf("Fibonnaciho posloupnost - rekurzivne: \n\n"); for (x=0;x<=15;x++) printf("Pro %2d je fibo(%2d) =%4d \n", x, x, fibo(x) ); while(!kbhit()); return 0; }

Napište rekurzivní podprogram, který vypočítá tzv.Ackermannovu funkci, která je definována následujícími rekurentními vzorci: Hodnoty A(m, n) m\nm\n01234n n n n n − 3A(3, − 3)A(3, A(4, 3)) A(4, 65533)A(4, A(5, 1))A(4, A(5, 2))A(4, A(5, 3)) 6A(5, 1)A(5, A(5, 1))A(5, A(6, 1))A(5, A(6, 2))A(5, A(6, 3))

#include int ack(int m, int n) { if ( m == 0 ) return (n+1); else if ((m > 0) && (n == 0)) return ack(m-1, 1); else return (ack(m-1, ack(m, n-1))); } int main() { int x; while (1) { printf(" Zadej hodnoty n, p pro Ackermannovu funkci:"); scanf("%d %d",&n, &p); if(n<0) break; printf("%d faktorial je : %d \n\n", x, ack(n,p) ); } return 0; }

Napište program, který naplní pole o 15 prvcích hodnotou jejich indexů a vypíše obsah tohoto pole na obrazovku: #include int main() { int i, x[15]; for (i=0;i<=14;i++) x[i] = i; printf("Obsah pole: n\n"); for (i=0;i<=14;i++) printf("Obsah %2d.prvku je %2d \n", i+1,x[i] ); while(!kbhit()); return 0; }

Napište program, který naplní pole o 10 prvcích hodnotou druhých mocnin jejich indexů a vypíše obsah tohoto pole na obrazovku: #include int main() { int i, x[10]; for (i=0;i<=9;i++) x[i] = i*i; printf("Obsah pole: n\n"); for (i=0;i<=9;i++) printf("Obsah %2d.prvku je %4d \n", i+1,x[i] ); while(!kbhit()); return 0; }

Napište program, který vypočítá Fibonnaciho posloupnost čísel, která jsou umístěna v jednorozměrném poli – vektoru délky 20 prvků: #include int main() { int i, x[20]; x[0]=0; x[1]=1; printf("Fibonnaciho posloupnost - v poli: n\n"); for (i=2;i<=19;i++) x[i] = x[i-1]+x[i-2]; for (i=0;i<=19;i++) printf("Pro %2d je fibo(%2d) =%4d \n", i+1,i+1,x[i] ); while(!kbhit()); return 0; }

Napište program, který zkopíruje všechny tabulka jednorozměrného pole " a " do pole " b " (všechny tabulka pole " b " jsou při deklaraci inicializovány na 0, tabulka pole " a " jsou načteny ze vstupu) – délky vektorů jsou 20 prvků. Vypište obsah pole " b " : #include int main() { int i, a[10], b[10]; for (i=0;i<=9;i++) b[i]=0; printf("Zadej hodnoty 10 prvku pole a: \n"); for (i=0;i<=9;i++) scanf("%d",&a[i]); for (i=0;i<=9;i++) b[i]=a[i]; printf("\nZkopirovane pole b:\n"); for (i=0;i<=9;i++) printf("%2d ",b[i]); while(!kbhit()); return 0; }

Napište program, který načte maximálně 100 čísel ze vstupu (počet také načte ze vstupu) a provede jejich setřídění algoritmem „bublinkové třídění“ : #include int main() { int tabulka[100], a, b, t, pocet; printf("Kolik bude prvku? \n"); scanf ("%d",&pocet); printf("\npocet = %d\n",pocet); for (a=0;a<pocet;a++) { scanf("%d",&tabulka[a]); printf("\nPrvek[%d] = %d\n",a+1,tabulka[a]);} /* Algoritmus bublinkoveho trideni */ for (a=1;a<pocet;++a) for (b=pocet-1;b>=a;--b) if ( tabulka[b-1] > tabulka[b] ) { t = tabulka[b-1]; tabulka[b-1] = tabulka[b]; tabulka[b] = t; } printf("\nVypis setrideneho pole: \n \n "); for (t=0;t<pocet;t++) printf("%4d \n ",tabulka[t]); while(!kbhit()); return 0;}

Napište program, který načte číslo, které obsahuje/neobsahuje nesetříděná tabulka a provede vyhledání čísla v tabulce algoritmem „lineární vyhledávání“ : #include int main() { int tabulka[20]={5,8,3,4,1,7,8,9,15,10,11,12,13,16,14,0,2,17,18,19} ; int i, j=0, prvek; /* výpis tabulky */ for (i=0;i<20;i++) printf("Prvek[%d] = %d\n",i+1,tabulka[i]); printf("Zadej hledany prvek: "); scanf ("%d",&prvek); /* Algoritmus linearniho vyhledavani */ for (i=0;i<20;i++) if ( tabulka[i] == prvek ) { j=i; break; } /* Ukonci cyklus po nalezeni prvku */ if ( j == 0 ) printf("\nPrvek: %d nenalezen v tabulce \n ",prvek); else printf("\nPrvek: %d nalezen na %d pozici tabulky. \n ",prvek,j+1); while(!kbhit()); return 0; }

Napište program, který načte číslo, které obsahuje/neobsahuje setříděná tabulka a provede vyhledání čísla v tabulce algoritmem „binární vyhledávání“ : #include int main() {int tabulka[20]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20} ; int i, nalezeno=0, prvek,levy=0,pravy=19,stred; /* Tabulka: */ for (i=0;i<20;i++) printf("Prvek[%d] = %d\n",i+1,tabulka[i]); printf("Zadej hledany prvek: "); scanf ("%d",&prvek); /* Algoritmus binarniho vyhledavani */ while (levy<=pravy && !nalezeno) { stred=(levy+pravy)/2; if ( tabulka[stred] == prvek ) nalezeno=1; else if ( tabulka[stred] < prvek ) levy = stred+1; else pravy = stred-1; printf("\nLevy:%2d Pravy:%2d Stred:%2d Tab[stred]: %2d",levy, pravy, stred, tabulka[stred]); } if ( nalezeno == 0 ) printf("\n\nPrvek: %d nenalezen v tabulce \n ",prvek); else printf("\n\nPrvek: %d nalezen na %d pozici tabulky. \n",prvek,stred+1); while(!kbhit()); return 0; }

Proveďte deklaraci řetězce „str“ délky max 80 znaků a načtěte řetězec z klávesnice. Zabezpečte, že se nepřečte více znaků, než je udaných 80. Po přečtení řetězce (stisknutí ENTER) se provede výpis řetězce: #include int main() { char str[20]; int i; printf("Zadej retezec (mene nez 20 znaku): \n"); /*gets(str);*/ fgets(str,19,stdin); printf("\n\nDelka zadaneho retezce je : %d\n\n",strlen(str)); for ( i=0 ; str[i] ; i++ ) printf("%c",str[i]); printf("\n%s",str); while(!kbhit()); return 0; }

Přečtěte z klávesnice první a druhý řetězec (max. 80 znaků) a proveďte následující řetězcové operace a vypište výsledek: a) zjištění délky řetězců b) porovnání řetězců ( strcmp(str1,str2) ) c) přidání str2 na konec str1 (vejde-li se součet délek do str1) (strcat(s1,s2)) d) zkopírování str2 do str1 ( strcpy(str1,str2) ) #include int main() { char str1[80], str2[80]; int i; printf("Vloz prvni retezec: "); gets(str1); printf("Vloz druhy retezec: "); gets(str2); /* a) zjisteni delky retezcu */ printf("%s je %d znaku dlouhy\n", str1, strlen(str1)); printf("%s je %d znaku dlouhy\n", str2, strlen(str2));

/* pokracovani programu … */ /* b) porovnani retezcu */ i = strcmp(str1, str2); if( !i ) printf("Retezce jsou totozne.\n"); else if(i<0) printf("%s je mensi nez %s\n", str1, str2); else printf("%s je vetsi nez %s\n", str1, str2); /* c) pridani str2 na konec str1, pokud je dost mista */ if(strlen(str1) + strlen(str2) < 80) { strcat(str1, str2); printf("%s\n", str1); } /* d) kopirovani str2 to str1 */ strcpy(str1, str2); printf("%s %s\n", str1, str2); while(!kbhit()); return 0; }

Vytvořte program – kalkulačku. Zadejte příkaz (součet, rozdíl, dělení, násobení, konec) jako řetězec, který načtete z klávesnice. Poté načtete z klávesnice první a druhé číslo jako operandy (řetězcovým způsobem a převedete řetězce na čísla pomocí funkce atoi (tj. číslo=atoi(řetězec)) ) a provedete požadovanou operaci. Je-li kód operace „konec“, program je ukončen. #include int main(void) { char command[80], temp[80]; int i, j; for( ; ; ) { printf("Zadej kód operace? "); gets(command); /* Zjisteni, zda chce uzivatel skoncit */ if(!strcmp(command, "konec")) break; printf(„Vloz první cislo: "); gets(temp); i = atoi(temp);

/* pokracovani programu … */ printf("Vloz druhe cislo: "); gets(temp); j = atoi(temp); /* nyni proved pozadovanou operaci */ if(!strcmp(command, "soucet")) printf("%d\n", i+j); else if(!strcmp(command, "rozdil")) printf("%d\n", i-j); else if(!strcmp(command, "deleni")) { if(j) printf("%d\n", i/j); } else if(!strcmp(command, "nasobeni")) printf("%d\n", i*j); else printf("Neznamy prikaz. \n"); } while(!kbhit()); return 0; }

Napište program, který přečte z klávesnice řetězec a vypíše jej pozpátku: #include int main(void) { char str[80]; int i; printf("Vloz retezec: "); gets(str); printf("Obraceny retezec: "); for (i=strlen(str)-1; i>=0; i--) printf("%c", str[i]); while(!kbhit()); return 0; }

Napište program, který opakovaně načítá řetězce. Při každém vstupu řetězce je tento řetězec zřetězen (pomocí strcat(str1, str2) ) s druhým řetězcem nazývaným „bigstr“. Na konec každého řetězce přidává nulový řádek. Když uživatel napíše „konec“, načítání se zastaví a vypíše se „bigstr“. Program se zastaví, také, pokud došlo k překročen íé délky pole „bigstr“. #include int main(void) { char bigstr[1000] = "", str[80]; for( ; ; ) { printf("Vloz retezec: "); gets(str); if(!strcmp(str, "konec")) break; strcat(str, "\n"); /* test na preteceni pole bigstr */ if(strlen(bigstr)+strlen(str) >= 1000) break; strcat(bigstr, str); } printf(bigstr); while(!kbhit()); return 0; }