Úvod do programování. Úvod do programování. ing. Miroslav Jílek 2009, SJOP Poděbrady



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

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

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

Programovací jazyk Pascal

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í

Algoritmizace. 1. Úvod. Algoritmus

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

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

6 Příkazy řízení toku

Sada 1 - Základy programování

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

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

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

Lekce 01 Úvod do algoritmizace

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

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

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

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

NPRG030 Programování I, 2010/11

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

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

10 Algoritmizace Příklad 2 Word 2007/ VBA

NPRG030 Programování I, 2016/17 1 / :58:13

Násobení pomocí sčítání

POČÍTAČE A PROGRAMOVÁNÍ

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

ALGORITMIZACE Příklady ze života, větvení, cykly

Závěrečná zkouška z informatiky 2011

Zadání: TÉMA: Zápis algoritmu, čtení textového souboru, porovnání řetězců.

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

MAXScript výukový kurz

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

VY_32_INOVACE_08_2_04_PR

2. lekce Algoritmus, cyklus Miroslav Jílek

Martin Hejtmánek hejtmmar

Sada 1 - Základy programování

Sada 1 - Základy programování

ALGORITMIZACE A PROGRAMOVÁNÍ

Pracovní listy - programování (algoritmy v jazyce Visual Basic) Algoritmus

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

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Typové a netypové soubory

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

KAPITOLA 9 - POKROČILÁ PRÁCE S TABULKOVÝM PROCESOREM

Úvod do programování

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

Algoritmizace a programování

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Jednoduché příkazy jazyka Pascal

Sada 1 - Základy programování

Programujeme v softwaru Statistica

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

ŘÍDÍCÍ STRUKTURY - PODMÍNKY

5 Přehled operátorů, příkazy, přetypování

Řídicí struktury. alg3 1

CZ.1.07/1.5.00/

C2110 Operační systém UNIX a základy programování

Basic256 - úvod do programování Příklady. ing. petr polách

Tabulkový procesor. Základní rysy

Algoritmizace řazení Bubble Sort

dovolují dělení velkých úloh na menší = dekompozice

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

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

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů.

Algoritmizace prostorových úloh

Sada 1 - Základy programování

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

Školní kolo soutěže Baltík 2009, kategorie C

Poslední nenulová číslice faktoriálu

NPRG030 Programování I RNDr.Tomáš Holan, Ph.D. 4.patro, č

Jazyk C Program v jazyku C má následující strukturu: konstanty nebo proměnné musí Jednoduché datové typy: Strukturované datové typy Výrazy operátory

zapište obslužnou metodu události Click tlačítka a vyzkoušejte chování polevýsledek.text = polečíslo1.text + polečíslo2.text;

Stručný návod k programu Octave

Sada 1 - Základy programování

Nový způsob práce s průběžnou klasifikací lze nastavit pouze tehdy, je-li průběžná klasifikace v evidenčním pololetí a školním roce prázdná.

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

Programování v jazyce JavaScript

MQL4 COURSE. By Coders guru -5 Smyčky & Rozhodnutí Part 1

VISUAL BASIC. Práce se soubory

Základy programovacího jazyka Turbo Pascal

Sada 1 - Základy programování

Algoritmizace prostorových úloh

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: Předmět: ZAP

Programování 2 (NMIN102) Soubory. RNDr. Michal Žemlička, Ph.D.

ALGORITMIZACE PRAKTICKÉ

Stěžejní funkce MS Excel 2007/2010, jejich ovládání a možnosti využití

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

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

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

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Přijímací zkouška z informatiky Dz

PROGRAMOVÁNÍ V SHELLU

1. D Y N A M I C K É DAT O V É STRUKTUR Y

NPRG030 Programování I, 2018/19 1 / :25:37

KAPITOLA 4 ZPRACOVÁNÍ TEXTU

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

2 Datové typy v jazyce C

NPRG030 Programování I, 2015/16 1 / :25:32

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody

Digitální učební materiál

Transkript:

Úvod do programování ing. Miroslav Jílek 2009, SJOP Poděbrady 1

