Algoritmizace a programování

Podobné dokumenty
Algoritmizace a programování

Řídicí struktury. alg3 1

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

Řídící struktury, if, while, switch

Algoritmizace. Cíle předmětu

Řídící struktury, if, while, switch

Programování a algoritmizace

BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky

Algoritmizace. Algoritmizace (Y36ALG), Šumperk - 1. přednáška 1

BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky

Funkce, intuitivní chápání složitosti

Algoritmizace a programování

Operační systémy. Cvičení 4: Programování v C pod Unixem

6 Příkazy řízení toku

Příkazy if, while, do-while, for, switch

Algoritmizace a programování

Algoritmizace prostorových úloh

Úvod do programování - Java. Cvičení č.4

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Větvení a cykly. Úvod do programování 1 Tomáš Kühr

2. lekce Algoritmus, cyklus Miroslav Jílek

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Algoritmizace prostorových úloh

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

Vlastnosti algoritmu. elementárnost. determinovanost. rezultativnost. konečnost. hromadnost. efektivnost

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Programovací jazyk Pascal

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

3 Co je algoritmus? Trocha historie Definice algoritmu Vlastnosti algoritmu... 3

Cykly. Základy programování 1 Martin Kauer (Tomáš Kühr)

Algoritmizace. 1. Úvod. Algoritmus

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

Úvod do programování. Lekce 3

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19

Rozklad problému na podproblémy, rekurze

Algoritmizace a programování

Výukový materiál zpracován v rámci projektu EU peníze školám

Rozklad problému na podproblémy, rekurze

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

- jak udělat konstantu long int: L long velka = 78L;

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

Algoritmizace a programování

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Algoritmy a datové struktury

Algoritmizace. Obrázek 1: Přeložení programu překladačem

Funkce, podmíněný příkaz if-else, příkaz cyklu for

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Lekce 01 Úvod do algoritmizace

6. Příkazy a řídící struktury v Javě

Úvod do programovacích jazyků (Java)

DTP Základy programování Úvod do předmětu

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

VISUAL BASIC. Přehled témat

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

Programování v C++ 1, 1. cvičení

Programovací jazyk C++ Hodina 1

Program a životní cyklus programu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Úvod do programování. Lekce 5

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem.

Operační systémy. Cvičení 3: Programování v C pod Unixem

Základy algoritmizace a programování

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

1. Téma 03 - Rozhodování

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Obsah přednášky. Příkaz for neúplný. Příkaz for příklady. Cyklus for each (enhanced for loop) Příkaz for příklady

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Digitální učební materiál

Paměť počítače. alg2 1

Lekce 04 Řídící struktury

Algoritmus. Cílem kapitoly je seznámit žáky se základy algoritmu, s jeho tvorbou a způsoby zápisu.

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

Základy algoritmizace a programování

Programovani v Maplu Procedura

Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr

ANOTACE vytvořených/inovovaných materiálů

Algoritmus. Cílem kapitoly je seznámit žáky se základy algoritmu, s jeho tvorbou a způsoby zápisu.

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA

Zápis programu v C a základní řídicí struktury

Algoritmizace a programování

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Podmíněný příkaz

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Jazyk C# a platforma.net

Rozklad problému na podproblémy

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

2 Datové typy v jazyce C

Transkript:

Algoritmizace a programování Jazyk C řízení běhu programu České vysoké učení technické Fakulta elektrotechnická Ver.1.10 J. Zděnek 2015

Šest zákonů programování 1. V každém programu je alespoň jedna chyba 2. Každý program lze zkrátit alespoň o jeden řádek 3. Nejjednodušší chyby se nejhůře hledají 4. Každou opravou se do programu zanese nová chyba 5. Když už se zdá, že program je v pořádku, určitě jste něco přehlédli 6. Programátor dělá to co umí, počítač si dělá, co chce A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 2

Proces programování SESTAVENÍ ZADÁNÍ POZOR ANALÝZA POZOR ALGORITMIZACE POZOR PODPORA IDE ZÁPIS V PROGRAM. JAZYKU PODPORA IDE SYNTAKT. KONTROLA A PŘEKLAD PODPORA IDE LOGICKÁ KONTROLA (LADĚNÍ) POUŽÍVÁNÍ A ÚDRŽBA A0B36PRI A8B14ADP PROGRAMOVÁNÍ Algoritmizace a programovaní 02 -Jazyk C - rizeni behu programu 3

