90 likes | 230 Views
Příklady v jazyku C – část 6. Napište podprogram, který vypočítá objem krychle. Jednotlivé délky hran vstoupí jako 3 parametry. Vy v olejte tento podprogram v hlavním programu: #include <stdio.h> double objem(double h1, double h2, double h3) { return ( h1 * h2 * h3 ); } int main(void)
E N D
Napište podprogram, který vypočítá objem krychle. Jednotlivé délky hran vstoupí jako 3 parametry. Vyvolejte tento podprogram v hlavním programu: #include <stdio.h> double objem(double h1, double h2, double h3) { return ( h1 * h2 * h3 ); } int main(void) { double vol; vol = objem( 12.2 , 5.67 , 9.03 ); printf(“ Objem krychle = %lf\n“ , vol ); while(!kbhit()); return 0; }
Přehoďte hlavní program a podprogram a využijte a) dopředné deklarace (starší zp.) b) deklarace funkčího prototypu #include <stdio.h> /* double objem(); */ /*dopředná deklarace*/ double objem(double h1, double h2, double h3); /*funční prototyp*/ int main(void) { double vol; vol = objem( 12.2 , 5.67 , 9.03 ); printf(“ Objem krychle = %lf\n“ , vol ); while(!kbhit()); return 0; } double objem(double h1, double h2, double h3) { return ( h1 * h2 * h3 ); }
Napište bezparametrový podprogram (nevrací hodnotu), který vytiskne v řádce 80 znaků “=“a je vyvolán v hlavním programu a odřádkuje. Jak napsat funkční prototyp u podprogramu, který nemá parametry a jak ho odlišit od dopředné deklarace? #include <stdio.h> void radka(void); int main() { radka(); printf("\n" ); while(!kbhit()); return 0; } void radka() { for (int i=0;i<80;i++) printf("="); }
Napište rekurzivní podprogram rekurze(cislo), který vypíše řadu čísel od 9 do 0 , a jehož skutečný parametr předávaný do podprogramu je 0. #include <stdio.h> void rekurze(int cislo) { if (cislo<10 ) { rekurze(cislo+1); printf("cislo= %d\n",cislo); } } int main() { rekurze(0); while(!kbhit()); return 0; }
Napište rekurzivní podprogram rekurze(cislo), který vypíše řadu čísel od 0 do 9 , a jehož skutečný parametr předávaný do podprogramu je 0. Přehoďte pořadí main a podprogramu oproti minilému příkladu a umožněte překladači dopředu poznat počet a typ parametrů. #include <stdio.h> void rekurze(int cislo); /* deklarace funkčního prototypu */ int main() { rekurze(0); while(!kbhit()); return 0; } void rekurze(int cislo) { if (cislo<10 ) { rekurze(cislo+1); printf("cislo= %d\n",cislo); } }
K čemu jsou 2 parametry, které přebírá hlavní program ? Vyzkoušejte vypsání 1. celočíselného parametru a druhého řetězcového parametru. Program bude přeložen do tvaru .EXE a v příkazové řádce budou zadány jako parametry EXE-programu 2 řetězce: #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int i; printf("%i \n\n",argc); i=1; while (argv[i]!='\0') { printf("%i ... %s\n",i,argv[i]); i++; } for (i=1; i<=argc; i++) printf("%i ... %s\n",i,argv[i]); system("PAUSE"); return 0; }
Napište program, který přečte ze vstupního textového souboru věty po řetězcích (gets) (max.80 znaků) a vypisuje je ( printf ) na výstup. Jméno programu přečte z parametrické řádky EXE programu . Po každé větě se zeptá ”Dále? (y/n) …” a umožní při “N” skončit. Stejně tak skončí při dosažení konce souboru (testování pomocí FEOF() ) #include <stdio.h> #include <stdlib.h> #include <ctype.h> int main(int argc, char *argv[]) { FILE *fp; char str[80]; if(argc != 2) { /* Je specifikovano jmeno souboru ? */ printf("Chybi jmeno souboru.\n"); while(!kbhit()); exit(1); } if((fp = fopen(argv[1], "r"))==NULL) { printf("Nelze otevrit soubor.\n"); while(!kbhit()); exit(1); } while (!feof(fp)) { fgets(str, 79, fp); if(!feof(fp)) printf("%s", str); printf("...Dale? (a/n) "); if(toupper(getchar())=='N') break; printf("\n"); } fclose(fp); while(!kbhit()); return 0; }
Napište program, který zkopíruje po znacích (getc) vstupní soubor do souboru výstupního (putc). Jména vstupního a výstupního souboru přečte z parametrické řádky EXE programu . Skončí při dosažení konce souboru (testování pomocí FEOF() ). #include <stdio.h> #include <stdlib.h> #include <ctype.h> int main(int argc, char *argv[]) { FILE *from, *to; char ch; if(argc != 3) { /* Zkontroluj pocet argumentu prikazoveho radku * printf("Chybny pocet argumentu: \n\n Pouziti: copy <zdroj> <cil>\n"); while(!kbhit()); exit(1); } if((from = fopen(argv[1], "r"))==NULL) { /* otevreni zdrojoveho souboru */ printf("Nelze otevrit zdrojovy soubor.\n"); while(!kbhit()); exit(1); } if((to = fopen(argv[2], "w"))==NULL) { /* otevreni ciloveho souboru */ printf("Nelze otevrit cilovy soubor.\n"); while(!kbhit()); exit(1); } while(!feof(from)) { /* kopíruj soubor a preved na velka pismena */ ch = fgetc(from); if(!feof(from)) fputc(toupper(ch), to); } fclose(from); fclose(to); while(!kbhit()); return 0; }