Obsah 1) Algoritmus 2 2) Vývojový diagram 4 3) Příklady vývojových diagramů 9 4) Úvod do programování v Pascalu 13 5) Příklady programů s komentářem 17 6) Řešení cyklů For 20 Úvodem Na začátek si vysvětlíme dva pojmy bez jejichž pochopení nelze začít studium programování. Jsou to pojmy proměnná a hodnota proměnné. Proměnná je název vymezeného objektu, do kterého lze vkládat obsah, kterému říkáme hodnota proměnné. Na příklad: Sklenice je proměnná a pivo je obsah proměnné. Obsah proměnné můžeme změnit, například pivo vylijeme a do sklenice místo piva nalijeme mléko. Změnili jsme obsah proměnné, ale proměnná zůstala původní. Stejně tak to funguje v programování můžeme měnit obsahy proměnných. Proměnná má dvě vlastnosti. První její vlastnost je jméno proměnné a druhá je typ proměnné. Jméno slouží k uchopení (matematickým a logickým operacím) a typ proměnné definuje jakou do proměnné můžeme vložit hodnotu číselnou, textovou, logickou (true/false). Hodnota proměnné má vlastnost jednu a tou je informace, kterou nese. 2

Algoritmus Algoritmus je exaktně definovaný postup řešení problému (úlohy). Řešení se skládá z jednotlivých kroků. Pořadí kroků musí být dodrženo. Záměna pořadí kroků způsobí dosažení chybného výsledku, v extrémním případě nebude výsledek dosažen žádný. Algoritmus pracuje s daty (údaji), které zpracovává podle stanovených kritérií (podmínek). Algoritmus musí vždy poskytnou výsledek. Pozor: výsledkem může být také informace, že úloha nemá řešení! Algoritmus má tři části. První část je sběr dat, druhá zpracování dat a třetí poskytnutí výsledku. Algoritmus může být jednoduchý (proběhne jednou) nebo cyklický (neustále se opakuje a je ukončen splněním nějaké podmínky nebo vnějším zásahem). Požadavky na algoritmus a) musí poskytovat exaktní výsledek b) musí být stabilní pro všechna možná vstupní data c) měl by být maximálně univerzální, jednoduchý a rychlý Každý počítačový program má svůj algoritmus. Běžné uživatelské programy se samozřejmě skládají z velkého množství jednotlivých algoritmů, které jsou vzájemně propojeny a vzájemně si předávají data. Vytváření počítačových programů je velice komplikovaná činnost, která zahrnuje celou řadu kroků, které musíme provést a respektovat. Kromě vlastního programovaní (psaní kódu) se jedná o zjištění existujících řešení, komunikaci se zákazníky (průzkum potřeb potenciálních uživatelů, reklama a školení), dále nepřetržitý servis a aktualizace produktů. V dnešní době patří právě marketingové otázky programování k těm rozhodujícím. Úspěšný je takový software, který je nejen programátorsky kvalitní, ale který má marketingovou a technickou podporu. 3

Jednoduchý příklad algoritmu: Jako příklad algoritmu vezměme řešení problému, kdy máme projít dveřmi. Tato úloha se zdá být velice jednoduchá, ale to jen proto, že ji máme zautomatizovanou a v běžném životě nad ní nepřemýšlíme. Řešení úlohy si nyní popíšeme kroky, resp. činnostmi, které musíme provést: 1) Otázka : Jsem u dveří? Pamatujte: Každá otázka (podmínka) použitá v algoritmu musí mít jednoznačnou odpověď Ano nebo Ne! Nesmí existovat neurčitá odpověď. 2) Odpověď: Ne pak udělej krok ke dveřím a opakuj bod jedna, Ano pokračuj bodem tři 3) Otázka: Jsou dveře otevřeny? 4) Odpověď: Ne pak otevři dveře, Ano žádná akce 5) Projdi dveřmi Na tomto příkladě vidíme, že nelze zaměnit pořadí jednotlivých kroků. Nelze nejprve projít dveřmi a pak je otevřít. To by skončilo karambolem. Stejně tak je tomu i u programování. Nyní si všimněte bodu dva. Jedná se o cyklus úkonů, kdy děláme kroky ke dveřím, do té doby, než ke dveřím přijdeme. Počet kroků není předem znám a závisí na výchozí pozici tedy bodu, ze kterého začínáme řešit problém. Zajímavý je také bod čtyři. Zde se algoritmus rozděluje. V případě odpovědi Ne dveře otevřeme, v případě odpovědi Ano nic neděláme. Dále se větve algoritmu spojí a pokračují dalším krokem. Tuto úlohu si zapamatujte. Později, na stránce 9, se k ní ještě vrátíme. Úkol: Promyslete si situaci, kdybychom museli ještě řešit, zda jsou dveře zamčeny, zda máme klíč apod. 4

