Řídicí struktury. alg3 1

Podobné dokumenty
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

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

Algoritmizace a programování

Algoritmizace a programování

Algoritmizace a programování

int t1, t2, t3, t4, t5, t6, t7, prumer; t1=sys.readint();... t7=sys.readint(); prume pru r = r = ( 1+t 1+t t3+ t3+ t4 t5+ t5+ +t7 +t7 )/ ;

6 Příkazy řízení toku

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

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

Rozklad problému na podproblémy

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

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

Příkaz while. while (podmínka) { příkaz; } Příklad: int i=0; while (i < 10) { System.out.println(i); i++; } // vypíše čísla od 0 do 9

Spojové struktury. Spojová struktura (linked structure):

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

Úvod do programovacích jazyků (Java)

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

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

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

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

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

Algoritmy a datové struktury

Textové soubory. alg9 1

Jazyk C# a platforma.net

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

1. Téma 12 - Textové soubory a výjimky

Řídicí příkazy KAPITOLA 3. Vstup znaků z klávesnice

Programovací jazyk Pascal

Příkazy a řídicí struktury v Javě. Tomáš Pitner, upravil Marek Šabo

2. lekce Algoritmus, cyklus 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++

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

Úvod do programování. Lekce 3

5. přednáška - Rozklad problému na podproblémy

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

Větvení programů příkaz IF

Základní stavební prvky algoritmu

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

Algoritmizace a programování

MQL4 COURSE. By Coders guru -5 Smyčky & Rozhodnutí Část 2

1. Téma 03 - Rozhodování

Soubor jako posloupnost bytů

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

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

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

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

KTE / ZPE Informační technologie

Třída jako zdroj funkcí

Algoritmizace prostorových úloh

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

Algoritmizace. Cíle předmětu

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

Klíčové pojmy: Cyklus, řídící proměnná, inicializace, test podmínky, přerušení cyklu, vnořování cyklů.

Úvod do programování v jazyce Java

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

2. Základy jazyka. Proměnné. Základy jazyka

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

9. přednáška - třídy, objekty

Datové struktury. alg12 1

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

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

NPRG031 Programování II --- 2/2 Z, Zk

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

Středoškolská technika 2017 PROGRAM NA GENEROVÁNÍ PRVOČÍSEL

Činnost: 1) Vyhodnotí se výraz E. 2) Jeho hodnota se uloží do proměnné V.

Inovace bakalářského studijního oboru Aplikovaná chemie

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

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

ÚVODNÍ ZNALOSTI. datové struktury. správnost programů. analýza algoritmů

Programovací jazyk C++ Hodina 1

KTE / ZPE Informační technologie

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);

5 Rekurze a zásobník. Rekurzivní volání metody

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

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

Řetězce a řídicí struktury

Objektově orientované programování

Programování v jazyce JavaScript

IAJCE Přednáška č. 6. logický celek, řešící dílčí část problému Příklad velmi špatného zápisu programu na výpočet obsahu obdélníku

Proměnné a datové typy

8 Třídy, objekty, metody, předávání argumentů metod

ŘÍDÍCÍ STRUKTURY - PODMÍNKY

cyklus s daným počtem opakování cyklus s podmínkou na začátku (cyklus bez udání počtu opakování)

Výrazy, operace, příkazy

KTE / ZPE Informační technologie

Zápis programu v jazyce C#

Data, výrazy, příkazy

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

3 KTE / ZPE Informační technologie

Úvod do programování v jazyce Java


Identifikátory označují objekty v programu používané (proměnné, typy, podprogramy).

Příklady: (y + (sin(2*x) + 1)*2)/ /2 * 5 = 8.5 (1+3)/2 * 5 = /(2 * 5) = 1.3. Pavel Töpfer, 2017 Programování 1-3 1

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

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

Základy algoritmizace a programování

8. přednáška: Soubory a proudy

Transkript:

