140 likes | 342 Views
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 jsou vykonávány sekvenčně (postupně jeden za druhým)
E N D
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 jsou vykonávány sekvenčně (postupně jeden za druhým) • Existují však speciální příkazy ovlivňující pořadí vykonávaných příkazů (podmínky, cykly, příkazy skoku)
Prázdný příkaz • Prázný příkaz neprovádí nic int iPodm = 1; if (iPodm ) ; // prazdny prikaz else printf("false"); if (iPodm ) { } // prazdny slozeny prikaz (blok) else { printf("false"); }
Výrazový příkaz • Výraz ukončený středníkem (přiřazení, volání funkcí, …) int x = 1; int y; y = x + 1; // vyrazovy prikaz - prirazeni y = sin(x); // vyrazovy prikaz – prirazeni, volani funkce x++; // vyrazovy prikaz – inkrementace // (v podstate x = x + 1)
Složený příkaz • Složený příkaz (compound statement) – blok je posloupnost příkazů uzavřených do složených závorek { } • Může obsahovat vnořený blok • Pro nadřazený blok se složený příkaz jeví jako jeden příkaz int main(int argc, char* argv[]) { char str[] = "A31B6CD2"; int n; int iZmen = 0; for ( n=4; n<9; n++) { if( str[n] >= '0' && str[n] <= '9') { str[n] = '_'; iZmen++; } } printf("Opraveny retezec: %s Pocet zmen: %d\r\n\n", str, iZmen); getchar(); return 0; }
Příkazy pro větvení (1) • Podmínka – příkaz if • Syntaxe: if (podm) prikaz_pri_pravdivosti_podminky; else prikaz_pri_nepravdivosti_podminky; if( str[n] >= '0' && str[n] <= '9') { str[n] = '_'; iZmen++; } else iPonech++;
Příkazy pro větvení (2) • Přepínač – příkaz switch • Syntaxe: switch (celocislelna_promenna) { case 1: prikaz_1a; prikaz_1b; break; case ‘A‘: prikaz_A; break; default: prikaz_ostatni; }
Příkazy pro větvení (3) • Přepínač – příkaz switch - příklad #include <stdlib.h>// rand() - generator nahodnych cisel #include <time.h> int main(int argc, char* argv[]) { srand( 1000*(unsigned)time( NULL ) ); printf("Co budu vecer delat:\r\n"); switch ( rand()%3) { case 0: printf("Pujdu spat."); break; case 1: printf("Pujdu na jedno."); break; case 2: printf("Budu programovat ;-)."); break; default: printf("Toto by nemelo nikdy nastat."); } getchar(); return 0; }
Příkazy pro cykly (1) • Příkaz for • Syntaxe: for (inicializ; podm; aktual) prikaz; • Parametry jsou nepovinné • Např. for(;;) prikaz; je nekonečný příkaz char text[] = "dole v dole"; unsignedint n; for( n=0; text[n]!='\0'; n++) if( text[n]!=' ') text[n] -= 32; printf( "%s\r\n", text);
Příkazy pro cykly (2) • Příkaz while • Syntaxe: while (podm) prikaz; • Pozor, zapomenete-li ovlivňovat podmínku v příkazu, může dojít k nekonečnému cyklu • Knihovna <math.h> float x=3, y, min=1000;// double pro vetsi presnost int count=0; while( (y=fabs( x*x-1.0))<min)// je-li akt fcni hod. mensi nez min { min = y; // uloz akt fcni hod. do min x -= 0.1; // dalsi krok count++; // pocitadlo kroku } x += 0.1; // krok zpet printf("Min %f v %d krocich\r\n", x, count); getchar();
Příkazy pro cykly (3) • Příkaz do • Syntaxe: do prikaz; while (podm); • Pozor, zapomenete-li ovlivňovat podmínku v příkazu, může dojít k nekonečnému cyklu • Příkaz se vždy provede alespoň jedenkrát y=fabs( x*x-1.0);// pocatecni naplneni y do { min = y; // uloz akt fcni hod. do min x -= 0.1; // dalsi krok count++; // pocitadlo kroku } while( (y=fabs( x*x-1.0))<min); x += 0.1; // krok zpet printf("Min %f v %d krocich\r\n", x, count); getchar();
Příkazy pro skoky • Příkazy break, continue, goto, return • Příkaz break – okamžité ukončení bloku switch, for, while, nebodo a vystoupení z iterací • Příkaz continue – okamžité ukončení bloku for, while, nebodo, ale pokračování v další iteraci cyklu • Příkaz goto – skok na definované návěští • Příkaz return – okamžitý návrat z funkce char* dist = "59a0.c2:25"; // chybne cislo int test, n; for( n=0; dist[n]!='\0'; n++) { if( dist[n] == ':' ) break; test = (dist[n]>='0') && (dist[n]<='9'); test = test || (dist[n]=='.'); if( !test) continue; printf("%c", dist[n]); } getchar();
Příklad (1) • Vytvořte program, který vypočítá kořeny libovolné kvadratické rovnice: y = ax2 + bx + c • Koeficienty a, b, c deklarujte jako racionální čísla. Hodnoty koeficientů načtěte jako řetězce z konzolového okna, a následně tyto řetězce na čísla převeďte. Vyjdou-li kořeny komplexní, vypište chybové hlášení.
Příklad (2) • Vývojový diagram