Vývojový diagram Vývojový diagram je grafické znázornění algoritmu. Vývojový diagram usnadňuje vývoj algoritmu. Jeho velkou předností je jeho přehlednost. Druhou možností jak zapsat algoritmus je slovní vyjádření v krocích. Takto jsme znázornili algoritmus v minulém příkladu, kdy jsme procházeli dveřmi. Vývojový diagram se skládá ze značek. Značky jsou grafické symboly, která představují matematické nebo logické operace nebo usnadňují či dokonce umožňují orientaci ve vývojovém diagramu. Jednotlivé značky jsou vzájemně propojeny čarami. Čáry tak znázorňují postup od jednotlivých kroků ke krokům dalším. V algoritmu a tedy i ve vývojovém diagramu je možné, aby se některé kroky opakovaly a některé byly vynechány. O tom, zda se daný krok provede nebo ne rozhoduje konkrétní situace pro konkrétní vstupní údaje. Značky vývojového diagramu 1) Mezní značka Mezní značka symbolizuje začátek (Start) a konec algoritmu. Algoritmus musí mít jeden začátek a jeden konec. I u složitých programů je jeden začátek a jeden konec nutností. Při zakončení programů se provádí některé nezbytné softwarové úkony a proto je jeden konec nutný. 5

2) Spojovací značka Spojovací značka slouží ke znázornění spojení jednotlivých částí algoritmu, které bylo nutno z důvodu nedostatku místa na papíře nebo pro zvýšení přehlednosti. Pokud rozdělujeme algoritmus do více částí, pak spojovací značky znázorňují, které čáry budou vzájemně spojeny, tedy kde navazuje algoritmus. Do kolečka značky se zpravidla zapisuje číslo (nebo jiný symbol). Stejná čísla (symboly) pak určují kde bude přerušená čára algoritmu pokračovat. 3) vstupní a výstupní údaje Tato značka symbolizuje vstup dat do algoritmu nebo výstup výsledků algoritmu. 6

4) Zpracování dat Tato značka představuje krok, při kterém se zpracovávají data. Může to být například matematická operace, operace s textovými řetězci a podobně. 5) Rozhodování příkaz IF Příkaz IF rozvětví (rozdělí) chod algoritmu do dvou větví. Rozdělení je provedeno na základě logického vyhodnocení podmínky. Vyhodnocení může mít hodnotu Ano(+)/Ne(-) (True/False). Chod algoritmu pokračuje tou větví, která odpovídá logickému vyhodnocení podmínky. Větev True obsahuje jiné kroky než větev False. 7

6) Cyklus FOR Cyklus FOR se opakuje předem definovaným počtem opakování. I se nazývá řídící proměnná cyklu a nabývá hodnot od 1 do N s krokem 1 (tedy 1,2,3,...N). V našem případě číslo jedna a číslo N nazýváme počáteční a koncová hodnota cyklu. Počáteční a koncovou hodnotu cyklu můžeme definovat libovolně. Také krok může být jiný než plus jedna (např.-1, +5, atd.). Počáteční a koncová hodnota cyklu a hodnota krok (step) MUSÍ být celočíselná (integer, longinteger). Krok cyklu (step) znamená o jakou hodnotu se změní řídící proměnná cyklu po každém opakování. Např. v cyklu od 2 do 9 s krokem +2 se cyklus bude opakovat čtyřikrát. Poslední hodnota proměnné cyklu, při které se vykonají příkazy těla cyklu (smyčky), bude 8. Při každém opakování se provedou úkony (kroky) definované v části smyčka. Pokud chceme tento cyklus předčasně ukončit musíme změnit (nastavit) hodnotu řídící proměnné cyklu na hodnotu za její koncovou hodnotu. Cyklus FOR může být použit vnořeně, tedy může běžet cyklus v cyklu. Pak jednotlivé cykly nazýváme vnitřní a vnější, při vícenásobném použití první vnitřní, druhý vnitřní atd. 8

