200 likes | 365 Views
C – strukturované příkazy. Mgr. Lenka Švancarová. Úvod do problematiky. U předchozích programů jsme vždy vykonávali všechny příkazy jeden po druhém.
E N D
C – strukturované příkazy Mgr. Lenka Švancarová
Úvod do problematiky • U předchozích programů jsme vždy vykonávali všechny příkazy jeden po druhém. • Pokud budeme chtít, aby se některé příkazy vykonaly jen za určité podmínky a nebo se opakovaly jen za určité podmínky, budeme muset vprogramech využít strukturovaných příkazy. • Strukturované příkazy řídí chod programu na základě toho, zda je podmínka v nich obsažená splněna (vrací nenulovou hodnotu) či nikoliv (vrací nulu).
Podmínka a=5 not(p=’V’) nelze (p=’V’) or (p =’v’) (j=’Jan’) and not(a=0) (a mod 2)=0 //mod //vrací zbytek po dělení (a==5) (!(p==’V’)) (p!=’V’) (a==p) //různé typy dat ((p==’V’) || (p ==’v’)) ((j==’Jan’) && (a!=0)) (a%2==0) (p=’V’) //co se stane? Pascal C Podmínka v C musí být uzávorkovaná. V C lze porovnávat i hodnoty proměnných různých datových typů (v Pascalu ne).
C – větvení Mgr. Lenka Švancarová
Úplné větvení Sémantika (stejná jak v TP) Vývojový diagram • Jestliže je splněna podmínka (vrací nenulovou hodnotu), vykonají se příkazy pravdivé větve, když není (vrací nulu), vykonají se příkazy nepravdivé větve. • Vždy se tedy vykonají příkazy jen v jedné větvi a pokračuje se dál vprogramu. Podmínka + - Příkaz(y) Příkaz(y)
if syntaxe if (podmínka) { jeden nebo více příkazů pravdivé větve } else { jeden nebo více příkazů nepravdivé větve } Nepoužijeme-li v pravdivé větvi {}, musíme (jeden) neuzávorkovaný příkaz ukončit středníkem (na rozdíl od TP, kde před else středník psát nelze). Pokud je v pravdivé či nepravdivé větvi jeden příkaz, je na nás, zda použijeme {}či nikoliv. V případě více příkazů jsou {} povinné.
C – úplné větvení • Nakresli vývojový diagram a napiš zdrojový kód.Řeš s využitím úplného větvení. • Uživatel zadá číslo. Vypočte se jeho absolutní hodnota a výsledek se vypíše na obrazovku. |7|=7 obecně |x|=x pokud je x kladné |-8|=8 obecně |x|=-x pokud je x záporné
if úplné větvení Start scanf(”%f”,&x) (x < 0) + - printf(”|x|=%.0f\n”,x*(-1)) printf(”|x|=%.0f\n”,x) Stop
#include <stdio.h> int main() { float x; printf(”Zadej cislo: ”); scanf(”%f”,&x); if (x < 0) printf(”|x|=%.0f\n”,x*(-1)); else printf(”|x| = %.0f\n”,x); return(0); } #include <stdio.h> int main() { float x; printf(”Zadej cislo: ”); scanf(”%f”,&x); if (x < 0) { printf(”|x|=%.0f\n”,x*(-1)); } else { printf(”|x| = %.0f\n”,x); } return(0); } if neúplné větvení Pokud je v pravdivé či nepravdivé větvi jeden příkaz, je na nás, zda použijeme {}. V případě více příkazů jsou {}povinné.
Neúplné větvení Sémantika (stejná jak v TP) Vývojový diagram • Jestliže je splněna podmínka (vrací nenulovou hodnotu), vykonají se příkazy pravdivé větve, když není (vrací nulu), přes nepravdivou větev se pouze projde (nejsou v ní příkazy, tak není co vykonávat). Podmínka + - Příkaz(y)
if syntaxe if (podmínka) { jeden nebo více příkazů pravdivé větve } Protože v nepravdivé větvi nejsou žádné příkazy, není ani v zápisu. Pokud je v pravdivé větvi jeden příkaz, je na nás, zda použijeme {}či nikoliv. V případě více příkazů jsou {} povinné.
C – neúplné větvení • Nakresli vývojový diagram a napiš zdrojový kód.Řeš s využitím neúplného větvení. • Uživatel zadá číslo. Vypočte se jeho absolutní hodnota a výsledek se vypíše na obrazovku. |7|=7 obecně |x|=x pokud je x kladné |-8|=8 obecně |x|=-x pokud je x záporné
if neúplné větvení Start scanf(”%f”,&x) x < 0 - + x=x*(-1) printf(”|x|=%.0f\n”,x) Stop
if neúplné větvení #include <stdio.h> int main() { float x; printf(”Zadej cislo: ”); scanf(”%f”,&x); if (x < 0) x=x*(-1); printf(”|x| = %.0f\n”,x); return(0); } #include <stdio.h> int main() { float x; printf(”Zadej cislo: ”); scanf(”%f”,&x); if (x < 0) { x=x*(-1); } printf(”|x| = %.0f\n”,x); return(0); } Pokud je v pravdivé či nepravdivé větvi jeden příkaz, je na nás, zda použijeme {} či nikoliv. V případě více příkazů jsou {}povinné.
C – větvení • Nakresli vývojový diagram a napiš kód. • Uživatel zadá dvě čísla. Jestliže nebude druhé zadané číslo nula, čísla se vydělí, jinak se vypíše „nulou dělit nelze“ a toto tvrzení se podtrhne. • Uživatel zadá celé číslo. Vypíše se, zda je zadané číslo liché nebo sudé. • Uživatel zadá dvě celá čísla. Určí se, zda jsou navzájem dělitelná.
C – větvení • Nakresli vývojový diagram a napiš zdrojový kód. • Uživatel zadá číslo a program vypíše buď je to známka (pro čísla 1, 2, 3, 4, 5) nebo není to známka. • Program určí, zda uživatelem zadané číslo leží vintervalu (2,7>. • Uživatel zadá tři kladná čísla – třetí největší. Vypište Je to trojúhelník nebo Není to trojúhelník.
if vnořování • V kladné větvi či záporné může být libovolný příkaz, tedy i další if. • Předchozí věta nám říká, že příkazy if lze do sebe zanořovat. • Je-li v sobě vnořeno několik if, patří else kposlednímu if bez else.
if vnořování #include <stdio.h> int main() { float x,y; printf(”Zadej prvni cislo :”); scanf(”%f”,&x); printf(”Zadej druhe cislo :”); scanf(”%f”,&y); if (x > y) { printf(”Vetsi cislo je %f\n”,x); printf(”Mensi cislo je %f\n”,y);} else if (x = = y) printf(”Cisla jsou stejna.\n”); else { printf(”Vetsi cislo je %f\n”,y); printf(”Mensi cislo je %f\n”,x);} return(0); } Nakresli vývojový diagram k tomuto zdrojovému kódu.
Pascal – úplné větvení (opakování) • Nakresli vývojový diagram a napiš zdrojový kód. • Uživatel zadá číslo. Vypíše se, zda je zadané číslo nula, kladné nebo záporné. (Tedy vždy jen jeden z uvedených výpisů.)
C – if • Uživatel zadá, zda chce u obdélníku vypočítat obsah či obvod a pak jeho rozměry. Program spočte požadované. • Uživatel zadá reálné číslo, jeden ze znaků +, –, * nebo / a poté druhé reálné číslo. Program vypíše výsledek. • Jsou zadána tři čísla. Napiš program, který určí největší z nich. • Napiš program, který vypočte kvadratickou rovnici.