Programy a programovací jazyky Program je předpis (zápis algoritmu) pro provedení určitých akcí počítačem zapsaný v programovacím jazyku Programovací jazyky strojově orientované strojový jazyk = jazyk fyzického procesoru asembler (jazyk symbolických adres) vyšší jazyky imperativní (příkazové, procedurální) neimperativní (např. funkcionální) Hlavní rysy imperativních jazyků (C, C++, Java, Pascal, Basic,...) zpracovávané údaje mají formu datových objektů různých typů, které jsou v programu reprezentovány pomocí proměnných resp. Konstant program obsahuje deklarace a příkazy deklarace definují význam jmen (identifikátorů) příkazy předepisují akce s datovými objekty nebo způsob řízení výpočtu A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 4

Základní přístupy k programování Strojový, naivní přístup Strojový kód, asembler, skripty,c Procedurální přístup C, Java, Objektový přístup Java, C++, C#, A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 5

C první program Příklad: program vypíše daný text na obrazovku: #include <stdio.h> #include <stdlib.h> int main(int argc, char** argv) { printf("nazdar Svete\n\n"); return (EXIT_SUCCESS); Po překladu a spuštění se na obrazovku vypíše Nazdar Svete Nejjednodušší zdrojový program je uložen v jediném souboru. Rozšíření souboru budr.c. (náš program bude tedy uložen v souboru PrvniProgram.c ) Vložení funkcí standardních knihoven #inclulde hlavní funkce main Hlavička funkce funkce main (): (int argc, char** argv) specifikace vstupních parametrů A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 6

C bloková struktura Program má blokový charakter (bloky funkci) Nejtriviálnější program je tvořen pouze funkcí main() Hlavičkové soubory (Header) Začátek těla funkce #include <stdio.h> #include <stdlib.h> Jméno funkce int main(int argc, char** argv) { printf("nazdar Svete\n\n"); return (EXIT_SUCCESS); Hlavička funkce Tělo funkce Konec funkce A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 7

Syntaxe Vlastnosti programovacích jazyků souhrn pravidel udávajících přípustné tvary dílčích konstrukcí a celého programu syntaktické diagramy Sémantika udává význam jednotlivých konstrukcí A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 8

Algoritmus Algoritmus - definice postup při řešení určité třídy úloh, který je tvořen seznamem jednoznačně definovaných příkazů a zaručuje, že pro každou přípustnou kombinaci vstupních dat se po provedení konečného počtu kroků dospěje k požadovaným výsledkům Vlastnosti algoritmu: hromadnost měnitelná vstupní data determinovanost každý krok je jednoznačně definován konečnost a resultativnost pro přípustná vstupní data se po provedení konečného počtu kroků dojde k požadovaným výsledkům Algoritmus syntetický model postupu řešení obecných úloh Prostředky pro zápis algoritmu přirozený jazyk, vývojový diagram, strukturogram, pseudojazyk, programovací jazyk A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 9

Algoritmus, příklad Úloha: Najděte největšího společného dělitele čísel 6 a 15 Řešení: Popišme postup tak, aby byl použitelný pro dvě libovolná přirozená čísla, nejen pro 6 a 15: označme zadanáčísla x a y a menší z nich d není-li d společným dělitelem x a y, pak zmenšíme d o 1, test opakujeme a skončíme, až d bude společným dělitelem x a y Poznámka: Význam symbolů x, y a d použitých v algoritmu: jsou to proměnné (paměťová místa), ve kterých je uložena nějaká hodnota, která se může v průběhu výpočtu měnit A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 10

Algoritmus společný dělitel Úloha: najděte největšího společného dělitele čísel 6 a 15 Průběh řešení: krok x y d poznámka 6 15? zadání vstupních dat 1 6 15 6 2 6 15 6 d není dělitelem y, proveď krok zmenšení d 3 6 15 5 2 6 15 5 d není dělitelem x, proveď krok zmenšení d 3 6 15 4 2 6 15 4 d není dělitelem x ani y, proveď krok zmenšení d 3 6 15 3 2 6 15 3 d je dělitelem x i y, proveď krok 4 4 6 15 3 výsledek je hodnota 3 A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 11