7) Cyklus WHILE Cyklus WHILE se opakuje tak dlouho, dokud je podmínka platná (True). V takovém případě se při každém cyklu (smyčce, loop) opakují příkazy těla cyklu (na obr. označeno jako tělo (body of cycle)). Jakmile je podmínka neplatná (False) cyklus končí. Pokud je podmínka neplatná od samého počátku cyklu, pak se příkazy těla cyklu nevykonají ani jednou! Toto je nejdůležitější vlastnost cyklu While. Počet opakování cyklu tedy není předem znám a je závislý na vyhodnocení podmínky cyklu. Existují dvě mezní situace: první, že se cyklus, resp. příkazy jeho těla nevykonají ani jednou (podmínka je od samého počátku False) nebo se opakují do nekonečna (podmínka není nikdy True). Těchto vlastností je možno efektivně využít při programování. Podmínkou rozumíme jakýkoli logický nebo matematický výraz, ke kterému existuje pravdivostní hodnota Ano (True) nebo Ne (False). Příkladem podmínek můžou být např. podmínky: A>2, A>=B, A=3 apod. Všimněte si, že v podmínce zpravidla používáme proměnné a testujeme jejich hodnoty. 9

Příklady vývojových diagramů 1) Vývojový diagram úlohy Průchod dveřmi Tento vývojový diagram znázorňuje algoritmus, se kterým jsme se seznámili již v úvodu kapitoly Algoritmy. První co algoritmus řeší je otázka, zda jsme u dveří. Pokud ne, pak uděláme krok ke dveřím. Po příchodu ke dveřím řešíme otázku, zda jsou dveře otevřené. Příkaz Otevřít se v této úloze provede pouze za situace, kdy dveře nejsou otevřené. Všimněte si: nezáleží, jak daleko jsme od dveří ani zda jsou dveře otevřené. Algoritmus je UNIVERZÁLNÍ. 10

2) Vývojový diagram úlohy vyhledání největšího čísla z řady N-čísel V první části diagramu je Vstup N čísel. Použili jsme zjednodušení a neřešíme problém samotného vložení těchto čísel. V praxi bychom museli doplnit ještě nějaký cyklus od jedné do N kdy by se postupně vkládala jednotlivá čísla. Pro řešení této úlohy je zavedeno pole čísel. Jedná se o jednotlivá čísla uložená pod jedním názvem a každé jednotlivé číslo má svůj index. V příkladu jsme použili jako název Č a index v závorce. Jako index mohou být použita přirozená čísla, u některých programovacích nástrojů může být použita i nula. Řešení úlohy spočívá v tom, že jako maximum (Max) vezme první číslo, tedy Max = Č(1), a následně postupně testujeme všechna další čísla. Pokud je některé z čísel větší než momentální maximum je toto číslo, resp. jeho hodnota, vložena do do Max např.: If Č(I) > Max Then Max = Č(I). Úkol: Upravte algoritmus tak, aby čísla testoval od konce k začátku. 11

3) Vývojový diagram úlohy řazení čísel podle velikosti Řazení čísel je jedním z nejdůležitějších základních algoritmů v programování. Existuje mnoho způsobů jak řadit čísla. V naší úloze je využit princip vzájemné výměny sousedních čísel, který se opakuje tak dlouho, až jsou čísla seřazena. Také zde nebudeme řešit způsob zadávání jednotlivých čísel. Soustředíme se na vlastní řazení. Řazení probíhá v cyklu od jedné do N-1. Do N-1 proto, že jsou porovnávána vždy dvě čísla. Poslední porovnávanou dvojicí čísel jsou předposlední a poslední číslo. Pokud bychom cyklus opakovali N-krát došly by chybě, neboť za posledním číslem (n-tým) již další neexistuje. Pokud je první číslo porovnávané dvojice čísel větší než druhé, pak dojde k jejich výměně, resp. k výměně jejich pořadí v řadě čísel a ukazatel (řídící proměnná cyklu) se zmenší o dvě. Pozor! Řídící proměnná cyklu se nesmí dostat pod startovní hodnotu 1 (If I<0 then I=0). Při dalším cyklu se nula zvýší na jedničku a může tak být testováno první číslo! Na konci řazení bude minimum na první pozici (zleva). 12

