Modul 1 Vývojové diagramy a příkazy jazyka Borland Pascal Text pro distanční studium Ing. Eliška Treterová Ostravská univerzita v Ostravě, Přírodovědecká fakulta Katedra Informatiky a počítačů Ostrava 2003
2
Obsah Úvod...4 1. Algoritmizace 1. část...5 1.1. Vývojové diagramy...6 1.2. Sestavení algoritmu...8 1.3. posloupnost (sekvence)...8 1.4. Větvení (alternativa, rozhodování)...10 1.5. Korespondenční úkol č.1...16 2. Algoritmizace 2. část...17 2.1. Cykly (Iterace)...17 2.1.1. cyklus s podmínkou na konci (s výstupní podmínkou)...18 2.1.2. cyklus s podmínkou na začátku (se vstupní podmínkou)...20 2.1.3. cyklus s řídící proměnnou...22 2.2. Korespondenční úkol č. 2...28 3. Algoritmus a program...29 3.1. Postup při tvorbě programu...29 3.2. Terminologie...30 3.3. Programovací jazyk PASCAL...31 3.3.1. Struktura programu v BORLAND PASCALU...31 3.3.2. Zdrojový text programu...32 3.3.3. Vstup hodnot do operační paměti...34 3.3.4. Výstup hodnot z operační paměti...35 4. Datové typy a jejich rozdělení...38 4.1. Číselné datové typy...40 4.1.1. Celočíselné datové typy...40 4.1.2. Datové typy pro čísla s desetinnou částí...41 5. Příkazy jazyka Borland Pascal...43 5.1. Jednoduché příkazy...44 5.1.1. Přiřazovací příkaz...44 5.1.2. Příkaz skoku...45 5.2. Strukturované příkazy...46 5.2.1. Složený příkaz...46 5.2.2. Příkaz pro rozhodování (IF)...46 5.2.3. Příkaz pro rozhodování CASE...52 5.2.4. Příkazy cyklů...56 5.2.5. Příkaz cyklu s podmínkou na konci (REPEAT UNTIL)...56 5.2.6. Příkaz cyklu se vstupní podmínkou WHILE...58 5.2.7. Příkaz cyklu s řídící proměnnou - FOR...60 5.3. Korespondeční úkol č. 3...63 Závěr...64 Literatura...64 3
Úvod Studijní text, který máte před sebou, je adresován zájemcům o studium předmětu Algoritmy a datové struktury. Cílem tohoto studijního textu je seznámit studenty s problematikou tvorby algoritmů a jejich zakreslení ve formě vývojových diagramů a naučit studenty využívat při řešení úkolů programovací jazyk Borland Pascal. Při tvorbě vývojových diagramů se naučíte rozdělit řešený problém na jednotlivé dílčí kroky, zvládnete problematiku rozhodování a opakování zvolených kroků. Po probrání tvorby vývojových diagramů následuje část programátorská, kdy budete seznámeni s programovacím jazykem Borland Pascal. Tento programovací jazyk byl zvolen proto, že je přímo pro výuku programování vytvořen. Jeho prostředí není příliš složité a je pochopitelné i pro úplné začátečníky. Programovací jazyk Borland Pascal je sestaven tak, že hlídá jednotlivé kroky programátora a usměrňuje jeho činnost, což ve svém důsledku vede k pochopení základních principů programování. Pro zvládnutí učiva tohoto studijního textu se předpokládá základní znalost prostředí programovacího jazyka Borland Pascal nebo prostředí programovacího jazyka Borland C. Věřím, že čas, který strávíte studiem, nebude pro vás ztracený, a poskytne vám dostatek informací, abyste dobře pochopili význam programování při řešení úkolů z různých oblastí. 4
1. Algoritmizace 1. část Cíl: Po nastudování této kapitoly byste měli umět: - definovat pojmy algoritmus, vývojový diagram, posloupnost a, rozhodování - použít předdefinované grafické prvky pro sestavení vývojových diagramů - zakreslit ve vývojovém diagramu posloupnost - zakreslit ve vývojovém diagramu větvení (rozhodování) - rozpoznat, kdy je třeba použít úplné větvení, neúplné větvení a vnořené větvení Klíčová slova: Algoritmus, vývojový diagram, program, posloupnost, větvení, neúplné větvení, úplné větvení, vnořené větvení. Průvodce studiem: Dá se předpokládat, že jste již pojem algoritmus slyšeli, ale neměli jste potřebu jej použít. V našem běžném životě neustále probíhají činnosti, které my nejsme zvykli pojmem algoritmus označit, ale přesto se o algoritmus jedná. V této kapitole se vám pokusím toto vysvětlit. Algoritmus postup, který určuje, co máme dělat, abychom vyřešili libovolnou úlohu. Algoritmus můžeme zapsat: a) slovně - jen jednoduché postupy, u složitějších postupů je slovní popis nepřehledný a nesrozumitelný. Příkladem algoritmů zapsaných slovně jsou kuchařské recepty. b) graficky - při tomto zápisu se používají grafické symboly, které mají předem definovaný význam. Nejrozšířenější formy grafického zápisu jsou vývojové diagramy a strukturogramy. V dalším výkladu jsou použity pouze vývojové diagramy. Algoritmy v běžném životě: S algoritmy se běžně setkáváme. Těmito algoritmy jsou například recepty na vaření, postup ovládání video kamery, postup sestavení nábytku z jednotlivých dílů, apod. V dalším výkladu se bude jednat vždy o algoritmy zaměřené na matematické výpočty. 5
Průvodce studiem: Pokud stojíte před úkolem popsat postup činnosti tak, aby uživatel dospěl k požadovanému cíli (tedy máte sestavit algoritmus), je důležité přizpůsobit algoritmus znalostem a schopnostem potenciálního uživatele. Algoritmus práce s počítačem bude jiný pro člověka, který k počítači usedá poprvé, než pro člověka, který už má určité zkušenosti. Vlastnosti algoritmů: Elementárnost - algoritmus se skládá z konečného počtu jednoduchých kroků Determinovanost v každé fázi zpracování musí být určen další postup Konečnost činnost algoritmu skončí v reálném čase Rezultativnost od libovolných vstupních dat musíme dospět k výsledkům Hromadnost algoritmus musí být použitelný pro všechny úlohy stejného typu Algoritmus zapsaný v programovacím jazyku se nazývá program. 1.1. Vývojové diagramy Slovní zápis algoritmu má jen velmi omezené možnosti použití. Aby náš algoritmus byl srozumitelný a použitelný pro širší okolí uživatelů, zapisujeme jej takřka vždy ve formě vývojových diagramů. Ke kreslení vývojových diagramů používáme standardní grafické symboly. Koncová značka Začátek Značka přiřazení A:= 0 Vstup nebo výstup dat Tiskni: z Značka rozhodování U >0 Značka podprogramu Záměna 6
Jednotlivé symboly spojujeme čárami a spojkami. Ve vývojovém diagramu dodržujeme směr shora dolů, proto není nutné svislé čáry kreslit se šipkou. Čáru zakončujeme šipkou v případě, kdy se směr mění, např. při naznačení cyklu. Spojky použijeme v případě, že vývojový diagram nevejde na jednu stránky a pokračuje na straně další. Pak je vhodné pomocí spojek označit návaznosti. Ukázka jednoduchého algoritmu: Začátek 1 spojka Z:=0 U:= 10 Z:=z+d U:= u -1 Tisk: Z Konec U = 0 1 spojka Průvodce studiem: Pojem algoritmus již znáte. Musíte se nyní tedy naučit zapsat algoritmus v přehledné a srozumitelné podobě, tedy ve formě vývojových diagramů. Ve vývojových diagramech již budeme používat zápis v souladu s programovacím jazykem, který v další etapě zajistí zpracování algoritmu. My budeme používat programovací jazyk BORLAND PASCAL. Kreslení vývojových diagramů se v současné době využívá.jen velmi málo. Je to dáno úrovní výpočetní techniky a úrovní programovacích prostředí, kdy běžně používané osobní počítače umožňují ladění programu stylem pokus omyl, tzn.např. pokud se objeví nějaký problém s počtem průchodů cyklem, nezačneme sestavovat vývojový diagram a přemýšlet nad ukončovací podmínkou cyklu, ale přímo ve zdrojovém textu vyzkoušíme změnu, která nás napadne jako první. Nějaký výsledek dostaneme, pokud to opět není správně, tak vyzkoušíme něco jiného a to děláme tak dlouho, až dojdeme k požadovanému výsledku. Vývojové diagramy zařazené v dalším textu řeší velmi jednoduché problémy a měly by vám umožnit pochopení základních programátorských struktur. 7
1.2. Sestavení algoritmu Algoritmus je sestaven na základě tří základních struktur: 1. Posloupnost (sekvence) 2. Větvení (alternativa, rozhodování) 3. Cykly (iterace, opakování) 1.3. posloupnost (sekvence) Posloupnost je řada za sebou navazujících kroků, jejichž pořadí je předem pevně dáno. Posloupnost má svůj začátek a konec. Žádný krok nemůže být vynechán. Posloupnost se v algoritmech objevuje samostatně nebo jako součást složitějších struktur (větvení, cykly). Začátek Příkaz 1.. Příkaz N Konec 8
Příklad: Popište pomocí vývojového diagramu algoritmus záměny obsahu proměnných. Pro vyřešení tohoto úkolu musíme zavést pomocnou proměnnou, do které uložíme hodnotu z proměnné A (první ze zaměňovaných hodnot). Pak můžeme hodnotu proměnné A přepsat hodnotou proměnné B. Po tomto kroku je obsah obou proměnných (A i B ) stejný, což ale nevadí. V pomocné proměnné máme uloženou původní hodnotu A, proto nyní obsah pomocné proměnné uložíme do B. Začátek Tisk: zadej číslo Čti A Tisk: zadej číslo Čti B pom := A A := B B:= pom Tisk A,B Konec 9
1.4. Větvení (alternativa, rozhodování) Větvení použijeme tam, kde podle okolností mají být některé kroky v posloupnosti vynechány, přidány nebo nahrazeny jinými. Větvení obsahuje obvykle tří části. První částí je otázka, na kterou existuje kladná nebo záporná odpověď. Druhou částí je krok, který se provede v případě kladné odpovědi na otázku. Třetí částí je krok, který se provede v případě záporné odpovědi na otázku. První část větvení (otázka) je povinná, zbylé dvě části jsou nepovinné. Pokud však současně chybí druhý i třetí krok, ztrácí větvení smysl. Průvodce textem: Prakticky neustále se rozhodujete a svou další činnost rozvíjíte podle toho, jak jste se rozhodli. Ve vývojovém diagramu máte možnost rozhodování jednoduchým způsobem zakreslit. Musíte ale vždy přesně naznačit i ty větve rozhodování, ve kterých se žádná činnost nebude provádět. Ve vývojovém diagramu se tedy může objevit úplné větvení neúplné větvení vnořené větvení a) úplné větvení (alternativa) - jsou zařazeny kroky pro kladnou i zápornou odpověď. Podle toho, jak je sestavena podmínka, budou zařazeny další činnosti. Je proto nutné nějakým způsobem označit, která větev se provádí v případě, že podmínka je pravdivá (říkáme také že podmínka platí) a která větev se provádí, když podmínka není pravdivá (neplatí). V dalším textu je vždy pravdivost podmínky označena symbolem + (plus) a nepravdivost symbolem (mínus). + - Podmínka Příkaz1 Příkaz2 10
Příklad: Popište pomocí vývojového diagramu algoritmus načtení dvou čísel a výpočtu podílu těchto dvou čísel. Pozor:!! Nelze dělit nulou!! Rozbor: A,B slouží pro uložení hodnot, P slouží pro uložení výsledku dělení. Při řešení je použito úplné větvení, tzn. provádí se činnost v kladné i záporné větvi. Začátek Tisk: zadej číslo čti: A Tisk: zadej číslo Čti: B + B<>0 - P := A / B Tisk: P Tisk: nulou nelze dělit Konec 11
b) neúplné větvení (alternativa) - chybí krok pro kladnou nebo pro zápornou odpověď (častější je situace, kdy chybí krok pro zápornou odpověď). V logickém sledu činností sice chybí krok pro zápornou odpověď, ale ve vývojovém diagramu je nutné tuto skutečnost zakreslit. + - podmínka Příkaz1 Příklad: Popište pomocí vývojového diagramu algoritmus, který v případě, že číslo A je záporné, vypočítá jeho absolutní hodnotu. Obsah proměnné A vytiskne. Rozbor: K řešení je použito neúplné větvení, tzn. činnost se provádí pouze v jedné větvi. V tomto případě v kladné větvi. Záporná větev ale musí být ve vývojovém diagramu zakreslena. Začátek Čti A + A < 0 - A := ABS(A) Tisk A Konec 12
c) Vnořené větvení (alternativa) krok pro kladnou nebo pro zápornou odpověď (nebo pro obě odpovědi) je tvořen opět větvením + Podmínka 1 - + - Podmínka 2 Příkaz3 Příkaz1 Příkaz2 Příklad: Popište pomocí vývojového diagramu algoritmus, který zjišťuje, zda číslo A je menší nebo větší nebo rovno nule. Rozbor: Při rozhodování musíme řešit tři různé situace. Pro řešení v těchto případech je vhodné použít vnořené větvení, které celý rozhodovací proces zkrátí a zjednoduší (nemusíme sestavovat třetí podmínku). K řešení je ale také možné sestavit tři neúplná větvení. 13
a) k řešení je použito vnořené větvení. Začátek Čti A + A < 0 - Tisk: A je menší než nula + - A > 0 Tisk: A je větší než nula Tisk: A je rovno nule Konec Průvodce studiem: Při tomto řešení vám stačí pouze dva rozhodovacími bloky. Testovat třetí podmínku (v našem případě by to bylo A = 0 ) není třeba, protože pokud neplatí podmínka A < 0 a neplatí podmínka A > 0, pak může nastat pouze stav A = 0. Uvedený příklad je dosti elementární (což je pro výuku nutné) a možná si teď řeknete, že je vnořené větvení zbytečné. Jeho velký přínos objevíte tehdy, když budete muset řešit nějakou situaci, která má tři varianty a jedna z těchto variant je obtížně vyjádřitelná podmínkou. Příkladem může být situace, kdy budete muset zjistit, zda znak je malé písmeno, nebo je velké písmeno nebo to vůbec není písmeno. Vyjádření podmínek pro první a druhou situaci je celkem jednoduché, složitěji se jeví třetí varianty. A tady bych doporučila vnořené větvení, které vám dá možnost třetí podmínku nesestavovat. 14
b) k řešení je použito neúplné větvení Začátek Čti A + A < 0 - Tisk:A je menší než nula + A > 0 - Tisk:A je větší než nula + A = 0 - Tisk:A je rovno nule Konec Průvodce studiem: Při tomto řešení musíte sestavit všechny tři varianty rozhodování. Při každém rozhodování chybí činnosti v záporné větvi. 15
Shrnutí: Algoritmus je postup řešení, které vede k dosažení stanoveného cíle. Algoritmy nejčastěji znázorňujeme v grafické podobě ve formě vývojových diagramů, protože tím zajistíme srozumitelnost a názornost řešení pro potenciální uživatele. Při kreslení vývojových diagramů používáme předem domluvené značky. Do algoritmu zařazujeme posloupnosti příkazů, rozhodovací bloky a bloky pro cyklické opakování některých činností ty jsou obsahem další kapitoly. Kontrolní otázky: 1) Jaké vlastnosti by měl mít algoritmus? 2) Jaká omezení vzniknou, pokud při sestavení algoritmu použijeme pouze posloupnost příkazů? 3) Kdy do algoritmu zařazujeme větvení? 4) Jaký je rozdíl mezi úplným a neúplným větvením? 5) Kdy je vhodné použít vnořené větvení? 1.5. Korespondenční úkol č.1 Zadání: Popište pomocí vývojového diagramu algoritmus, který zjišťuje, zda načtené číslo X leží uvnitř nebo mimo nebo na hranici intervalu (1,10). Rozbor: Číslo X leží uvnitř, pokud platí podmínka: (X>1) AND (X<10) Číslo X leží mimo, pokud platí podmínka: (X<1) OR (X>10) Číslo X leží na hranici, pokud platí podmínka: (X=1) OR (X=10) Řešte: b) pomocí vnořeného větvení c) pomocí neúplného větvení 16
2. Algoritmizace 2. část Cíl: Po nastudování této kapitoly byste měli umět: - využívat v algoritmech cykly - rozpoznat, kterou variantu cyklu je vhodné do algoritmu zařadit - vysvětlit rozdíl mezi rozhodováním a cykly Klíčová slova: Cyklus, iterace, podmínka na začátku, podmínka na konci, tělo cyklu, řídící proměnná. Průvodce studiem: V úvodní kapitole jste měli možnost se seznámit s problematikou tvorby vývojových diagramů. Výklad končil u možnosti zařazovat do řešení rozhodování. To by vám ale brzy přestalo stačit, protože velmi často se dostanete do situace, kdy se některé činnosti opakují v závislosti na tom, zda nastala či nenastala nějaká situace. A právě to, jak zajistit opakování některých kroků, je cílem této kapitoly. 2.1. Cykly (Iterace) V algoritmech velmi často nastává situace, kdy musíme některé činnosti zopakovat. To, zda se opakování provede či nikoliv, závisí vždy na vyhodnocení určité podmínky (otázky). Buď přesně známe, kolikrát se má činnost opakovat, pak podmínkou kontrolujeme, zda již bylo opakování provedeno v potřebném počtu. Nebo opakování závisí na vzniku určité situace, např. při výpočtu dojde k překročení nějaké extrémní hodnoty, pak podmínkou kontrolujeme vznik této situace. Existují dva základní typy cyklů, a sice cyklus, který nejdříve vykoná určité příkazy a pak teprve vyhodnocuje podmínku opakování, a pak cyklus, který nejdříve vyhodnocuje podmínku opakování a pak provádí příkazy. V dalším výkladu je zařazen ještě cyklus s řídící proměnnou, který je určitým zjednodušením cyklu s podmínkou na začátku. Tento cyklus je velkým zjednodušením práce programátora. Budeme tedy rozlišovat 3 typy cyklů (všechny uvedené cykly jsou v dalším textu podrobně vysvětleny): cyklus s podmínkou na konci (s výstupní podmínkou) cyklus s podmínkou na začátku (se vstupní podmínkou) cyklus s řídící proměnnou 17
2.1.1. cyklus s podmínkou na konci (s výstupní podmínkou) Postup provádění: Nejdříve se vykonají příkazy těla cyklu, pak se provede vyhodnocení podmínky. Má-li podmínka hodnotu FALSE (není pravdivá), provede se návrat na začátek těla cyklu, provedou se příkazy těla cyklu a opět se vyhodnotí podmínka. Tato činnost se opakuje tak dlouho, až podmínka nabude hodnotu TRUE (je pravdivá). Pak je cyklus ukončen. Průvodce studiem: Při použití tohoto cyklu si musíte zapamatovat, že se příkazy těla cyklu provedou vždy alespoň jednou. To vám může někdy způsobit problémy! Zakreslení cyklu s výstupní podmínkou (s podmínkou na konci) ve vývojovém diagramu: Tělo cyklu - podmínka + Průvodce studiem: Tady vás musím upozornit na to, že neplatí obecně pro každý programovací jazyk, že cyklus s výstupní podmínkou končí při hodnotě TRUE. Toto platí pro BORLAND PASCAL a v celém dalším textu je toto pravidlo dodrženo. Například pro programovací jazyk C platí, že cyklus končí při hodnotě FALSE. 18
Příklad: Popište pomocí vývojového diagramu algoritmus výpočtu obvodu a obsahu čtverce o straně A. Zajistěte, aby výpočet proběhl pouze tehdy, jestliže strana A bude mít velikost větší než nula (v opačném případě nemá smysl výpočet provádět). Pro řešení použijte cyklus s podmínkou na konci. Význam proměnných: A strana čtverce Obvoda obvod čtverce Plocha obsah čtverce Začátek Tisk: zadej stranu čtverce Čti: A - A > 0 + Obvod := 4 * A Plocha := A * A Tisk: Obvod Tisk: Plocha Konec Průvodce studiem: Cyklus, který je zařazen ve vývojovém diagramu, je ukázkou cyklu s výstupní podmínkou. V uvedeném příkladu se jedná o situaci, kdy nevíte, kolikrát se činnost bude opakovat. Opakování činnosti má končit při zadání hodnoty větší než nula. Tomu tedy odpovídá sestavená podmínka. Doporučila bych vám vždy při sestavování podmínky pro cyklus s výstupní podmínkou si položit otázku kdy chci, aby cyklická činnost skončila. 19
2.1.2. cyklus s podmínkou na začátku (se vstupní podmínkou) Postup provádění: Nejdříve dojde k vyhodnocení podmínky. Má-li podmínka hodnotu TRUE, provede se tělo cyklu (jeden nebo více příkazů) a pak se provede automaticky návrat k podmínce, ta se opět vyhodnotí. Pokud má podmínka opět hodnotu TRUE, celá činnost se opakuje. Cyklus je ukončen až tehdy, když podmínka nabude hodnoty FALSE. Průvodce studiem: Chci vás upozornit na to, že u tohoto cyklu se může stát, že se tělo cyklu neprovede ani jednou! To nastane v případě, že podmínka má hodnotu FALSE již při prvním vyhodnocení. Cyklus s podmínkou na začátku je nejčastěji používaný cyklus. Programátor by si vystačil jen s tímto cyklem. Zakreslení cyklu s vstupní podmínkou (s podmínkou na začátku) ve vývojovém diagramu: podmínka - + Tělo cyklu 20
Příklad: Popište pomocí vývojového diagramu algoritmus zpracování souboru čísel. Vyřešte situaci, kdy víme, že v souboru je N čísel. Zpracováním zde budeme rozumět zjištění součtu všech čísel na vstupu. Pro řešení použijte příkaz cyklu s podmínkou na začátku. Význam proměnných: N a suma p počet čísel na vstupu proměnná pro uložení čísla ze vstupu součet čísel na vstupu počítadlo Začátek suma := 0 p := 0 Zadej počet čísel Čti: N p < N - + Čti: a Tisk: suma suma :=suma + a Konec p := p + 1 21
Průvodce studiem: Při řešení úkolu jsem použila cyklus se vstupní podmínkou. Ze zadání úkolu vyplývá, že přesně víme kolikrát se musí tělo cyklu opakovat. Proto jsem podmínku opakování či ukončení cyklické činnosti sestavila v závislosti na tom, kolik hodnot se má zpracovat celkem (N) a kolik hodnot již bylo zpracováno (P). Proměnná P v algoritmu plní funkci počítadla, před zahájením cyklické činnosti má hodnotu nula a při každém průchodu se její hodnota zvyšuje o jedničku. Podmínku pak musíte sestavit tak, aby se tělo cyklu provedlo právě N-krát (jeden průchod cyklem = zpracování jednoho čísla). 2.1.3. cyklus s řídící proměnnou Cyklus s řídící proměnnou je poněkud zjednodušený cyklus se vstupní podmínkou. Lze jej použít pouze tehdy, jestliže počet opakování je dán explicitně a nezávisí na činnosti prováděné v těle cyklu. Postup provádění: Cyklus je řízen řídící proměnnou. Hodnoty řídící proměnné jsou omezeny počáteční (initial) a koncovou (final) hodnotou cyklu. Na začátku provádění cyklu se do řídící proměnné uloží počáteční hodnota. Pokud je pak hodnota řídící proměnné menší nebo rovna koncové hodnotě, provedou se tyto činnosti: vykoná se tělo cyklu pak se provede návrat na začátek cyklu pak se automaticky zvýší hodnota řídící proměnné o 1 pokud je hodnota řídící proměnné menší nebo rovna koncové hodnotě, celá činnost se opakuje cyklus končí tehdy, když řídící proměnná dosáhne hodnoty vyšší než je hodnota koncová. Průvodce studiem: V této části výkladu jsem uvedla jen ten úplně základní princip činnosti cyklu s řídící proměnnou. Organizace tohoto cyklu se může v různých programovacích jazycích lišit. V příští kapitole vám vysvětlím další podrobnosti a varianty fungování tohoto cyklu. Pro pochopení použití cyklu s řídící proměnnou je nejdůležitější skutečnost, že můžete tento cyklus zařadit pouze v případě, že znáte počet opakování požadovaných kroků. 22
Zakreslení cyklu s řídící proměnnou ve vývojovém diagramu: Rp := 1,2,, n Tělo cyklu Průvodce studiem: Podle slovního popisu i podle zakreslení ve vývojovém diagramu byste si měli všimnout, že chybí podmínka pro opakování či ukončení cyklu. Tuto podmínku skutečně nemusíte nikde psát. Podmínka je skryta v zápisu a její vyhodnocení se provádí automaticky. Podmínka má tvar: Rp < = N. Pokud je tato podmínka pravdivá, provede se tělo cyklu, pokud je nepravdivá, cyklická činnost končí. Taktéž se nemusíte starat o počítadlo, které jsme museli zavést v případě použití cyklu se vstupní podmínkou. Jako počítadlo zde funguje řídící proměnná a jak je uvedeno výše, obsah řídící proměnné se automaticky zvyšuje o jedničku při každém návratu na začátek cyklu. Příklad: Popište pomocí vývojového diagramu algoritmus zpracování souboru čísel. Vyřešte situaci, kdy víme, že v souboru je N čísel. Zpracováním zde budeme rozumět zjištění součtu všech čísel na vstupu. Pro řešení použijte příkaz cyklu s řídící proměnnou. Význam proměnných: N počet čísel na vstupu a proměnná pro uložení čísla ze vstupu suma součet čísel na vstupu I řídící proměnná cyklu 23
Vývojový diagram: Začátek suma :=0 Zadej počet čísel na vstupu Čti: N I := 1,2,, N Čti: a Tisk: suma suma :=suma + a Konec 24
Příklad: Popište pomocí vývojového diagramu algoritmus zpracování souboru čísel. Vyřešte situaci, kdy neznáme počet čísel v souboru, ale víme, že soubor je ukončen číslem 100, které ale do zpracování nesmíme zahrnout. Zpracováním zde rozumíme zjištění aritmetického průměru zadaných čísel. Takto zadaný úkol lze řešit pomocí cyklu s podmínkou na začátku i pomocí cyklu s podmínkou na konci. Nelze využít cyklus s řídící proměnnou, protože neznáme počet vstupních hodnot (počet opakování cyklu). Význam proměnných: a proměnná pro uložení čísla ze vstupu suma součet čísel na vstupu pocet počet zadaných čísel prumer..proměnná pro uložení aritmetického průměru a) použijeme cyklus s podmínkou na začátku Začátek suma := 0 pocet := 0 Čti: a a <> 100 - + Přičti k suma hodnotu v a pocet := pocet + 1 Čti: a Tisk: suma Prumer := suma / pocet Tisk: prumer Konec Takto sestaveny algoritmus zajistí, aby se mezi zpracovaná čísla nedostala ukončující hodnota ze vstupního souboru (v našem příkladě je to číslo 100). 25
b) použijeme cyklus s podmínkou na konci Začátek suma := 0 Pocet := 0 Čti: a Přičti k suma hodnotu a Pocet := pocet + 1 - a = 100 + Suma := suma - a pocet := pocet - 1 prumer := suma / pocet Tisk: prumer Konec Při tomto řešení nesmíme zapomenout na to, že ukončující hodnota se nemá zpracovávat v našem případě se přičte k sumě a také k počtu zpracovaných hodnot se přičte jednička navíc, což neodpovídá požadavku ze zadání, aby se koncová hodnota do zpracování nezahrnovala. Proto bylo třeba od konečné sumy tuto hodnotu odečíst a také snížit počet zpracovávaných hodnot o jedna. Teprve pak je možno vypočítat aritmetický průměr. Abychom se vyhnuli úpravě obsahu proměnných po skončení cyklu, je možné sestavit vývojový diagram tak, že do těla cyklu zařadíme rozhodování, zda hodnota v proměnné A, kterou máme zpracovat, je různá od koncové značky, v našem případě testujeme, zda je různá od hodnoty 100. Toto řešení je pak hodně obecné, ale dojde k prodloužení doby algoritmu, protože při každém průchodu cyklu je nutno vyřešit rozhodování. 26
b) použijeme cyklus s podmínkou na konci, ale s úpravou v příkazech těla cyklu Začátek suma := 0 pocet := 0 Čti: a - a < > 100 + Suma := suma + a pocet := pocet + 1 - a = 100 + Prumer := suma / pocet Tisk: prumer Konec 27
Shrnutí: Hlavním cílem této kapitoly je naučit se správným způsobem používat v algoritmech cykly. K dispozici máme tři typy cyklu. Každý z uvedených typů cyklu je jiný a je na vás, který zvolíte. Nejvíce obecný je cyklus s podmínkou na začátku a dá se říci, že by nám úplně stačil jen tento cyklus pro vyřešení všech cyklických situaci. Ostatní dva cykly jsou zařazeny pro zjednodušení práce programátora a nesou sebou při použití určitá omezení či rizika. Omezení se týká cyklu s řídící proměnnou, kdy musíte předem znát počet opakování. Rizika jsou spojena zase s cyklem s výstupní podmínkou, kdy může dojít ke zkreslení výsledku vlivem toho, že vždy alespoň jednou se tělo cyklu vykoná. Kontrolní otázky 1. K čemu slouží v algoritmu cyklus? 2. Jak se provádí cyklus s podmínkou na konci? 3. Jak se provádí cyklus s podmínkou na začátku? 4. Jak se provádí cyklus s řídící proměnnou? 5. Jaká omezení má cyklus s řídící proměnnou? 6. Které z cyklů je sestaven tak, že se tělo cyklu nemusí provést ani jednou? 7. Který z cyklů je sestaven tak, že se tělo cyklu provede vždy alespoň jednou? 2.2. Korespondenční úkol č. 2 Zadání: Popište pomocí vývojového diagramu algoritmus zpracování souboru čísel. Vyřešte situaci, kdy víme, že v souboru je N čísel. Zpracováním zde budeme rozumět zjištění počtu čísel větších než nula.vyřešte pomocí všech typů cyklu. Popište význam proměnných, které jsou v algoritmu použity. 28
3. Algoritmus a program Cíl: Po prostudování této kapitoly budete schopni - orientovat se v základních pojmech týkajících se zdrojového textu programu v BORLAND PASCALU - objasnit význam datových typů - vyjmenovat a charakterizovat způsoby rozdělování datových typů - vysvětlit a použít číselné datové typy - realizovat vstup a výstup z programu - Klíčová slova: Program, programovací jazyk, strojový kód, vyšší programovací jazyk, překladač, syntaxe a sémantika, proměnná, konstanta, klíčové slovo, identifikátor, komentář, řetězec, deklarační část, příkazová část. Průvodce studiem: Již v první kapitole jste se dověděli, že algoritmus zapsaný v programovacím jazyku se nazývá program. Dostáváme se tedy k problematice převedení algoritmu znázorněného ve vývojovém diagramu do podoby, které bude rozumět počítač tedy do podoby programu. Veškerý další výklad je orientován na programovací jazyk BORLAND PASCAL a je proto nutné, abyste měli tento program k dispozici. Taktéž budete potřebovat literaturu, která vám usnadní orientaci v prostředí BORLAND PASCAL. Podrobný popis tohoto programového prostředí není součástí výukového materiálu. Doporučena literatura: Kvoch Martin:Programování v TURBO PASCALU 7.0. 3.1. Postup při tvorbě programu Analýza problému co se má řešit Sestavení algoritmu posloupnost řešení Sestavení programu zápis algoritmu v syntaxi programovacího jazyka Ověření správnosti programu odstranění syntaktických a logických chyb (nejdelší fáze) První část je definice řešeného úkolu. Je třeba přesně vědět, co se má vlastně naprogramovat, co všechno má program umět. U tvorby jednoduchých programů je tato fáze velice krátká. Druhá část sestavení algoritmu se provádí při tvorbě jakéhokoli programu. U jednoduchých programů stačí mít algoritmus v hlavě, u složitějších je potřeba jej vytvořit na papír (vývojový diagram). U algoritmizace úlohy je třeba především postupovat tak, aby každý příkaz měl jednoznačný význam, 29
který počítač dovede interpretovat. Je nutné si také uvědomit, že počítač za programátora nic nedomyslí, že postupuje přesně podle našich instrukcí. Při sestavování algoritmu se musíme řídit matematickou logikou. Třetí část tvorba programového kódu. Tady záleží na tom, který programovací jazyk si programátor zvolil, a na tom, jaké zkušenosti programátor má. Je vhodné při psaní programového kódu dodržovat: programový text by měl být graficky přehledný názvy proměnných by měly vystihovat účel neměly by chybět komentáře Čtvrtá část ověření správnosti programu. Prostředí programovacích jazyků poskytuje prostředky pro splnění této fáze práce. Průvodce studiem: Pokud budete řešit jednoduchý úkol, pravděpodobně nebudete svou činnost rozdělovat do výše uvedených etap. Taktéž málokdo si opravdu sestaví na papír vývojový diagram a teprve pak začne přepisovat do zdrojového kódu programovacího jazyka. Nutnost členění postupu při tvorbě programu vyvstane v okamžiku, kdy řešený problém je rozsáhlý a složitý a zvláště pak v situacích, kdy se řešení účastní více lidí. 3.2. Terminologie Strojový kód Strojový kód je programový kód, který jediný dokáže počítač přímo zpracovávat. Strojový kód je reprezentován spoustou čísel ve dvojkové soustavě, které vyjadřují příkazy vyššího programovacího jazyka. Vyšší programovací jazyk Je to programovací jazyk, jehož příkazy jsou tvořeny pomocí klíčových slov, jejichž význam musí být převeden do strojového kódu a teprve potom může být program napsaný ve vyšším programovacím jazyce vykonán. Pascal patří mezi vyšší programovací jazyky. Překladače Převod programového textu z vyššího programovacího jazyka do strojového kódu zajišťují překladače (kompilery). Rozeznáváme 2 typy překladačů: Interpreter - překládá další příkaz vyššího programovacího jazyka teprve ve chvíli, kdy předcházející příkaz je již vykonán. Překlad programového textu do strojového kódu probíhá až do spuštění programu. Výhodou interpreteru je, že usnadňuje ladění programu, nevýhodou je, že zpomaluje běh programu. Kompilátor - přeloží celý programový text ještě před spuštěním programu. Výhodou je, že program běží rychleji, nevýhodou je, že program nelze spustit dříve, než jsou z něho odstraněny všechny syntaktické chyby. Syntaxe programovacího jazyka Jedná se o soubor pravidel pro tvorbu programu v daném programovacím jazyku. Jsou to pravidla pro zápis jednotlivých příkazů (syntaxe = gramatika). 30
Každý programovací jazyk má svá syntaktická pravidla, která jsou uvedena v elektronické nápovědě a v manuálech. Sémantika programovacího jazyka Sémantika představuje logický význam syntaktické konstrukce. Konstanta Konstanta je místo v paměti, které má své jméno (identifikátor konstanty). Konstanta je datový objekt, kterému je na začátku běhu programu přiřazena hodnota a po celou dobu běhu programu se tato hodnota nemění. Proměnná Proměnná je místo v paměti, které má své jméno (identifikátor proměnné). Pomocí tohoto jména s proměnnou pracujeme. Proměnná je datový objekt, jehož hodnota se v průběhu výpočtu může měnit. 3.3. Programovací jazyk PASCAL Historie jazyka Pascal: Autorem jazyka Pascal je význačný odborník v oblasti výpočetní techniky profesor Niclaus Wirth, který jej navrhl v 70. Letech hlavně z důvodů zkvalitnění výuky svých studentů. V krátké době se jazyk stal nejen hojně používaným pro výuku programování, ale rovněž v profesionální práci. Dnes ustupuje Pascal v profesionální sféře před dokonalejšími jazyky jako je např. C/C++. K nejznámějším kompilátorům jazyka Pascal patří TURBO PASCAL a BORLAND PASCAL americké firmy Borland International pro platformu PC kompatibilních s PC IBM. 3.3.1. Struktura programu v BORLAND PASCALU PROGRAM název programu; USES název knihovny; programů (UNIT) Hlavička programu Připojení knihoven TYPE - úsek deklarace datových typů LABEL - úsek deklarace návěští; CONST - úsek deklarace konstant; VAR - úsek deklarace proměnných; Deklarační část PROCEDURE - úsek deklarace procedur; FUNCTION - úsek deklarace funkcí; BEGIN. příkazy. END. Příkazová část 31
Hlavička programu Obsahuje slovo PROGRAM a programátorem zvolený název. Hlavička programu není povinná. Část pro připojení knihoven Slouží k připojení standardních a vlastních knihoven (UNIT) k programu. Tato část programu není povinná. Pokud ale potřebujeme některé knihovny připojit, musíme tak učinit ihned za hlavičkou programu (neboli-li před deklarační části). Musíme napsat slovo USES a název knihovny, např.: USES CRT; připojení standardní knihovny podprogramů pro práci s obrazovkou Deklarační část programu Tato část slouží k definování všech identifikátorů, které budeme používat v příkazové části programu. Pořadí úseků deklarační části je libovolné a každý úsek se může vyskytnout vícekrát nebo nemusí být uveden vůbec. Příkazová část programu Tato část je povinná. Musí začínat klíčovým slovem BEGIN a končit klíčovým slovem END. Za END musí být tečka. Mezi BEGIN.. END je uveden jeden nebo více příkazů ukončených středníkem. Průvodce studiem: Uvedená struktura programu se vám určitě v tomto okamžiku zdá hodně složitá a obsáhlá. Zařadila jsem zde úplně vše, co program může obsahovat. V ukázkových programech se budou objevovat vždy pouze ty úseky, které jsou nutné. Teprve po prostudování celého studijního textu budete znát a umět využít všechny zde uvedené úseky. 3.3.2. Zdrojový text programu Při psaní zdrojového textu můžeme použít : písmena: A, B,.., Z, a, b,.., z číslice 0.. 9 speciální symboly: + - * /., : ; = < > ( ) { } [ ] # $ @ ^ dvojice: := <> <= >=.. (* *)!!! Překladač nerozlišuje malá a velká písmena, kromě použití v řetězcích!!! 32
Ve zdrojovém textu rozlišujeme: a) Klíčová slova - jsou to slova, která mají v programovacím jazyku předem určený význam a nemohou být použita pro jiné účely(např. názvy proměnných, podprogramů ) b) Identifikátory jsou to názvy programu, proměnných, konstant, datových typů, návěští, procedur a funkcí. Při vytváření identifikátoru musíme dodržet tato pravidla: Lze použít písmena, číslice a spodní podtržítko. Není zde rozdíl mezi malými a velkými písmeny. Na prvním místě nesmí být číslice. Délka je libovolná, ale rozlišuje se pouze prvních 63 znaků. c) Celá čísla - celé číslo lze zapsat v desítkové nebo šestnáctkové soustavě. Zápis čísla v desítkové soustavě: číslice 0..9 a znaménko + nebo - Zápis čísla v hexadecimální soustavě: 0.. 9, A.. F a znak $. Např.: $F = 15 d) Desetinná čísla (reálná) pro zápis můžeme použít: 0.. 9, +, - desetinnou tečku písmeno E nebo e Např.: 310 = 3.1E+2 6700.0 = 6.7E+3 e) Řetězce Řetězec je posloupnost znaků, která je na obou stranách ohraničena apostrofy. V řetězci se rozlišují malá a velká písmena. f) Komentáře Komentář je jakýkoliv text uzavřený mezi symboly (* *) nebo { }. To, co uvedeme jako komentář, nemá vliv na chod programu. Komentář slouží ke zvýšení srozumitelnosti programu. Maximální délka programové řádky ve zdrojovém textu je 126 znaků! 33
3.3.3. Vstup hodnot do operační paměti Průvodce studiem: Nyní již víte, jaká je struktura programu, ale neznáte ještě příkazy, které byste použili. Vzhledem k tomu, že skoro každý váš program bude očekávat od uživatele vstupní data a uživatel zase bude očekávat nějaké výsledky (výstupy), jsou hned v úvodu zařazeny a vysvětleny činnosti, které vám tyto vstupy a výstupy umožní zrealizovat. a) Vstup dat z klávesnice do programu: READLN(položka_1, položka_2,, položka_n); READ(položka_1, položka_2,, položka_n); Položkou může být pouze název proměnné!!! Příkaz provede uložení hodnoty zadané na klávesnice do proměnné uvedené v kulatých závorkách. Jedním příkazem lze načíst více hodnot (podle počtu proměnných). Zadávání hodnot z klávesnice musí být ukončeno klávesou ENTER. Při zadávání slouží jako oddělovač jednotlivých hodnot mezera, tabelátor nebo ENTER. Rozdíl mezi READLN a READ : READLN čte hodnotu i ukončující ENTER READ nepřečte ukončující ENTER a hodnota této klávesy zůstává ve vyrovnávací paměti Průvodce studiem: Rozdíl mezi příkazy Read a Readln nabývá na významu při práci s řetězci a pak při čtení ze souboru. Při práci s číselnými hodnotami není rozdíl významný. Doporučuji zařazovat příkaz ve tvaru READLN. Využít také můžete příkaz READLN bez kulatých závorek, pouze ukončený středníkem. Tento příkaz čeká, že zmáčknete klávesu ENTER. Používám ho v ukázkových programech a jeho význam spočívá v tom, že výstup na obrazovku zůstává viditelný tak dlouho, dokud nezmáčknete klávesu ENTER. Teprve pak dojde k návratu do prostředí Borland Pascalu. 34
3.3.4. Výstup hodnot z operační paměti Průvodce studiem: Vstupní data, mezivýsledky a konečné výsledky máte po celou dobu běhu programu uloženy v operační paměti. Po skončení programu ztrácíte možnost se k těmto datům zpět vrátit. Proto je pro vás velmi důležité si výsledné hodnoty zobrazit na obrazovce nebo je vytisknout na tiskárně nebo uložit do souboru dat mimo operační paměť. V dalším textu jsou výsledky vždy zobrazovány na obrazovku, další uvedené možnosti nejsou obsahem tohoto výukového materiálu. Pro zobrazení dat uložených v operační paměti slouží v Borland Pascalu tyto dva příkazy: WRITELN(položka_1, položka_2,, položka_n); WRITE(položka_1, položka_2,, položka_n); Položkou může být: celé nebo reálné číslo znak (např. A ) textový řetězec (např. Ahoj ) booleovská hodnota (např. TRUE) název konstanty název proměnné volání funkce Položky se vytisknou (zobrazí na obrazovce) v tom pořadí, jak jsou uvedeny v kulatých závorkách. Rozdíl mezi WRITELN a WRITE: WRITELN po vypsání poslední položky se kurzor přesune na další řádek WRITE po vypsání poslední položky zůstává kurzor na tomtéž řádku, tedy za poslední vypsanou položkou výstupu WRITELN; takto zadaný příkaz provede pouze přechod na nový řádek! Využíváme jej pro vkládání prázdných řádků. 35
Formátování výstupu na obrazovku: a) Procedura WRITELN (WRITE) nevkládá mezi položky mezery. Pokud je požadujeme, musíme je vložit sami (mezi apostrofy): WRITELN(položka,, položka,,, položka); Příklad: a := 1; b := 2; c := 3; jmeno := Pavel ; V programu: na obrazovce(znak _ znázorňuje mezeru): WRITELN(a,b,c); 123 WRITELN(a,,b,,c); 1_2_3 WRITELN( AHOJ,jmeno); AHOJPavel WRITELN( AHOJ,,jmeno,. ); AHOJ Pavel. b) Můžeme také zadat šířku pole, ve kterém se provede výstup položky: WRITELN(položka:šířka, ); Příklad.: a := 10; b := 2; c := 100; V programu: Na obrazovce(znak _ znázorňuje mezeru): WRITELN(a,b,c); 102100 WRITELN(a:2,b:2,c:2); 10_2100 WRITELN(a:3,b:3,c:3); _10 2100 WRITELN(a:2,b:3,c:4); 10 2_100 Pokud je šířka větší, jsou položky zleva doplněny mezerami, tedy jsou zarovnány vpravo. Pokud je šířka menší, pak si PASCAL rozšíří pole na potřebnou velikost. V podstatě slouží tento formát k zarovnání výstupních hodnot na pravý okraj! c) Pouze pro desetinná čísla lze použít kromě šířky výstupního pole zadat také počet desetinných míst: WRITELN(položka:šířka:desetinná místa, ); Přidání hodnoty desetinná místa způsobí výstup reálného čísla ve tvaru s pevnou desetinnou tečkou a zároveň určuje počet číslic, která se za desetinnou tečkou zobrazí. 36
Příklad: X := 421.53; V programu: na obrazovce(znak _ znázorňuje mezeru): WRITELN(X); 4.21153000000E+02 WRITELN(X:8); 4.21E+02 WRITELN(X:6:2); 421.53 WRITELN(X:8:2); 421.53 WRITELN(X:8:4); 421.5300 Do šířky se započítává jedno místo pro desetinnou tečku. Kontrolní otázky: 1. Jaký je postup při tvorbě programu? 2. Co je to syntaxe a sémantika programovacího jazyka? 3. Jaký je rozdíl mezi strojovým kódem a vyšším programovacím jazykem? 4. Co je to proměnná a co je konstanta 5. Ze kterých částí se skládá program v Borland Pascalu a k jakému účelu slouží jednotlivé částí? 6. Co to je identifikátor a jaká pravidla platí pro jeho sestavení? 7. Co to jsou klíčová slova? 8. K čemu slouží komentář ve zdrojovém textu programu? 9. Jak zajistíme vstup hodnot do programů? 10. Jak zajistíme výstup hodnot z programů na obrazovku? 11. Co to je formátování výstupu? Shrnutí: Tato kapitola vám dala úvodní informaci o tom, jak je třeba postupovat v etapě, kdy již máte sestavený vývojový diagram a potřebujete vámi sestaveny algoritmus vyřešit za pomocí výpočetní techniky. V celém studijním materiálu se využívá pro tuto činnost programovací jazyk Borland Pascal. Proto jsem vám zde přiblížila, jak je třeba postupovat při psaní zdrojového textu programu, co je dovoleno a co ne. Program má předepsanou strukturu. Obsahuje hlavičku, deklarační část a příkazovou část. Hlavička programu není povinná, ale je vhodné ji zavést, protože v hlavičce se uvádí jméno programu, a to vede k lepší orientaci. Deklarační část slouží k deklaraci objektů, které pak použijeme v příkazové části. V deklarační části stačí zařazovat pouze ty úseky, které jsou nutné, ostatní lze vynechat. V příkazové části uvádíme příkazy, pomocí kterých řešíme vlastní algoritmus úlohy. Příkazová část je povinná. Pro zadání vstupních hodnot do programu slouží příkazy Read areadln. Pro získání výstupních hodnot pak příkazy Write a Writeln. 37
4. Datové typy a jejich rozdělení Cíl: Záměrem této kapitoly je, abyste po jejím prostudování byli schopni: - vysvětlit význam datových typů v prostředí Borland Pascalu - vyjmenovat datové typy - rozdělit datové typy z různých hledisek - použít v programech celočíselné datové typy - použít v programech datové typy pro desetinná čísla Klíčová slova. Datový typ, množina hodnot, množina operací, jednoduché datové typy, strukturované datové typy, standardní datové typy, číselné datové typy, aritmetické operace, relační operace. Vzhledem k tomu, že pro výuku byl zvolen programovací jazyk Borland Pascal, je nutné věnovat dostatečnou pozornost tomu, jak tento jazyk přistupuje k práci s daty. Jazyk BORLAND PASCAL vyžaduje, aby každá proměnná, kterou chceme v programu použít, měla stanoveno jméno a datový typ. Datový typem jednoznačně určujeme, zda do proměnné budeme ukládat celé číslo, desetinné číslo, znak, skupinu znaků nebo logickou hodnotu. Za tímto účelem byla v programu zavedena deklarační část a byla zavedena určitá klíčová slova, která umožňují jednoznačně datový typ proměnné určit. Průvodce studiem: Tady vás chci upozornit na to, že programovací jazyk Borland Pascal je velmi citlivý na stanovení datového typu proměnných. V dalším výkladu se vždy dovíte, co pro vás jako programátora znamená zvolený datový typ proměnné. Pečlivé dodržování stanovených pravidel vám ušetří mnoho času při odstraňování chyb v programu. Obecně platí: Datový typ jednoznačně určuje dvě charakteristiky proměnné: množinu hodnot, kterých může proměnná nabývat během programu (velikost paměťového místa, v němž budou uloženy hodnoty) množinu operací, které lze s touto proměnnou provádět. A tyto dvě informace také budou vždy přesně uvedeny u každého datové typu 38
Množina všech datových typů v Borland Pascalu: Borland Pascal obsahuje tuto množinu datových typů, kterou pak dělíme podle různých hledisek: - celočíselné - reálné - znakové (CHAR) - logické (BOOLEAN) - řetězec (STRING) - pole - výčtový typ - interval - záznam - množina - soubor - ukazatel Rozdělení datových typů podle vnitřní struktury: a) jednoduché typy nemají vnitřní strukturu. S proměnnými jednoduchých datových typů pracujeme vždy jen jako s celkem b) Strukturované typy hodnoty těchto typů mají vnitřní strukturu (členění na komponenty). S proměnnými strukturovaných typů lze pracovat buď jako s celkem nebo s jejími jednotlivými komponentami. Jednoduché datové typy: - celočíselné - reálné - znakové (CHAR) - logické (BOOLEAN) Strukturované datové typy - řetězec (STRING) - pole - záznam - množina - interval - výčtový typ - soubor Rozdělení datových typů podle způsobu definice: a) standardní datové typy jsou předem přesně definovány b) definované uživatelem uživatel sám definuje některé vlastnosti datového typu 39
Standardní typy - celočíselné - reálné - znakové (CHAR) - řetězec (STRING) - logické (BOOLEAN) Definované uživatelem - výčtový typ - typ interval - pole - záznam - množina - soubor - ukazatel Průvodce studiem: Vidíte, že dělení datových typů je různé. Možná se vám to nyní zdá úplně zbytečné. Mělo by vám to ale hned v úvodu posloužit k lepší orientaci v této problematice. Teprve až se postupně seznámíte v praxi s jednotlivými datovými typy, bude se vám toto dělení zdát naprosto přirozené. 4.1. Číselné datové typy V BORLAND PASCALU musíme rozlišovat mezi číslem celým a číslem s desetinnou částí. 4.1.1. Celočíselné datové typy Překladač Borland Pascalu rozlišuje 5 datových typů pro celá čísla. Typ Množina hodnot (rozsah) Velikost paměti v bytech BYTE 0.. 255 1 SHORTINT -128.. 127 1 WORD 0.. 65 535 2 INTEGER -32 768.. 32 767 2 LONGINT -2 147 483 648.. 2 147 483 647 4 Průvodce studiem: Ti z vás, kteří pozorně studovali předchozí text, tak určitě pochopili, že výše uvedená tabulka nám sděluje jaké jsou dovolené hodnoty pro jednotlivé celočíselné datové typy, což je jedna z charakteristik proměnné. Druhá charakteristika proměnné dovolené operace je popsána v následujícím odstavci. 40
Dovolené operace s proměnnými celočíselných typů: a) aritmetické: +, -, *, DIV, MOD, / + sčítání - odčítání * násobení DIV celočíselné dělení MOD zbytek po celočíselném dělení / přesné dělení Použití operace dělení pomocí operátoru / je dovoleno pro celočíselné proměnné, ale výsledek tohoto dělení je reálné číslo (číslo s desetinnou částí). Výsledkem ostatních operací bude celočíselná hodnota. b) relační : = rovná se <> nerovná se > větší než >= větší nebo rovno < menší než <= menší nebo rovno Výsledkem těchto operací je logická hodnota TRUE nebo FALSE. Předdefinované celočíselné konstanty - není třeba je zavádět v deklarační části programu. MAXINT - obsahuje největší dovolenou hodnotu, kterou lze uložit do proměnné typu INTEGER, což je 32 767. MAXLONGINT - obsahuje největší dovolenou hodnotu, kterou lze uložit do proměnné typu LONGINT, což je 2 147 483 647. Je výhodné znát, že existují tzv. předdefinované konstanty. Tyto konstanty pak můžete použít, aniž byste je museli uvádět v deklarační část programu a pak také máte jistotu, že mají vždy stejnou hodnotu. V dalším textu jsou občas použity. 4.1.2. Datové typy pro čísla s desetinnou částí Průvodce studiem: Čísla s desetinnou částí jsou často v dalším textu nazývána reálná čísla. Je to v programátorské terminologii běžné, proto vás na to upozorňuji již zde v úvodních informacích. Taktéž vás chci upozornit na to, že i když do proměnné, kterou definujete jako reálnou, uložíte číslo celé (bez zadání desetinné části), je přesto toto číslo považováno za reálné a některé operace s ním tudíž nejsou dovoleny (např. celočíselné dělení). 41
V BORLAND PASCALU je předdefinováno 5 datových typů pro reálná čísla: TYP Množina hodnot (rozsah) Velikost paměti v bytech REAL 2.9 * 10-39.. 1.7 * 10 38 6 SINGLE 1.5 * 10-45.. 3.4 * 10 38 4 DOUBLE 5.0 * 10-324.. 1.7 * 10 308 8 EXTENDED 3.4 * 10-4932.. 1.1 * 10 4932 10 COMP -2 63 + 1.. 2 63-1 8 Nejpoužívanější je datový typ REAL. Tento datový typ má přesnost 11 až 12 platných číslic. Dovolené operace s proměnnými reálného datového typu: a) aritmetické: + sčítání - odčítání * násobení / dělení Nelze použít operace DIV a MOD!!! b) relační : = rovná se <> nerovná se > větší než >= větší nebo rovno < menší než <= menší nebo rovno Výsledkem těchto operací je logická hodnota TRUE nebo FALSE. Předdefinované reálné konstanty - není třeba je zavádět v deklarační části programu. PI Ludolfovo číslo, které má hodnotu 3,14 Průvodce studiem: Načtení nebo přiřazení celočíselné hodnoty do proměnné reálného typu nezpůsobí chybu. Dojde k automatické konverzi (převodu) celého čísla na číslo s desetinnou částí. Obráceně to neplatí! Nelze tedy do proměnné celočíselného typu načíst nebo přiřadit číslo s desetinnou částí. Taktéž je dobré si uvědomit, že pokud je proměnná deklarována jako proměnná reálného typu, nelze s ní provést operace DIV a MOD, i když byste do ní uložili číslo celé. Již při uložení dojde ke konverzi celého čísla na číslo s desetinnou částí. 42
Kontrolní otázky: 1. K čemu slouží datové typy? 2. Jak se dělí datové typy z hlediska jejich definice? 3. Kolik datových typů máme pro celá čísla? 4. Které operace jsou dovoleny pro celočíselné proměnné? 5. Kolik datových typů máme pro reálná čísla? 6. Které operace jsou dovoleny pro reálné proměnné? 7. Které znáte předdefinované celočíselné konstanty? 8. Které znáte předdefinované reálné konstanty? Shrnutí: Ukládání dat do operační paměti, které je nutnou součástí programování, řeší programovací jazyk Borland Pascal prostřednictvím tzv. datových typů. Jsou stanovena klíčová slova, která přesně definují, zda budeme pracovat s číslem, znakem, řetězcem znaků či s logickou hodnotou. V této kapitole je uveden stručný přehled všech datových typů v Borland Pascalu, podrobněji jsou vysvětleny celočíselné datové typy a datové typy desetinných čísel. Ostatní možnosti ukládání dat nejsou předmětem tohoto studijního materiálu. 5. Příkazy jazyka Borland Pascal Cíl: Záměrem této kapitoly je, abyste po jejím prostudování byli schopni: - rozdělit příkazy jazyka Borland Pascal podle vnitřní struktury - prakticky použít přiřazovací příkaz - vysvětlit pojem kompatibilita vzhledem k přiřazení - vysvětlit pojem složený příkaz - zapsat příkazy pro rozhodování v syntaxi Borland Pascalu a prakticky je využít - zapsat příkazy pro cyklickou činnost v syntaxi Borland Pascalu a prakticky je využít Klíčová slova: Příkaz, jednoduchý příkaz, přiřazovací příkaz, kompatibilita, strukturovaný příkaz, složený příkaz, příkaz větvení, IF, CASE, selektor větvení, příkaz cyklu, WHILE, REPEAT, FOR, řídící proměnná. 43
Průvodce studiem: Pokud jste dostatečně pečlivě prostudovali kapitolu o vývojových diagramech, budete mít nyní občas dojem, že se některé informace opakují. Je to způsobeno tím, že nyní se budete učit, jak k řešení již sestaveného algoritmu ve formě vývojového diagramu využít programovací jazyk. Zatímco jste při tvorbě vývojového diagramu měli určitou volnost, při přepisu do programovacího jazyka musíte nutně dodržet předem daná pravidla, neboli syntaxi programovacího jazyka. Proto se zde opět objevují vývojové diagramy, ale jsou již nyní vždy doplněny ukázkou, jak je nutné provést zápis ve zdrojovém kódu programovacího jazyka. Co chápeme pod pojmem příkaz: Obecně pod pojmem příkaz rozumíme pokyn k provedení nějaké činnosti. V běžném životě mohou být příkazy nejrůznějších druhů, např. prostuduj si tuto knihu, napiš svou adresu, když nemáš peníze, nechoď do kina, atd. Příkazy pro počítač však musí mít předepsaný tvar a smysl. V dalším textu jsou postupně probrány příkazy jazyka Borland Pascal. Příkazy dělíme na: a) jednoduché přiřazovací příkaz příkaz skoku příkaz volání procedury b) strukturované složený příkaz podmíněné příkazy příkazy cyklu 5.1. Jednoduché příkazy 5.1.1. Přiřazovací příkaz Přiřazovací příkaz přiřazuje hodnotu výrazu na pravé straně do proměnné uvedené na levé straně přiřazovacího příkazu!! Obecný tvar příkazu: P := v; název proměnné - konstanta (číslo, znak, řetězec znaků) - výsledek volání funkce (např. SQR(x)) - název proměnné - výraz (libovolný výpočet, např. x:=z+1) 44