1 / 19

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

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 <stdio.h> int fakt(int n) { return ( (n==0)? 1 : n*fakt(n-1) ); } int main() { int x; while (1) {

justin
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Napište rekurzivní podprogram, který vypočítá faktoriál a použijte ho při vyvolání v hlavním programu: #include <stdio.h> 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; }

  3. 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 <stdio.h> 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; }

  4. Napište rekurzivní podprogram, který vypočítá tzv.Ackermannovu funkci, která je definovánanásledujícími rekurentními vzorci:

  5. #include <stdio.h> 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; }

  6. Napište program, který naplní pole o 15 prvcích hodnotou jejich indexů a vypíše obsah tohoto pole na obrazovku: #include <stdio.h> 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; }

  7. 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 <stdio.h> 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; }

  8. 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 <stdio.h> 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; }

  9. 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 <stdio.h> 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; }

  10. 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 <stdio.h> #include <stdlib.h> 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;}

  11. 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 <stdio.h> #include <stdlib.h> 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; }

  12. 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 <stdio.h> #include <stdlib.h> 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; }

  13. 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 <stdio.h> 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; }

  14. 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 <stdio.h> #include <string.h> 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));

  15. /* 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; }

  16. 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 <stdio.h> #include <stdlib.h> #include <string.h> 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);

  17. /* 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; }

  18. Napište program, který přečte z klávesnice řetězec a vypíše jej pozpátku: #include <stdio.h> #include <string.h> 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; }

  19. 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 <stdio.h> #include <string.h> 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; }

More Related