Pro záměnu obsahů dvou proměnných potřebujeme použít třetí proměnnou, která se v našem případě nazvali Temp. Princip je znázorněn na obrázku: Např.: na počátku bude A = 3, B = 5 a dále: 1) Temp=A 2) A=B 3) B=Temp Na konci bude A =5 a B =3. Tento princip výměny je univerzální pro všechny typy proměnných. Pro číselné typy proměnných se obejdeme bez přechodné, tedy třetí proměnné. Můžeme postupovat takto: 1) A = A + B 2) B = A B 3) A = A B Např.: na počátku bude A =3, B= 5 a budeme pokračovat: 1) A = 3 + 5 2) B = 8 5 3) A = 8 3 Na konci tedy bude A =5 a B =3! Vraťme se ještě k našemu algoritmu. Podívejme se jak bude probíhat řazení pro konkrétní řadu čísel: 4,3,2,5,3 : 1.změna 3,4,2,5,3 2.změna 3,2,4,5,3 3.změna 2,3,4,5,3 4.změna 2,3,4,3,5 5.změna 2,3,3,4,5 Všimněte si, čísla se postupně posouvají vlevo. Posouvání končí, kdy jsou čísla v celé řadě čísel vlevo menší než sousední čísla vpravo. 13

Úvod do programování v Pascalu V této kapitole se seznámíme s nejelementárnějšími postupy programování v programovacím nástroji Pascal. Po zvládnutí tohoto úvodu do programování nebudete schopni komerčně programovat, ale snadněji a rychleji pochopíte moderní programovací nástroje ve svém dalším studiu. Budeme se zabývat pouze těmi nejdůležitějšími příkazy (commands), které jsou základem pro vytváření algoritmů. 1.Typy proměnných: (budeme se zabývat pouze některými) Integer - celé číslo v rozsahu < 32768; + 32768> Longint - celé číslo v rozsahu < 2 mld.; + 2 mld.> Real - reálné číslo Char - jednoznaková proměnná (obsahuje max. 1 znak) String[x] - řetězec, obsahující x znaků Array pole, množina (set) tato proměnná má jedno jméno, ale může obsahovat více údajů stejného typu. Např.: Array[1..5] of Integer znamená že proměnná bude obsahovat pět celočíselných údajů. Jednotlivé údaje jsou identifikovány jménem proměnné a indexem 1 až 5. 2.Operandy a matematické operace: +, -, *, /, ^ sčítání, odčítání, násobení, dělení, mocnění <, >, =<, >=, <>, = logické porovnání A^0.5 nebo Sqrt(A) je druhá odmocnina z A Or, And logické spojky := přiřazení (vložení) Příklady použití: A:=A+B příkaz vezme hodnotu z proměnné A a přičte k ní hodnotu proměnné B a výsledek vloží do proměnné A A:=A+1 příkaz zvětší (zvýší) hodnotu proměnné A o jedničku If A<>0 And B>5 Then C:=1; příkaz porovná obsah proměnné A a obsah proměnné B a pouze v případě když je obsah proměnné A různý od nuly a zároveň obsah proměnné B je větší než pět vloží do proměnné C hodnotu jedna. 14