Ří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: posloupnost, předepisující postupné provedení dílčích příkazů větvení, předepisující provedení dílčích příkazů v závislosti na splnění určité podmínky cyklus, předepisující opakované provedení dílčích í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: složený příkaz nebo blok pro posloupnost příkaz if pro větvení příkazy while nebo for pro cyklus (Pro zájemce uvedeme i zbývající strukturované příkazy jazyka Java) Složený příkaz: { posloupnost příkazů Blok: { posloupnost deklarací a příkazů Deklarace jsou v bloku lokální, tzn. neplatí vně bloku alg3 1

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; Sys.pln(min); // 2. varianta min = x; if (y < min) min = y; Sys.pln(min); alg3 2

Příkaz if 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 if (x < y) { pom = x; x = y; y = pom; Špatné řešení: if (x < y) pom = x; x = y; y = pom; alg3 3

Příkaz if Příklad: do min uložte menší z čísel x a y a do max uložte větší z čísel if (x < y) { min = x; max = y; else { min = y; max = x; Špatné řešení: if (x < y) min = x; max = y; else min = y; max = x; alg3 4

Příkaz if 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; alg3 5

Příkaz if 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 i > 0 ne ano i <10 ano z = 2 z = 1 Dobře: if (i > 0) { if (i < 10) z = 1; else z = 2; Špatně: if (i > 0) if (i < 10) z = 1; else z = 2; alg3 6

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 package alg3; import sugar.sys; public class Rok { public static void main(string[] args) { int rok; Sys.pln("zadejte rok"); rok = Sys.readInt(); Sys.p("rok "+rok); if (rok%4==0 && (rok%100!=0 rok%1000==0)) Sys.pln(" je přestupný"); else Sys.pln(" není přestupný"); alg3 7

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 (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í tvoř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?) alg3 8

Příklad Výpočet faktoriálu přirozeného čísla n ( n! = 1 2... n ) public class Faktorial { public static void main(string[] args) { Sys.pln("zadejte přirozené číslo"); int n = Sys.readInt(); if (n<1) { Sys.pln(n + " není přirozené číslo"); System.exit(0); int i = 1; int f = 1; while (i<n) { i = i+1; f = f * i; Sys.pln(n + "! = " + f); alg3 9

Příkaz do 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); Poznámka k syntaxi: příkaz do je jediným strukturovaným příkazem, který končí středníkem 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 alg3 10

Příkaz for 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 Příklad: f = 1; i = 1; // počáteční hodnota řídicí proměnné while (i<=n) // podmínka určující koncovou hodnotu { f = f*i; // tělo cyklu i = i+1; // změna řídicí proměnné Cykly tohoto druhu lze zkráceně předepsat příkazem for: f = 1; for (i=1; i<=n; i=i+1) f=f*i; alg3 11

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; Změnu řídicí proměnné přičtením resp. odečtením 1 lze zkráceně předepsat pomocí operátoru inkrementace resp. dekrementace: x++ x se zvětší o 1 x-- x se zmenší o 1 Příklad: f = 1; for (i=1; i<=n; i++) f=f*i; alg3 12

Zpracování posloupností 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 alg3 13

Zpracování posloupností Řešení 1 vstupní data: a 1 a 2 a 3 a 4 a 5 package alg3; import sugar.sys; public class Suma1 { public static void main(string[] args) { int další, suma, i; Sys.pln("zadejte 5 čísel"); suma = 0; for (i=1; i<=5; i++) { dalsi = Sys.readInt(); suma = suma+dalsi; Sys.pln("součet je " + suma); alg3 14

Řešení 2 vstupní data: n a 1 a 2... a n package alg3; import sugar.sys; Zpracování posloupností public class Suma2 { public static void main(string[] args) { int další, suma, i, n; Sys.pln("zadejte počet čísel"); n = Sys.readInt(); Sys.pln("zadejte " + n +" čísel"); suma = 0; for (i=1; i<=n; i++) { dalsi = Sys.readInt(); suma = suma+dalsi; Sys.pln("součet je " + suma); alg3 15

Zpracování posloupností Řešení 3 vstupní data: a 1 a 2... a n 0 kde a i 0 package alg3; import sugar.sys; public class Suma3 { public static void main(string[] args) { int dalsi, suma; Sys.pln("zadejte řadu čísel zakončenou nulou"); suma = 0; dalsi = Sys.readInt(); while (dalsi!=0) { suma = suma+dalsi; dalsi = Sys.readInt(); Sys.pln("součet je " + suma); alg3 16

Příkazy break a 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) K tomu slouží příkaz break vnořený do podmíněného příkazu while (...) {... if (ukončit) break;... Příkaz continue předepisuje předčasné ukončení těla cyklu Příklad: následující příkaz vypíše čísla od 1 do 100 s výjimkou dělitelných 10: for (int i=1; i<=100; i++) { if (i%10==0) continue; Sys.pln(i); alg3 17

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 alg3 18

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 alg3 19

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; 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 posloupnosti příkazů Sémantika (zjednodušeně): vypočte se hodnota výrazu a pak se provedou ty příkazy, které jsou označeny konstantou označující stejnou hodnotu není-li žádná větev označena hodnotou výrazu, provedou se příkazy def pro zájemce alg3 20

Příkaz switch Příklad: switch (n) { case 1: Sys.p("*"); break; case 2: Sys.p("**"); break; case 3: Sys.p("***"); break; case 4: Sys.p("****"); break; default: Sys.p("---"); Příkaz break dynamicky ukončuje větev Pokud jej neuvedeme, pokračuje se v provádění další větve Příklad: co se vypíše, má-li n hodnotu 3 a příkaz switch zapíšeme takto: switch (n) { case 1: Sys.p("*"); case 2: Sys.p("**"); case 3: Sys.p("***"); case 4: Sys.p("****"); default: Sys.p("---"); pro zájemce alg3 21

Příklad Program pro výpočet pořadového čísla dne v roce public class Den { public static void main(string[] args) { Sys.pln("zadejte den, měsíc a rok"); int den = Sys.readInt(); int mesic = Sys.readInt(); int rok = Sys.readInt(); int n = 0; 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; Sys.pln(den+"."+mesic+"."+rok+" je "+n+". den v roce"); pro zájemce alg3 22