Algoritmus - zobecnění Úloha: najděte největšího společného dělitele Přesnější popis: Vstup: přirozenáčísla x a y Výstup: nsd(x,y) Postup: 1. Je-li x<y, pak d má hodnotu x, jinak d má hodnotu y 2. Opakuj krok 3, pokud d není dělitelem x nebo d není dělitelem y 3. Zmenši d o 1 4. Výsledkem je hodnota d Sestavili jsme algoritmus pro výpočet největšího společného dělitele dvou přirozených čísel A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 12

Vývojový diagram Zjednodušený grafický tvar nsd(x, y) Úplný grafický tvar nsd(x, y) ano x < y ne d := x d := y d není dělitelem x nebo d není dělitelem y ano ne d := d - 1 nsd := d A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 13

Strukturogram Strukturogram nsd(x, y) ano x < y ne d := x d := y pokud d není dělitelem x nebo d není dělitelem y opakuj nsd :=d d := d - 1 A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 14

Zápis algoritmu pseudojazykem Pseudojazyk nsd(x,y): if x<y then d:=x else d:=y; while d není dělitelem x or d není dělitelem y do d:=d-1; nsd:=d; Zápis algoritmu programovacím jazykem (zde C) int nsd(int x, int y){ int d; if (x<y) d = x; else d = y; while (x%d!=0 y%d!=0) d--; return d; A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 15

Řídicí struktury Řídicí struktura je programová konstrukce, která se skládá z dílčích příkazů a předepisuje pro ně způsob provedení Tři druhy řídicích struktur: 1. posloupnost, předepisující postupné provedení dílčích příkazů 2. větvení, předepisující provedení dílčích příkazů v závislosti na splnění určité podmínky 3. cyklus, předepisující opakované provedení dílčích příkazů v závislosti na splnění určité podmínky Řídicí struktury mají obvykle formu strukturovaných příkazů Budeme používat následující složené příkazy: 1. složený příkaz nebo blok pro posloupnost Složený příkaz: { <posloupnost příkazů> Blok: { <posloupnost deklarací a příkazů> 2. příkaz if pro větvení 3. příkazy while, do while nebo for pro cyklus Pozn.:Deklarace jsou v bloku lokální, tzn. neplatí vně bloku A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 16

Typy řídicích struktur sekvence if if - + + - while for do switch - + - + A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 17

Složený příkaz, blok Složený příkaz { x = y *3; x = x - 3; y = 234 + x; Blok {. x = y*4; { // Zacatek bloku int p,q; // p,q lokalni v bloku p = x + y; q = p - 3; y = p - q; System.out.println("q="+q); // Konec bloku // p,q - zde jiz nezname x = y - 100; A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 18

Podmíněný příkaz if Příkaz if (podmíněný příkaz) umožňuje větvení na základě podmínky Má dva tvary: if (podmínka) příkaz 1 else příkaz 2 if (podmínka) příkaz 1 kde podmínka je logický výraz (výraz, jehož hodnota je typu boolean, tj. true nebo false) Příklad (do min uložit a pak vypsat menší z hodnot x a y): // 1. varianta if (x < y) min = x; else min = y; System.out.println(min); // 2. varianta min = x; if (y < min) min = y; System.out.println(min); A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 19

Podmíněný příkaz if, příklad // Urči, zda x leží v intervalu <-25,50>, // když ano, nastav b = true; jinak b = false; // b = 0 -> false, b = 1-> true (Jazyk C nema logicky typ proměnné) int x = 10; int b = 0; if(x > -25 && x < 50) b = 1; // Urci, zda y lezi v intervalu (-,-10> nebo <10,+ ) // Pokud ano nastav y = 0, b = true, // jinak y = y+10, b = false int x = 33; int b; if(y < -10 y > 10){ y = 0; b = 1; else{ y = y + 10; b = 0; A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 20

Podmíněný příkaz, chyby Jestliže v případě splněníči nesplnění podmínky má být provedeno více příkazů, je třeba z nich vytvořit složený příkaz nebo blok Příklad: jestliže x < y, vyměňte hodnoty těchto proměnných Chybně: if (x < y) pom = x; x = y; y = pom; x<y x<y Správně: if (x < y) { pom = x; x = y; y = pom; A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 21

Podmíněný příkaz, příklad Příklad: do min uložte menší z čísel x a y a do max uložte větší z čísel Chybně: if (x < y) min = x; max = y; else min = y; max = x; Správně: if (x < y) { min = x; max = y; else { min = y; max = x; A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 22

Podmíněný příkaz, příklad Do příkazu if lze vnořit libovolný příkaz, tedy i podmíněný příkaz Příklad: do s uložte 1, 0 nebo 1 podle toho, zda x je menší než nula, rovno nule nebo větší než nula if (x < 0)s = -1; else if (x == 0)s = 0; else s = 1; Příklad: do max uložte největší z čísel x, y a z if (x > y) if (x > z) max = x; else max = z; else if (y > z) max = y; else max = z; A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 23

Podmíněný příkaz, příklad chyby Pozor na vnoření neúplného if do úplného if Příklad: zapište příkazem if následující větvení: ne ano i > 0 ne i <10 z = 2 ano z = 1 Chybně!!!!: if (i > 0) if (i < 10) z = 1; else z = 2; Správně: if (i > 0) { if (i < 10) z = 1; else z = 2; Pozn:: v NetBeans je možnost formátování!! A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 24

Podmíněný příkaz, příklad Program, který pro zadaný rok zjistí, zda je přestupný Přestupný rok je dělitelný 4 a buď není dělitelný 100 nebo je dělitelný 1000 #include <stdio.h> #include <stdlib.h> int main(nt argc, char** argv) { int rok; printf("zadejte rok = "); scanf("%d", &rok); printf("\nrok %4d",rok); if (rok%4==0 && (rok%100!=0 rok%1000==0)) else printf(" je prestupny \n\n"); printf(" neni prestupny \n\n"); A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 25

Cykly Cykly umožní řízené opakování výpočtu se změněnými podmínkami Cykly s testem ukončení před výpočtem while( ) { // Telo cyklu podmínka + příkaz - for( ; ; ){ // Telo cyklu Cykly s testem ukončení po výpočtu do { // Telo cyklu while( ); - příkaz podmínka + A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 26

Základní příkaz cyklu, který má tvar while (podmínka) příkaz Příklad: q = x; while (q>=y) q = q-y; Příkaz while podmínka + příkaz - (jsou-li hodnotami proměnných x a y přirozenáčísla, co je hodnotou proměnné q po skončení uvedeného cyklu?) Má-li se opakovaně provádět více příkazů, musíme vytvořit složený příkaz Příklad: q = x; p = 0; while (q>=y){ q = q-y; p = p+1; (jsou-li hodnotami proměnných x a y přirozenáčísla, co je hodnotou proměnných p a q po skončení uvedeného cyklu?) A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 27

Příkaz while, příklad Výpočet faktoriálu přirozeného čísla n ( n! = 1 2... n ) #include <stdio.h> #include <stdlib.h> int main(int argc, char** argv) { int n, i = 1, f = 1; printf("zadejte prirozene cislo (max 12) n = "); scanf("%d", &n); if (n < 1) { printf("\n n = %d neni prirozene cislo \n\n", n); exit(0); while (i < n) { i = i + 1; f = f * i; printf("\n %3d! = %d \n\n", n, f); return (EXIT_SUCCESS); A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 28

Příkaz do while Příkaz cyklu do se od příkazu while liší v tom, že podmínka se testuje až za tělem cyklu Tvar příkazu: do příkaz while (podmínka); Vnořeným příkazem je nejčastěji složený příkaz Příklad (faktoriál): f = 1; i = 0; do { i = i+1; f = f*i; while (i<n); - podmínka + příkaz Poznámka k sémantice: příkaz do provede tělo cyklu alespoň jednou, nelze jej tedy použít v případě, kdy lze očekávat ani jedno provedení těla cyklu A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 29

Příkaz for Tvar příkazu for: for ( inicializace ; podmínka ; změna ) příkaz Provedení příkazu for : inicializace; while (podmínka) { příkaz změna; + - Cyklus je často řízen proměnnou, pro kterou je stanoveno: jaká je počáteční hodnota jaká je koncová hodnota jak změnit hodnotu proměnné po každém provedení těla cyklu A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 30

Příkaz for příklad faktoriál Cykly tohoto druhu lze zkráceně předepsat příkazem for: f = 1; for (i=1; i<=n; i=i+1) f=f*i; Sémantický význam int f = 1; int i = 1; while (i<=n) { // počáteční hodnota řídicí proměnné // podmínka určující koncovou hodnotu f = f*i; // tělo cyklu i = i+1; // změna řídicí proměnné A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 31

Zpracování posloupností I Příklad: program pro součet posloupnosti čísel Hrubé řešení: suma = 0; while (nejsou přečtena všechna čísla) { dalsi = přečti celé číslo; suma = suma+dalsi; Jak určit, zda jsou přečtena všechna čísla? Možnosti: 1. počet čísel bude vždy stejný, např. 5 2. počet čísel bude dán na začátku vstupních dat 3. vstupní data budou končit zarážkou, např. nulou Struktura vstupních dat formálně: 1. a 1 a 2 a 3 a 4 a 5 2. n a 1 a 2... a n 3. a 1 a 2... a 5 0, kde a i 0 A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 32

Zpracování posloupností II Řešení 1 vstupní data: a 1 a 2 a 3 a 4 a 5 #include <stdio.h> #include <stdlib.h> int main(int argc, char** argv) { int i, suma, dalsi; printf("zadejte 5 cisel \n"); suma = 0; for (i = 1; i <= 5; i++) { scanf("%d", &dalsi); suma = suma+dalsi; printf("suma = %d \n\n", suma); return (EXIT_SUCCESS); A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 33

Zpracování posloupností III Řešení 2 vstupní data: n a 1 a 2... a n #include <stdio.h> #include <stdlib.h> int main(int argc, char** argv) { int i, suma, dalsi, n; printf("zadejte pocet cisel = "); scanf("%d", &n); printf("\nzadejte %d cisel \n", n); suma = 0; for (i = 1; i <= n; i++) { scanf("%d", &dalsi); suma = suma+dalsi; printf("suma = %d \n\n", suma); return (EXIT_SUCCESS); A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 34

Zpracování posloupností IV Řešení 3 vstupní data: a 1 a 2... a n 0, kde a i 0 #include <stdio.h> #include <stdlib.h> int main(int argc, char** argv) { int suma, dalsi; printf("zadejte radu cisel zakoncenou nulou \n"); suma = 0; scanf("%d", &dalsi); while (další!= 0) { suma = suma+dalsi; scanf("%d", &dalsi); printf("suma = %d \n\n", suma); return (EXIT_SUCCESS); A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 35

continue vynechá část výpočtu cyklu while( ) { if( ) continue; // Vynechana cast vypoctu do { if( ) continue; // Vynechana cast vypoctu while( ); for( ; ; ){ if( ) continue; // Vynechana cast vypoctu A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 36

Příkaz continue Příkazy while a for testují ukončení cyklu před provedením těla cyklu Příkaz do testuje ukončení cyklu po provedení těla cyklu Někdy je třeba ukončit cyklus v nějakém místě uvnitř těla cyklu (které je v tom případě tvořeno složeným příkazem) Příkaz continue předepisuje předčasné ukončení průchodu těla cyklu Příklad: int i; for (i = 1; i <= 100; i++) { if (i%10 == 0) continue; printf("%d \n\n", i); příkaz vypíše čísla od 1 do 100 s výjimkou dělitelných 10 37

Příkaz break Příkaz break vnořený do podmíněného příkazu ukončí předčasně příkaz, schematicky: while (...) {... if (ukončit) break;... Příkaz break předepisuje předčasné ukončení těla cyklu Příklad: int i; for (i = 1; i <= 100; i++) { if (i%10 == 0) break; printf("%d \n\n", i); příkaz vypíše čísla od 1 do 9 A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 38

break předčasné ukončení výpočtu while( ) { if( ) break; // Predcasne ukonceni cyklu do { if( ) break; while( ); // Predcasne ukonceni cyklu for( ; ; ){ if( ) break; // Predcasne ukonceni cyklu A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 39

Příkaz break a continue příklad int main(int argc, char** argv) { int i; for (i = 1; i <= 30; i++) { if (i%10 == 0) continue; printf("%d \n", i); int i; for (i = 1; i <= 30; i++) { if (i%10 == 0) break; printf("%d \n", i); A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 40

Konečnost cyklů Aby algoritmus byl konečný, musí každý cyklus v něm uvedený skončit po konečném počtu kroků Nekonečný cyklus je častou chybou Základní pravidlo pro konečnost cyklu: provedením těla cyklu se musí změnit hodnota proměnné vyskytující se v podmínce cyklu Triviální příklad špatného cyklu: while (i!=0) j = i-1; Tento cyklus se buď neprovede ani jednou, nebo neskončí Uvedené pravidlo konečnost cyklu ještě nezaručuje Konečnost cyklu závisí na hodnotách proměnných před vstupem do cyklu double x = 0; int i = -1; while (i<0) {x = x + Math.sin(i* 0.6); i--; A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 41

Konečnost cyklů Příklad: while (i!= n) { P; // příkaz, který nezmění hodnotu proměnné i i++; Otázka: co musí splňovat hodnoty proměnných i a n před vstupem do cyklu, aby cyklus skončil? Odpověď vstupní podmínka konečnosti cyklu: i <= n Vstupní podmínku konečnosti cyklu lze určit ke každému cyklu (někdy je to velmi obtížné) Splnění vstupní podmínky konečnosti cyklu musí zajistit příkazy předcházející příkazu cyklu Zásada: zabezpečený program testuje přípustnost vstupních dat A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 42

Příkaz switch Příkaz switch (přepínač) umožňuje větvení do více větví na základě různých hodnot výrazu (nejčastěji typu int nebo char) Základní tvar příkazu: switch (výraz) { case konstanta 1 : příkazy 1 break; k=? case konstanta 2 : příkazy 2 break;... case konstanta n : příkazy n break; default : příkazy def kde konstanty jsou téhož typu, jako výraz příkazy jsou složené příkazy Sémantika (zjednodušeně): vypočte se hodnota výrazu a pak se provede ten příkaz, který je označen konstantou označující stejnou hodnotu není-li žádná větev označena hodnotou výrazu, provedou se příkazy def A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 43

switch příklad den v roce Program pro výpočet pořadového čísla dne v roce #include <stdio.h> #include <stdlib.h> int main(int argc, char** argv) { int den, mesic, rok, n = 0; printf("zadejte den, měsíc a rok = "); scanf("%d", &den); scanf("%d", &mesic); scanf("%d", &rok) switch (mesic) { case 1: n = den; break; case 2: n = 31+den; break; case 3: n = 59+den; break; case 4: n = 90+den; break; case 5: n = 120+den; break; case 6: n = 151+den; break;... case 12: n = 334+den; break; if (mesic>2 && rok%4==0 && (rok%100!=0 rok%1000==0)) n = n+1; printf("den = %d Mesic = %d Rok = %d\n", den,mesic.rok); return (EXIT_SUCCESS); A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 44

Příkaz switch příklad // switch( ) Ucel: vetveni programu do vice smeru // // Testuj x, kdyz x =. tak nastav do v =. // 2 300 // 6 400 // jina hodnota 500 int v,x=6; v = 500; switch(x) { case 2: v = 300; break; case 6: v = 400; break; int v,x=6; switch(x) { case 2: v = 300; break; case 6: v = 400; break; default: v = 500; break; A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 45

C struktura programu int main(int argc, char** argv) { int n; printf("zadej pocet = "); scanf("%d", &n); while (n > 0) { printf("vypis = %d", n); n = zmensi(n); int zmensi(int n) { n = n-1; return n; A8B14ADP Algoritmizace a programovaní -Jazyk C - rizeni behu programu 46

Algoritmizace a programování Jazyk C řízení běhu programu KONEC České vysoké učení technické Fakulta elektrotechnická