3.Příkazy pascalu: (vysvětlíme si pouze ty nejdůležitější z hlediska seznámení se se základy programování v Pascalu) Write, Writelnvypíše obsah proměnné nebo závorky na monitor do pozice kurzoru, např. Příkaz Writeln(A) vypíše hodnotu proměnné A, příkaz Write('Ahoj') vypíše slovo Ahoj, writeln navíc posune kurzor na nový řádek Read, Readln po stisknutí klávesy Enter přečte hodnotu z obrazovky a vloží ji do proměnné v závorce, např. Readln(A) vloží hodnotu do proměnné A, pozor: zadaná hodnota musí odpovídat typu proměnné, ln má stejný význam jako u writeln GoToXY změní pozici kurzoru, např. GoToXY(5,6) umístí kurzor na pátý sloupec šestého řádku obrazovky, obrazovka má 80 sloupců a 24 řádků ClrScr If While smaže obrazovku testuje podmínku a na základě výsledku (True/False) pokračuje chod programu určitou cestou Např.: If A>B Then Příkaz1 Else Příkaz2; Pokud bude výsledek podmínky A>B True pak bude vykonán Příkaz1, pokud bude výsledek podmínky roven False pak bude vykonán Příkaz2. Pokud neuvedeme v příkazu If část Else Příkaz2, pak se v případě, že výsledek podmínky bude False nevykoná žádný příkaz. Tento příkaz na základě výsledku vyhodnocení podmínky (v našem případě podmínky A>B) větví chod programu do dvou cest. Pokud bychom chtěli, můžeme na místo Příkaz1 vložit i více příkazů. V takovém případě musí být tyto příkazy ohraničeny příkazem Begin a End příkaz cyklu. Cyklus se opakuje tak dlouho dokud je podmínka splněna (True). Při každém opakování se vykoná příkaz Příkaz1. Na místo Příkaz1 můžeme vložit i více příkazů. V takovém případě 15

Repeat For Length GoTo musí být tyto příkazy ohraničeny příkazy Begin a End Např.: While Podmínka do Příkaz1; Pokud není podmínka splněna pak se cyklus nevykoná ani jednou příkaz cyklu. Cyklus se opakuje tak dlouho, dokud podmínka není splněna (skončí až když je podmínka True). Příkaz je zakončen klíčovým slovem Until. Např.: Repeat Příkaz1 Until Podmínka; Cyklus se bude vykonávat (včetně příkazu Příkaz1 nebo skupiny příkazů mezi příkazy Repeat a Until tak dlouho, dokud nebude podmínka splněna (dokud bude False). Příkaz(y) se tedy vykoná nejméně jednou! Příkaz cyklu s definovaným počtem opakování. Např.: For A:=1 To 10 Do Příkaz1; Tento cyklus vykoná desetkrát Příkaz1. Na místo Příkaz1 můžeme vložit více příkazů, ale tyto příkazy musí být ohraničeny příkazy Begin a End vrací dynamickou délku řetězce (length of string) Např.: S :='Ahoj studente!'; X:=Length(S); pak X bude mít hodnotu 14, protože řetězec (string) S obsahuje 14 znaků. skok v programu. Tento příkaz přesune chod (zpracování) programu až na řádek, který začíná definovaným návěstím (label) Např.: If A=5 then Goto Skok1; Příkaz1; Příkaz2; Skok1: Příkaz3; Pokud bude A rovno 5, pak se příkazy Příkaz1 a Příkaz2 nevykonají a chod programu bude pokračovat až návěstím Skok1 a tedy příkazem Příkaz3. 16

4.Struktura programu Program napsaný v programovacím jazyce Pascal má několik základních pravidel. Tato pravidla umožňují překládat a vykonávat kompilátoru příkazy a umožňují běh celého programu. Na následujícím schématu si tato základní pravidla vysvětlíme (také zde se omezíme na nezbytné minimum informací): Program Jmeno; Uses Crt; Var JménoProměnné: TypProměnné; Begin Příkazy Programu; End. Každý program začíná klíčovým slovem Program, za ním následuje jméno programu. Každý řádek je zakončen středníkem. Tento symbol pro kompilátor znamená konec řádku (příkazu). Výjimku tvoří příkaz začínajícího bloku např. Begin nebo Repeat. Na druhém řádku je uvedeno klíčové slovo Uses a za ním následuje seznam použitých ovladačů. Ovladače jsou moduly, které umožňují práci programu např. s periferním zařízením, s grafickou kartou apod. V našem případě ovladač Crt umožňuje spolupráci programu s monitorem a klávesnicí. Na třetím řádku našeho vzorového schématu je klíčové slovo Var. Tímto klíčovým slovem začíná deklarace v programu použitých proměnných. Proměnné deklarujeme tak, že nejprve zapíšeme jména proměnných od sebe oddělených čárkou, dále zapíšeme dvojtečku a za ní typ proměnné. Z tohoto vyplývá, že všechny takto deklarované proměnné budou pouze jednoho typu. Pokud potřebuje proměnné jiného typu musíme je deklarovat na dalším řádku. Nakonec zapíšeme tělo programu. To začíná příkazem Begin, končí příkazem End a mezi těmito příkazy jsou uvedeny příkazy programu (algoritmus programu). Tečka za posledním End představuje konec programu. 17

Příklady programů s komentářem Úvod do programování 1) Vyhledání maxima z řady čísel (algoritmus vyhledání Maxima ze str.10, pro zjednodušení budeme pracovat pouze s deseti celými čísly, navíc do programu přidáme ještě načtení deseti čísel) Program Maximum; Uses Crt; Var Max,I: Integer; C:Array[1..10] Of Integer; Begin ClrScr; For I:=1 To 10 Do Begin Write('Zadej ',I,'cislo : '); Readln(C[I]); End; ClrScr; For I:=1 To 10 Do Write(C[I],', '); Writeln; Max:=C[1]; For I:=2 To 10 Do If C[I]>Max Then Max:=C[I]; Write('Maximum je ',Max); Repeat Until (Keypressed) End. V programu použijeme (deklarovali jsme) proměnné Max (hledané maximum), I (řídící proměnná cyklu) a C (proměnná typu Array umožňuje zadat deset čísel). Všechny proměnné jsou typu Integer. První příkaz těla programu ClrScr smaže obrazovku. Dále následuje cyklus od 1 do 10, který postupně zobrazí deset řádků s výzvou na zapsání hodnoty (čísla). Pokaždé bude uživatel informován o pořadí, které číslo právě zadává. Příkaz Readln(C[I]) 18

bude vkládat údaje z obrazovky monitoru do proměnné C do pozice s indexem I. Po zadání desátého čísla bude monitor smazán a budou zobrazena všechna zadaná čísla v pořadí v jakém byla zadána na jednom řádku. Příkaz Writeln přesune kurzor na nový řádek. Do proměnné Max se vloží první zadané číslo, které v tu chvíli představuje maximum. Vlastní vyhledání maxima proběhne v cyklu od 2 do 10, tedy od druhého do posledního zadaného čísla, kdy bude každé číslo porovnáno s hodnotou proměnné Max a v případě, že právě testované číslo (C[I]) bude větší než právě aktuální maximum bude do proměnné Max vložena hodnota tohoto právě testovaného čísla. Po ukončení cyklu, tedy testování zadaných čísel bude na monitor vypsána věta s informací o hodnotě nalezeného maxima. Příkaz Repeat Until (Keypressed); v praxi bude opakovat cyklus, ve kterém nebude nic vykonáno, až do okamžiku stisknutí libovolné klávesy. Tento řádek tedy umožňuje přerušení chodu programu až do okamžiku, kdy stiskneme libovolnou klávesu. Poslední příkaz End s tečkou končí program. V případě, že bude zadána řada čísel, ve které existuje maximum vícekrát, pak bude jako maximum použito to první. Toto je důležité, pokud chceme znát pozici maxima v řadě. Otázky k přemýšlení: a) Upravte program tak, aby vyhledal minimum. b) Upravte program tak, aby informoval také o pozici, na které je zadáno maximum. c) Upravte program tak, aby vypočítal průměrnou hodnotu zadaných čísel. d) Upravte program tak, aby informoval, kolik zadaných čísel je kladných a kolik záporných e) Upravte program tak, aby umožňoval zadat pouze nezáporná čísla. 19

2) Řazení čísel (pro zjednodušení budeme pracovat pouze s deseti celými čísly) Program Razeni; Uses Crt; Var Temp,I: Integer; C:Array[1..10] Of Integer; Begin ClrScr; For I:=1 To 10 Do Begin Write('Zadej ',I,'cislo : '); Readln(C[I]); End; ClrScr; Write('Zadana rada cisel : '); For I:=1 To 10 Do Write(C[I],', '); Writeln; For I:=1 To 9 Do Begin If C[I]>C[I+1] Then Begin Temp:=C[I]; C[I]:=C[I+1]; C[I+1]:=Temp; I:=I-2; If I<0 Then I:=0; End; End; Write('Serazena rada cisel : '); For I:=1 To 10 Do Write(C[I],', '); Repeat Until (Keypressed) End. Vzhledem k tomu, že zápis programu je velice podobný zápisu předešlému vysvětlíme si pouze tu část algoritmu, ve které probíhá řazení. Algoritmus je určen k řazení deseti čísel (N=10). Cyklus, ve kterém budeme porovnávat sousední čísla bude od 1 do 9 (N-1). Jestliže bude testované číslo (index I) větší než číslo 20

následující (index I+1) pak se tato čísla v pořadí vymění. Výměna proběhne tak, že do přechodné proměnné Temp se vloží první číslo(index I), na pozici prvního čísla (I) se přesune následující číslo (I+1) a na místo následujícího čísla (I+1) se vloží hodnota proměnné Temp (I). Tím dojde k výměně pozic dvou sousedních čísel. Zde máme dvě možnosti: a) posunout ukazatel (řídící proměnná cyklu I) o dvě pozice zpět a dále testovat, zda není třeba číslo dále posunout vlevo. Tento způsob posouvá každé číslo vlevo tak dlouho, dokud není toto číslo na své pozici. Toto řešení je použito v příkladu. b) pokračovat v testování dále až do I=N-1. Tím by se vyměnila všechna sousední čísla, která by byla v opačném pořadí než požadujeme, ale bylo by třeba opakovat celý cyklus tolikrát, dokud by docházelo ke změnám v pořadí čísel, resp. dokud by nebyla všechna čísla definitivně seřazena. Otázky k přemýšlení: a) Upravte algoritmus programu tak, aby řadil čísla sestupně (decrease), tedy od maxima do minima. b) Navrhněte jiný způsob řazení. Řešení cyklů FOR V následujících příkladech si vysvětlíme proces cyklu for. a) jednoduchý cyklus B:=0; For A:=1 to 10 do begin B:=B + A; B:=2 * B A; end; Otázka: Jaká bude hodnota proměnné B na konci cyklu? 21

Tento jednoduchý cyklus provede při každém cyklu (bude jich deset) dva příkazy, resp. dvě matematické operace. Nejprve k obsahu proměnné B připočte (přidá) hodnotu proměnné A. Hodnota proměnné A bude postupně číslo od jedné do desíti. V druhé matematické operaci nejprve vynásobí hodnotu proměnné B dvěma a nakonec od výsledku odečte hodnotu proměnné A (tedy postupně v jednotlivých cyklech jedničku až desítku). Sestavme si nyní tabulku hodnot proměnných použitých v cyklu (jsou dvě, A a B, proměnná A je řídící proměnná cyklu): A B (na počátku = 0) 1 0+1=1, 2*1 1=1 2 1+2=3, 2*3-2=4 3 4+3=7, 2*7-3=11 4 11+4=15, 2*15-4=26 5 26+5=31, 2*31-5=57 6 57+6=63, 2*63-6=120 7 120+7=127, 2*127-7=247 8 247+8=255, 2*255-8=502 9 502+9=511, 2*511-9=1013 10 1013+10=1023, 2*1023-10=2036 2036. Výsledná hodnota proměnné B po ukončení cyklu bude 22

b) dvojitý (vnořený) cyklus C:=0; For A:=1 to 10 do For B:=A to 10 do C:=C+1; Otázka: Jaká bude hodnota proměnné C na konci cyklu? Tato úloha je složitější. Probíhá zde cyklus v cyklu. Vnější cyklus (řídící proměnná A) proběhne desetkrát a vnitřní cyklus (řídící proměnná B) bude postupně probíhat 10, 9,., 2 krát a nakonec jednou. Počet opakování vnitřního cyklu se bude postupně snižovat o jedničku. Důvodem je postupně se o jedničku zvyšující počáteční hodnota cyklu. Při každém opakování vnitřního cyklu se hodnota proměnné C zvýší o jedničku. To znamená, že potřebujeme zjistit kolikrát se provede přičtení jedničky k hodnotě proměnné C, resp. kolikrát se provede matematická operace C=C+1. Pro první vnější cyklus, kdy A=1, se provede přičtení 10 krát, pro druhý 9 krát až pro desátý jen jednou. Výsledná hodnota C je tedy součet řady čísel 10+9+8+7+6+5+4+3+2+1=((10+1)/2)*10=55. Pozn.: Součet přirozených čísel od 1 do N vypočítáme podle vzorce: = N * (1 + N) / 2 23