+ All Categories
Home > Documents > „Základy programování v Pascalu“ (učební...

„Základy programování v Pascalu“ (učební...

Date post: 21-Dec-2020
Category:
Upload: others
View: 6 times
Download: 0 times
Share this document with a friend
62
SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy programování v Pascalu“ (učební pomůcka) Vypracoval: Skalka František Brno 2006
Transcript
Page 1: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00

„Základy programování v Pascalu“ (učební pomůcka)

Vypracoval: Skalka František Brno 2006

Page 2: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Obsah Úvod …………………………………………..…………………. 3 Algoritmizace a vývojové diagramy ……………………………… 4 Značky vývojových diagramů ….…………..……………………. 5 Programové výrazy …….………………………………………… 8 Pascal ……………………………..……………………………… 10 Proměnné a přiřazení hodnoty ……………………..…………….. 11 Vstupní a výstupní hodnoty ………………………………………. 13 Konstrukce programu ……………………………….…………… 16 Prostředí jazyka……………………………………..……………. 18 Číselné datové typy …………………………………..…………… 20 Podmínění příkaz …………………………………………………. 26 Náhodný výběr ……………………………… ………..…………. 32 Nový řádek u vstupu a výstupu ………………………………….. 33 Příkazy cyklů …………………………………………..………… 34 Datový typ char ……………………………… ………..………… 42 Mnohonásobné větvení ………………………… …………..…… 44 Datový typ string ………………………………………………… 48 Převod mezi typem znakovým a celočíselným ………..…………. 52 Jednotky ……….………………………………………………….. 53 Jednotka CRT ………………………………………………….… 53 Literatura ……………………… ……………………………….... 62

Page 3: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Úvod

Na SŠ informatiky a spojů, Čichnova 23 v Brně, má Pascal

dlouholetou tradici a osnovy jej zařazují mezi povinné učivo předmětu informační a komunikační technologie. Potíž je v tom, že neexistuje pro střední školy oficiální učebnice tohoto vyššího programovacího jazyka. Z tohoto důvodu má tato učební pomůcka zaplnit vzniklou mezeru, a usnadnit tak nelehkou cestu žákům, kteří mají zájem se naučit programovat.

Programovací jazyk Pascal je vnímán širokou veřejností jako nástroj

pro tvorbu jednoduchých a přehledných programů. Vznikl počátkem sedmdesátých let 20. století jako jazyk pro výuku programování. Navrhl jej profesor Niklaus Wirthem na Eidgenössische Hochschule ve švýcarském Zürichu. Tvůrce měl za cíl vytvořit vhodný jazyk pro systematickou výuku programování. Časem se plně osvědčil, a proto i dnes na většině středních a vysokých škol patří mezi programovací jazyky, na kterých se studenti učí základům programování, a osvojují si tak dovednost logicky myslet.

Oddíly v této učební pomůcce jsou řazeny tak, jak se praktikují ve

výuce a jak se osvědčily praxí. První část je věnována algoritmům a vývojovým diagramům. V druhé části se studenti seznámí se základními pojmy. Třetí část se pak dotýká prostředí Pascalu. Čtvrtá, předposlední část, je věnována podmínkám a cyklům, tedy samotným složeným příkazům. Poslední pátý oddíl nás seznamuje s textovým prostředím jednotky CRT.

U všech kapitol, jak jdou po sobě, by měl student najít dostatek

informací k tomu, aby danou úlohu pochopil a uměl ji aplikovat v příkladech na procvičení. Příručka obsahuje hlavní programátorské činnosti, které slouží k základům u všech programovacích jazyků. Pokud dojde k jejich osvojení během úvodního studia programování, již pro studenta nebude obtížné přejít na jiný programovací jazyk, který se v současné době využívá k programováni.

Page 4: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Algoritmizace a vývojové diagramy

S algoritmy se setkáváme v běžném životě. Je to řada nejrůznějších činností, které mohou být jednoduché - čištění zubů, cesta do školy, nebo složité - různé chemické reakce či řízení kosmické lodi. Většinu činností můžeme rozdělit na řadu po sobě jdoucích úkonů, které na sebe navazují. Pro uskutečnění takových činností pak můžeme sestavit návody. A algoritmus představuje právě takový přesný návod, jakým je kupříkladu recept na vaření, instrukce na sestrojení papírového draka nebo operace pro zastavení jedoucího vozidla. Díky těmto pracovním postupům pak můžeme řešit libovolné druhy úloh. Ukázka algoritmu vaření čaje po jednotlivých krocích:

1) vezmeme konvici a napustíme ji vodou 2) zapneme sporák a postavíme na něj konvici 3) zatím co se voda ohřívá, připravíme si šálek 4) do šálku vložíme sáček čaje 5) zalijeme čaj vřící vodou

Každý algoritmus by měl mít tyto vlastnosti:

1) Postupnost - jednotlivé kroky jdou v určitém pořadí, v jakém budou

vykonávány. Měla by být dána přesná posloupnost, aby bylo jasné, jak jdou za sebou, a který z nich je poslední.

2) Obecnost - algoritmus by měl řešit libovolnou úlohu a ne konkrétní příklad. Neměl by zpracovávat zadání c = 2 + 2, ale měl by řešit zadání obecně c = a + b, tedy realizovat řešení celé skupiny podobných úkolů.

3) Výslednost - algoritmus vede po určitém počtu kroků vždy k výsledku a nesmí být nekonečný.

Pro snadnější práci s algoritmy byl vyvinut symbolický algoritmický

jazyk, který využívá názorné zobrazení pomocí dohodnutých obrazců, které představují jednotlivé kroky algoritmu. Tento jazyk se definuje jako vývojový diagram. Je normalizován českou státní normou ČSN ISO 5807, která je platná od 1. ledna 1996. Norma specifikuje značky používané ve vývojových diagramech pro grafické znázornění posloupnosti operací, které řeší určitý problém.

Page 5: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Značky vývojových diagramů

Značka Význam značky

zpracování

Vykoná jakoukoli operaci, jejímž výsledkem je přeměna údajů, např. změna hodnoty, tvaru, pozice či umístěni.

rozhodování

Provede akci, ve které dojde k větvení vývojového diagramu. Na základě podmínky uvnitř symbolu bude stanoven způsob dalšího postupu programu.

příprava

Umožní nastavit počáteční činnost, dle které se mění vlastní postup následných činností, např. proměnná cyklu.

vstup a výstup

Vstup dodává data pro zpracování do programu, zatímco výstup reprezentuje zobrazení konečných hodnot.

spojka

Představuje přechod z jedné části diagramu na jinou, tedy přerušení a následné pokračování na jiném místě.

Page 6: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

mezní značka

Označuje místo začátku a konce vývojového diagramu.

poznámka

Slouží pro popis komentářů nebo vysvětlujících textů.

spojnice

Představují svislé nebo vodorovné čáry sloužící ke spojení jednotlivých symbolů mezi sebou a dále vyznačující směr toku informace.

Předností vývojových diagramů je jejich názornost. Uvádím přepis

zapsání vývojového diagramu pomocí vývojových značek pro výpočet obsahu a obvodu obdélníku, který je zakreslen obecně pomocí českých příkazů.

hodnoty a i b jsou velikosti stran obdélníku

start

obsah =a*b

piš obsah (a,b)

konec

čti a, b

obvod =2*(a+b)

piš obvod

Page 7: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Další příklady na procvičení: 1) Převeďte zadaný čas v minutách na hodiny a minuty

a zakreslete řešení do vývojového diagramu. 2) Nastiňte vývojovým diagramem výpočet splnění normy automobilky v

procentech, jestliže víte počet prodaných vozů a počet vozů, kolik se

automobilka zavázala vyrobit. 3) Sestavte vývojový diagram pro výpočet průměru známek na

vysvědčení. I když pro zadání použijete všechny známky (např. 7), do

průměru se nezapočítává známka z chování. 4) Navrhněte algoritmus pro výpočet roků, měsíců, týdnů, dnů, hodin,

minut a vteřin, k aktuálnímu letopočtu, například od tvého narození. 5) Zakreslete pomocí vývojového diagramu kalkulačku, která po zadání

dvou čísel tyto hodnoty sečte, odečte, vynásobí a podělí. 6) Vymyslete postup pomocí algoritmu, který bude řešit výpočet mzdy za

den, jestliže budeme zadávat příchod a odchod do zaměstnání a dále

sazbu na hodinu. Daň činí 19% . 7) Pomocí vývojového diagramu proveďte příklad, který zobrazí panu

řediteli, kolik má v celé škole žáků a kolik je průměrně žáků v jedné třídě. Víte, že škola má pět tříd, a počet žáků v každém ročníku se

snižuje o dva žáky. V poslední třídě pak zadejte počet chlapců i dívek .

8) Proveďte pomocí vývojového diagramu kalkulaci celkové sumy peněz

na účtu, jestliže zadáte (například 5) výčet všech výplat a též po zadání

úročení vkladu (například 2%). 9) Navrhněte algoritmus pro příklad výpočtu vzdálenosti mezi body.

Rychlovlak jedoucí rychlostí 70 m/s vyjede z bodu A. Za jak dlouho dorazí do bodu B, když víte, že bod B leží 50 kilometrů od bodu A.

10) Pomocí vývojového diagramu vyřešte výpočet pohybu cyklisty

v metrech za vteřinu, když víte, že za 20 minut ujel vzdálenost dvanáct

kilometrů?

Page 8: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Programové výrazy

Program umožňuje přepis algoritmu do řeči počítače, tedy do programovacího jazyka. Příkazy, které jsou postupně vykonávány, jsou

buď ve strojovém kódu, který počítač může ihned začít vykonávat, nebo se

nachází v tzv. zdrojovém tvaru, který musí být nejdříve převeden

překladačem do binárního tvaru pro procesor. Tyto pojmy se vážou

k programování a znamenají: Strojový kód – představuje zápis čísel ve dvojkové soustavě, kterými je

naplněna paměť typu RAM, a které je procesor schopen začít zpracovávat.

Tato kombinace jedniček a nul reprezentuje příkazy vyššího

programovacího jazyka. Vyšší programovací jazyk – je tvořen příkazy, jež umožňují účinněji

využít možnosti procesoru i paměti počítače a snadněji vyjádřit kroky algoritmu. Příkazy jsou reprezentovány

klíčovými slovy, která jsou pro programátora přijatelnější než strojový

kód. Aby bylo možné program spustit, musí být nejprve převeden do

strojového kódu. Vyššími programovacími jazyky jsou např.: Fortran,

Basic, Pascal, C, atd. Klíčová slova – jsou formována daným programovacím jazykem a mají přesně stanovený význam v podobě příkazů, které nelze žádným způsobem měnit. Vyznačují jednotlivé konstrukce jazyka a tvoří určité

celky. Zdrojový text – je část obsahu programu, který vyjadřuje vlastní popis

algoritmu a představuje jeho řešení. Využívá k tomu vlastní příkazy

daného programovacího jazyka a k převodu zdrojového textu i všech ostatních částí programu do strojového kódu používá překladače:

a) interpret – překládá příkazy po jednotlivých krocích, jakmile

je vykonán předcházející příkaz, spouští se další, který se

opět okamžitě začne vykonávat. Tyto překladače jsou ihned

spustitelné, ale pomalé. b) kompilátor – překládá celý program najednou

a teprve poté vykonává příkazy. Tyto překladače nespustí

program, pokud obsahuje chyby a je-li je příliš rozsáhlý.

Page 9: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Nevýhodou je, že překlad trvá delší dobu, avšak po kompilaci program běží velmi rychle.

Při přepisu algoritmu do programu je velmi důležité dodržovat jisté

definice daného programovacího jazyka. Těmito definicemi jsou syntax a

sémantika.

Syntax – udává pravidla pro korektní formu zápisu programovacího jazyka. Při psaní příkazu musíme tedy dodržovat přesně dané normy, které

jsou předepsané jazykem. Pravidla jsou uvedena v nápovědě programovacího jazyka a znalost těchto pravidel je nutná pro základní

tvorbu programu. Sémantika – přiřazuje význam jednotlivým syntaktickým pravidlům.

Syntakticky správně zapsané příkazy, pokud nejsou vhodně sémanticky

uspořádané, nevytvoří funkční program.

Page 10: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Pascal

Po vytvoření vývojového diagramu je nutné vložit algoritmus do

počítače. K tomuto účelu slouží program. Program umožňuje přepis

algoritmu do řeči počítače, a to pomocí programovacího jazyka. Tomuto

jazyku již počítač rozumí a je schopen začít vykonávat jeho jednotlivé

kroky. Našim cílem je sestavovat algoritmy jako programy. Proto musíme pracovat tak, jak nám to dovoluje používaný programovací jazyk. Převod

algoritmu do programovacího jazyka je závislý na tom, který programovací jazyk si zvolíme. S tím souvisí i dodržování zásady

konstrukce daného jazyka.

A jaký jazyk by to měl být? Každý programovací jazyk má své

výhody a nevýhody, a tudíž nelze říci, že jeden je lepší než druhý. A

protože Pascal patří do větve univerzálních programovacích jazyků a plně

se osvědčil v průběhu své dlouhé historie, měl by se vyučovat jako první

programovací jazyk. Je to z toho důvodu, že Pascal je víceméně

didaktický, protože jednoduchým způsobem docílíte dobrých výsledků a

navíc je přehledný. Dále obsahuje málo prvků, avšak využívá veškeré

konstrukce uplatnitelné i v jiných jazycích. Oproti současným jazykům

nevyžaduje komfortní počítače a nový operační systém. Verze programovacího jazyka Pascal: 1) Pascal - vyšší programovací jazyk, který je spustitelný na libovolném

počítači, jestliže daný počítač obsahuje překladač. 2) Turbo Pascal - je překladač, editor a nástroj pro ladění programů

jazyka Pascal určený pro počítače PC vybavené operačním systém MS

DOS. Jeho jednotlivé vývojové verze jsou číslovány např. TP 7.0. 3) Borland Pascal - je překladač, editor a ladící systém jazyka Pascal

určený pro počítače vybavené operačním systém MS Windows. 4) Free Pascal Compiler – volně šiřitelný překladač pro všechny OS

navazující na Pascal. Vznikl v době, kdy firma Borland oznámila, že

končí s programem Turbo Pascal. Jeho součástí je i vlastní editor. 5) Borland Delphi – vývojové prostředí, jenž vychází z jazyka Pascal a

umožňuje jeho používání v prostředí Windows. První verze vyšla v

roce 1994 a na trh ji uvedla firma Borland. Dnes patří k

nejpoužívanějším programovacím prostředkům s objektově orientovaným přístupem.

Page 11: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Proměnné a přiřazení hodnoty

Prvotním nástrojem pro práci s daty je proměnná. Většina programů

se bez proměnné neobejde. Proměnná je objekt, který má pevně stanovené

označení a nese určitou hodnotu. Tato hodnota se může v průběhu programu měnit. Pro označení proměnných se v Pascalu používají jména složená z písmen a číslic, první však musí být písmeno. Proměnnou znázorňujeme ve tvaru:

Takto zapsané proměnné ale ještě nejsou vymezeny, protože jim není

přiřazena žádná hodnota. Hodnotou proměnné může být číslo celé

r1:=10 , číslo neceločíselné radius:=2,7 nebo text. Přiřazení

hodnoty k proměnné se děje dle přiřazovacího příkazu: kdy název proměnné označuje jméno, které má být u dané proměnné

použito výraz zastupuje objekt pro získání hodnoty := představuje přiřazovací znaménko.

Výrazy na pravé straně přiřazovacího příkazu zapisujeme obdobným

způsobem, jak je zvykem v matematice sum:=(25+38)*3 , znamená přiřaď k proměnné sum hodnotu výrazu 25 + 38 a to celé násob 3.

Výrazy mohou obsahovat nejen hodnoty, ale i proměnné

sum:=(a+b)*(a - b) . Jestliže dosadíme do proměnné a hodnotu čtyři a do proměnné b hodnotu tři a:=4 a b:=3, poté po vykonání příkazu

bude proměnná sum obsahovat hodnotu 7. Přiřazovací příkaz r1:=z způsobí, že po jeho provedení budou mít

obě proměnné stejnou hodnotu, neboť proměnná r1 získává hodnotu z proměnné z .

Ve výrazu na pravé straně přiřazovacího příkazu může být i proměnná, která je na levé straně příkazu poc:=poc+1 . Potom proměnná na levé straně nabývá hodnotu o jednu vyšší než proměnná na

pravé straně. Příklady na procvičení:

r1 radius

název proměnné := výraz

Page 12: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

1) Vypište pomocí vývojového diagramu hodnotu o jednu vyšší, než byla

při přiřazení. 2) Proveďte algoritmus přiřazení k proměnné c proměnnou v . Proměnná

c má být desetkrát větší než proměnná v . Pro vyřešení použijte další proměnnou p, jako konstantu pro hodnotu 10 .

3) Zapište do vývojového diagramu přiřazovací příkaz pro záměnu

hodnot u proměnné a a b, kdy a:=10 a b:=15 . Po provedení budou mít obě proměnné opačné hodnoty. Pro vyřešení postupu použijte další

pomocnou proměnnou (lze řešit i bez pomocné proměnné). 4) Vytvořte algoritmus, který po přiřazení roku narození přiřadí jiné

proměnné, kolik je dotyčnému let. 6) Znázorněte pomocí vývojového diagramu přesun hodnot

v následujících proměnných a, b a c , kdy a:=10, b:=20, c:=30 . Po provedení změny bude proměnná a mít hodnotu proměnné b, b proměnné c a proměnná c nabude hodnotu proměnné a.

7) Vytvořte algoritmus, který přiřadí výsledné proměnné vysl , jaká je

vzdálenost mezi hodnotami na číselné ose, jestliže přiřazujeme

k proměnným a i b libovolnou hodnotu. 8) Vypočítejte a znázorněte pomocí vývojového diagramu objem

kulového zásobníku, jehož průměr je zadán v metrech. Na základě přiřazení vypište, na jak dlouho vydrží voda pro jednoho člověka, když

víte, že za den spotřebuje 5 litrů vody. 8) Sestavte algoritmus součtu, jehož úkolem bude přiřadit výsledné

proměnné sumu všech živočichů v teráriu. Pro řešení použijte počet

zadaných končetin pavouků, brouků a hlemýžďů. Víte, že pavouci mají

osm, brouci šest a hlemýždi jednu končetinu. 9) Navrhněte algoritmus pro výpočet rychlosti běhu geparda

v kilometrech za hodinu, když víte, že běží tři a půlkrát rychleji než

člověk. Atlet uběhne deset metrů za vteřinu, kolik uběhne gepard

kilometrů za hodinu?

Page 13: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Vstupní a výstupní hodnoty

Pro práci s počítačem slouží data, která uživatel předává počítači.

Program tato data odebírá a ukládá je do proměnných. V programování existují dva způsoby, jak může proměnná nabývat novou hodnotu: a) přiřazovacím příkazem

b) načtením vstupu

Protože přiřazovací příkaz byl probrán výše, bude nás nyní zajímat získání hodnoty načtením. K tomuto účelu slouží příkazy vstupu, které získáme ze vstupního zařízení, zpravidla z klávesnice. Tento proces

obstarává jednoduchý příkaz vstupu: kdy proměnná představuje název proměnné, do které se má načíst

hodnota.

Tento příkaz vstupu způsobí, že se k proměnné uvedené v závorce za příkazem read načte hodnota, kterou zadáme z klávesnice.

Pokud však potřebujeme načíst více hodnot z klávesnice více

proměnným, současně použijeme: kdy

seznam proměnných označuje jednotlivé proměnné, do kterých chceme uložit hodnotu, a které jsou od sebe

odděleny čárkou, např.: read (x,y,z) představuje příkaz vstupu s proměnnými x, y,

z, kterým chceme zadat následující hodnoty x=10, y=3 a z=432 , potom z klávesnice zadáváme hodnoty v přesně daném pořadí 10↵,3 ↵,432 ↵ se stiskem klávesy Enter.

read ( proměnná )

read ( seznam proměnných )

Page 14: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Pro vypsání hodnoty na obrazovku, která je uložena v proměnné,

slouží příkaz výstupu, který má tvar: kdy parametr představuje buď proměnnou, jejíž hodnotu chceme

zobrazit, nebo textový řetězec zapsaných mezi

apostrofy (apostrof zapisujeme pomocí ASCII kódu Alt+39), např.: write(’zadej hodnotu’).

Pro zobrazení více informací použijeme následující definici:

kdy platí: seznam parametrů zastupuje více proměnných oddělených

čárkami, textový řetězec s proměnnou nebo

výsledek operace s textovým řetězcem či

proměnnou. Pro zadání kombinace

parametrů textového řetězce s proměnnou

platí následující pravidla zápisu apostrofů a čárek, např.: write ’Výsledek je

’,vysl, ’ �C.’ , znamená, že

Výsledek je představuje textový řetězec, vysl zastupuje proměnnou, do

které byla přiřazena hodnota 19 a �C. je opět posloupnost znaků, tedy jakýkoliv text

ohraničený apostrofy. Na zobrazovací

jednotce bude poté vypsáno Výsledek je

19 �C. Pro vypsání výsledku operace s textem nemusíme výsledek přiřazovat, ale

stačí jej zadat v patřičném tvaru, např.: write ’Soucet se rovná ’,a+b. Zobrazení na výstupní obrazovce poté bude ve tvaru Soucet se rovná 20, (jestliže např. a=5 a b=15 ).

write ( parametr )

write ( seznam parametrů )

Page 15: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Po porozumění proměnné a vstupně výstupních příkazů by již

studenti měli další vývojové diagramy vypracovávat stejným způsobem,

který se využívá při psaní zdrojového textu, a to z toho důvodu, aby si osvojili správný zápis při psaní zdrojového textu. Jako vzorová ukázka s načrtnutým postupem řešení může sloužit následující zadání. Vypište na

obrazovku pomocí vývojového diagramu malou násobilku od jedné do pěti. Jako násobitele však můžete zadat jakékoli číslo od jedné do deseti.

write (‘1*a=‘,b)

write (‘2*a=‘,b)

b:=1*a

b:=2*a

read( a)

start

write( ‘zadej nasobitele‘)

1

write (‘4*a=‘,b)

write (‘5*a=‘,b)

b:=5*a

write( ‘3*a=‘,b)

1

konec

b:=4*a

b:=3*a

Page 16: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Konstrukce programu

Jazyk Pascal patří mezi jazyky s blokovou stavbou programu. Základem této konstrukce je blok.

Program v Pascalu je tedy tvořen touto konstrukcí: hlavička vyjadřuje pojmenování programu a tvoří první řádek. Začíná

klíčovým slovem program, za kterým je námi volené pojmenování. Pokud chceme užít víceslovné pojmenování programu, musíme slova psát bez

mezer, nebo oddělovat jednotlivá slova spodní pomlčkou. Hlavička je

nepovinný údaj. deklarace (prohlášeni) formuluje seznam objektů, které se mohou

v samotném zdrojovém textu vyskytovat a definují jejich význam. Těmito

objekty mohou být proměnné, konstanty, knihovny, procedury atd.

Překladač tuto část využívá pro zablokování určitého místa v paměti

počítače. příkazová část představuje samotný zdrojový text pro řešení

algoritmu. Je uzavřena mezi klíčovými slovy begin (začátek) a end

(konec) a obsahuje jednotlivé příkazy programu. Použití konstrukce programu v jazyce Pascal – ukázkový program:

begin end.

hlavička programu

úsek deklarací

příkazová část

BL OK

program vypocet _obsahu _obdelniku; var a,b,obsah:integer; begin write(’Zadej stranu a obdelniku ’); read(a); write(’Zadej stranu b obdelniku ’); read(b); obsah:=a*b; write(’Obdelnik ma obsah ’,obsah) end.

Page 17: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Forma zápisu a úprava programu: ♦ za jednotlivými příkazy píšeme středník ♦ Pascal nerozlišuje velká a malá písmena ♦ program končí klíčovým slovem end s tečkou, vše, co je za ním, je

ignorováno ♦ za klíčovým slovem begin se nedělá středník ♦ před jakýmkoliv příkazem end nemusí být středník ♦ každý příkaz by měl stát na samostatném řádku ♦ příkazy odsazujeme pro přehlednost tabulátorem ♦ dvojice příkazů patřících k sobě píšeme pod sebe, např.: begin a end

Důležitou součástí programu je též poznámka neboli komentář:

komentář slouží k objasnění některých objektů a k vysvětlení složitějších konstrukcí programu. Jedná se o text, který překladač vynechává, a který používá programátor ke svému zpracování algoritmu. Je uložen

buďto do složených závorek {…} nebo se vkládá do závorek

s hvězdičkou (*…*). Práce s programem nekončí správným přepisem algoritmu do

korektně strukturovaného zdrojového textu bez syntaktických chyb.

Program je důležité spustit a vyzkoušet. K tomuto účelu nám slouží řada

klávesových zkratek, které nám urychlují práci v prostředí Pascalu. Úvodem pouze dvě podstatné klávesové zkratky pro úplný začátek

v programování:

Na závěr této kapitoly si studenti vytvoří a vyzkouší svůj vlastní program:

1) program ahoj; begin write(’Ahoj, svete.’) end.

2) program opis; var i:integer; begin write(’Zadej hodnotu ’); read(i); write(’Zadna hodnota je ’,i) end.

Ctrl+F9 spuštění programu Alt+F5 přepnutí obrazovky do výstupního zobrazení

k náhledu výsledku a návrat zpět Ctrl+Break přerušení spuštěného programu

Page 18: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Prostředí jazyka

Pascal nabízí příjemné programátorské prostředí poskytující

kompletní balík služeb. Kromě samotného překladače obsahuje editor pro

tvorbu zdrojového textu, kvalitní prostředky pro ladění programu,

podrobnou nápovědu, řadu demonstračních příkladů atd.

Hlavní část spuštěné aplikace vyplňuje editační okno, ve kterém

vytváříme samotný program. Tato pracovní plocha se stává výchozím

bodem tvorby programu. Nastavení této plochy se provádí jako všechna ostatní nastavení z menu, nebo můžeme použít tzv. klávesové zkratky.

V hlavním menu nalezneme všechny funkce, které program nabízí. Lze jej ovládat stiskem klávesy F10 nebo myší. Jednotlivé položky

umožňují řadu funkcí, z nichž jsou níže uvedené pro základní práci podstatné:

File – slouží pro práci se soubory a obsahuje následující podpoložky: a) new otevře prázdné editační okno bez jména b) open zobrazí seznam vytvořených souborů c) save as uloží rozepsaný program, nutno použít

jen jména o osmi znacích, koncovka bude doplněna automaticky

d) change dir změní adresář pro ukládání Edit – poskytuje funkce pro práci s textem:

a) undo vrátí akci o krok zpět b) copy zkopíruje text c) paste vloží vyjmutý text

Run – obsahuje povely pro spuštění a ladění programu: a) run spustí program

b) trace into provádí program řádek po řádku, tzv.

krokuje (důležité při hledání chyb)

Page 19: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Debug – nastavuje ladící prostředky: a) breakpoints bod zastavení programu (Ctrl+F8),

někdy jej studenti omylem stisknou místo spuštění a objeví se jim červený

pruh v místě, kde byl umístěn kurzor, lze

odstranit opětovným stiskem (Ctrl+F8) b) watch nové okno, ve kterém si můžete

prohlédnout použité proměnné a při

krokování sledovat změnu jejich hodnoty c) output další okno sloužící k prohlédnutí

výstupní obrazovky při spuštěném

zdrojovém kódu d) add watch přidání proměnné do okna watch Options – konfigurace Pascalu a) directories exe & tpu, cesta pro uložení

samospustitelného souboru b) unit directories slouží k nastavení cesty ke knihovnám

(units) c) environment editor/syntax - highlight, zvýraznění

klíčových slov Help – nápověda a) contents přehled zákl. kapitol systému nápovědy b) index heslovitě abecedně seřazená klíčová

slova s možností detailů Nejdůležitější klávesové zkratky:

Ctrl+F9 spuštění napsaného

programu Shift+Ins vložení textu

Alt+F5 zobrazení výsledku programu na výstupní obrazovce

Alt+x vypnutí programu

Ctrl+F1 nápověda ke kurzorem označenému klíčovému

slovu F2

uloží rozepsaný program

Ctrl+Del smazání části textu F3 zobrazení seznamu vytvořených souborů

Ctrl+Ins zkopírování textu F5 zvětšení okna, například při

nápovědě

Ctrl+Break způsobí přerušení spuštěného programu F6

přepínání mezi otevřenými

okny

Page 20: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Číselné datové typy

V kapitole o proměnných je uvedeno, že proměnná může nabývat

hodnot celočíselných, neceločíselných nebo textových. Aby překladač

mohl s takto nastavenou proměnnou pracovat, musí ji mít zavedenou

v deklarační části programu. Protože rozsah typu nemůže nabývat

libovolné hodnoty a nemůže být ani nekonečný, definuje se velikostí

minimální a maximální hodnoty. Nestačí uvést tedy pouze jméno

proměnné, ale proměnnou musíme označit určitým datovým typem. Tento

typ přesně stanovuje, jakých hodnot může proměnná v průběhu programu

nabývat. Máme čtyři základní typy: a) integer ( celá čísla) b) real (desetinná čísla) c) char (znaky) d) boolean (logická hodnota)

Datový typ se zavádí v deklarační části za klíčovým slovem var

(variable – proměnná) v následujícím tvaru:

kdy seznam proměnných jména proměnných oddělená čárkou : oddělovací značka datový typ určuje, jakého typu budou proměnné

nabývat Pokud potřebujeme zavést více různých datových typu,

zapisujeme je strukturovaně pod sebou např.:

Správné určení typu je základem řádného chodu programu. Pokud dejme tomu nastavíme nevhodný typ pro dělení, což bývá u začínajících

programátorů základní chyba, program vypíše chybové hlášení type mismatch a nedojde ke spuštění programu. Chyba nastane z důvodu nekompatibility typu proměnné a typu prováděné operace, neboť u celých

var seznam proměnných:datový typ

var c1,c2,suma:integer prumer:real

Page 21: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

čísel nemůžeme při dělení očekávat vždy výsledek celočíselný. Proto si

jednotlivé typy rozdělíme a objasníme si možné operace. První skupinu tvoří typy celočíselné. Pascal nabízí pět

předdefinovaných datových typů pro práci s celými čísly. Velikost typu je

vždy omezena číselným rozsahem daného datového typu. Pokud dojde k

překročení mezních hodnot tohoto rozsahu, program buď vypíše chybové

hlášení, nebo hodnotu neodpovídající výsledku operace. To může být

způsobeno tím, Pascal pokračuje s výpočtem od opačné mezní hodnoty. Celočíselné typy jsou zastoupeny představiteli:

datový typ rozsah Integer -32768…32767 ShortInt -128…127 LongInt -2147483648…2147483647 Byte 0…255 Word 0…65535

Pro množinu celých čísel nabízí Pascal tyto možné operace :

a) aritmetické (součet, součin, rozdíl) b) relační (rovná se, je větší, atd.)

Aritmetické operace celočíselných typů umožňují:

operace operátor sčítání + odčítání - násobení *

celočíselné dělení div zbytek po celočíselném dělení mod

Operátor celočíselného dělení je reprezentován příkazem div

(divided – dělit), před a za kterým se umísťují mezery. Operace:

určuje celou část podílu před desetinnou čárkou, např.:

7 div 4 = 1 4 div 7 = 0 7 div 3 = 2 7 div 0 = chyba 19 div 6 = 3 0 div 8 = 0

a div b

Page 22: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Operátor zbytku po celočíselném dělení je reprezentován příkazem

mod (modulo – modulace), před a za kterým se opět umísťují mezery.

Operace:

vrací zbytek po dělení dvou celočíselných hodnot, přičemž znaménko je

shodné s první zadanou hodnotou, např.: - 7 mod 4 = -3 7 mod 3 = 1 4 mod 7 = 4 19 mod 6 = 1

Relační operace celočíselných typů umožňují:

operace operátor rovná se =

nerovná se <> je větší >

je menší < je větší nebo rovno >=

je menší nebo rovno <=

Pořadí prováděných operací je stejné jako v matematice a pokud není závorkami dáno jinak, provádějí se operace v tomto pořadí: *, /, div, mod,

+, -, operace se stejnou prioritou se provádějí zleva doprava. Příklady na procvičení: 1) Rozdělte pomocí celočíselného dělení hodnotu od 0 do 99 na jednotky

a desítky, např.: číslo 49 má 9 jednotek a 4 desítky 2) Proveďte totéž s trojmístným číslem od 0 do 999 3) Navrhněte program na rozměnění papírových bankovek. Po vložení

určité sumy bankovek od 50 Kč do 500 Kč, vám program vydá

patřičný obnos v kovových mincích v hodnotách 1 Kč, 2 Kč, 5 Kč, 10 Kč a 20 Kč.

4) Převeďte číslo z desítkové soustavy do soustavy dvojkové.

a mod b

7 mod 4 = 3 kdy vycházíme z výpočtu

7 : 4 = 1, jeden krát čtyři jsou čtyři a kolik je sedm a tři

Page 23: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Druhou skupinu tvoří představitelé typů pro práci s desetinnými čísly.

Pascal zde nabízí opět pět předdefinovaných datových typů s různým

rozsahem a přesností:

datový typ rozsah Real 2,9*10-39…1,7*1038 Single 1,5*10-45…3,4*1038 Double 5,0*10-324…1,7*10308 Extended 3,4*10-4932…1,1*104932 Comp -263+1…263-1

Zápis reálného čísla má tvar: mantisa * 10 exponent. Mantisa je celé

číslo nebo číslo v desetinném tvaru, exponent je celé číslo udávající pohyb

desetinné čárky. Pokud přiřadíme do proměnné a:=2.4 , program nám vypíše tuto hodnotu ve tvaru 2.4000000000E+00 . To znamená, že

mantisa rovná se 2.4 , dále je uveden určitý počet nul dle typu a poté

následuje exponent, který nám říká, kam máme posunout desetinnou tečku

(čárka má jinou funkci) při čtení tohoto čísla. Samozřejmě je tento tvar

velmi nepohodlný, a proto Pascal nabízí jeho zkrácení. Při výpisu čísla

v reálném tvaru se za proměnnou do závorek uvede dvakrát dvojtečka

s hodnotou. První hodnota udává odsazení od posledního znaku na řádku, druhá hodnota počet desetinných míst, např.: write (’Vysledek je’,a:5:2) , jestliže a:=2.4 , vypíše se Vysledek je 2.40. První dvojtečku s hodnotou lze uplatnit i u celočíselných typů na odsazení výsledku, např.: write (’Obsah obdelniku je’,a:3) , při hodnotě a:=24 .

Pro množinu reálných čísel nabízí Pascal tyto možné operace :

a) aritmetické (součet, součin, rozdíl, podíl) b) relační (rovná se, je větší atd.), shodné jako u

celočíselného typu Aritmetické operace neceločíselných typů umožňují:

operace operátor sčítání + odčítání - násobení * dělení /

Page 24: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Jak bylo uvedeno výše, typickou chybou začátečníků je chybné

přiřazení typu dané operaci. Typy se mezi sebou totiž nemůžou libovolně

míchat. Lze převádět hodnoty typu celočíselného na neceločíselný, nikoli

však v obráceném směru, to vede k vypsání hlášení o chybě.

Můžeme tedy zapsat:

Převod hodnoty typu neceločíselné na celočíselnou nelze provést automaticky, nemůžeme tedy zapsat:

Pokud bychom chtěli přiřazovat neceločíselnou hodnotu k proměnné celočíselné, potom nám Pascal nabízí příkaz trunc a round. Trunc převede hodnotu reálného typu na celočíselnou tak, že odstraní desetinnou část, round zaokrouhlí reálné číslo na nejbližší celé číslo, tedy od 0,51 nahoru, např.:

dostaneme po převedení tohoto typu výsledek y=3, z=2 .

Na závěr kapitoly o datovém typu se lze zmínit ještě o práci

s konstantou, která má v průběhu celého programu neměnnou hodnotu. Vedle použití proměnných, které se načítají z klávesnice nebo se získávají

přiřazovacím příkazem, a jejichž hodnoty se mohou v průběhu programu libovolně měnit, je hodnota konstanty v průběhu programu stále stejná

var x:real; y:integer; x:=y; x:=2; x:=4+1.2;

var x:real; y:integer; y:=x; y:=2,7; y:=4+1.2;

var x:real; y,z:integer; x:=2,7; y:=round(x); z:=trunc(x);

Page 25: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

const min=10; max=50; pí=3.14;

a neměnná, a proto k této hodnotě nelze ani přiřazovat ani ji měnit

načtením. Konstanty se přiřazují v deklarační části za klíčovým slovem

const (konstanta), jež je umístěno nad deklarací proměnných. Za const se zapíše jméno veličiny či veličin, rovnítko a hodnota se středníkem. Se

zřetelem na čísla uvedená za názvem veličiny se již nezapisuje datový typ,

neboť kompilátor sám rozpozná dle hodnoty, jakého typu stálá veličina je.

Konstanty uvedené v deklarační části se zapisují pod tímto tvarem:

kdy

název veličiny pojmenování stálé hodnoty = oddělovací značka konstanta hodnota bez datového typu ukončená středníkem Pokud potřebujeme zavést více konstant, zapisujeme je pod sebe

a oddělujeme středníkem takto:

Jména konstant již nemohou být použita jako názvy dalších proměnných. Využití konkrétní hodnoty v programu nabízí usnadnění při použití jedné hodnoty v programu vícekrát a dále konstanty zvyšují přehlednost zdrojového kódu. Význam tedy nabývají v rozsáhlejších programech.

Použití stálé veličiny si můžeme uvést na úloze s rozdělením čísla od 0 do 99 na jednotky a desítky, jež je uvedena výše.

const s=10; var

k,l,v:integer; begin

write(’Zadej hodnotu ’); read(k);

v:=k div s; l:=k mod s;

write(’desitek je ’,v,’ jednotek je ’,l ) end.

const název veličiny=konstanta;

Page 26: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Podmíněný příkaz

Abychom nepoužívali jen aritmetické operace, nabízí nám

programovací jazyky možnost větvení programu s využitím relačních

operací. K tomuto účelu slouží podmíněný příkaz, tj. podmínka, jež

představuje činnost, která umožňuje postupovat v programu podmíněným

směrem. Jestliže například budeme potřebovat, aby se program rozhodl

mezi volbou a>b vypiš pravda nebo obráceně nepravda, můžeme použít

podmínku if. Existují dva druhy zápisu podmínky if: a) neúplný b) úplný

Neúplná podmínka má následující syntaktickou podobu:

k vysvětlení můžeme použít český opis: kdy

if klíčové slovo podmínka je libovolná hodnota nebo výraz, který může

nabývat hodnotu pravda nebo nepravda then klíčové slovo příkaz libovolný příkaz nebo jiná operace

Neúplná podmínka, jak ji

zobrazuje vývojová značka s větvením

při splnění (+) či nesplnění (-) výrazu.

U neúplné podmínky je potřeba si

uvědomit,že pokud podmínka neplatí,

program ji ignoruje a podmínku vůbec

nevykoná!

Jako ukázkový příklad si uvedeme úlohu, kdy se program musí rozhodnout mezi volbou nižší a vyšší hodnoty uvedené v úvodu o podmínce. Uživatel zadá do proměnné a a b libovolné hodnoty omezené typem. Úkolem algoritmu je rozpoznat, která z těchto proměnných má nižší hodnotu a vypsat ji na obrazovku. K řešení úlohy využijeme podmínku if a to hned dvakrát. Poprvé, když budeme zjišťovat,

if podmínka then příkaz

jestliže platí podmínka, pak proveď příkaz

příkaz

Page 27: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

zda není větší proměnná a a podruhé, když budeme zjišťovat, zda není

větší proměnná b. Samotný zápis algoritmu podmínky pak může mít tuto podobu:

Pokud potřebujeme zadat ne jeden, ale dva a více příkazů

náležejících k podmínce, je nutné, abychom příkazy uzavřeli do klíčových

slov begin a end se středníkem, např.:

Jednotlivé příkazy mezi begin a end je nutné ukončovat středníky.

Složitější výrazy lze porovnávat s použitím logických operací. Ty

zahrnují logickou negaci, která se v Pascalu označuje klíčovým slovem

not, dále logický součin, jenž se označuje and, logický součet, kterému

Pascal vymezuje klíčové slovo or, a nakonec logická operace výlučného součtu, kterému je vyhrazeno klíčové slovo xor. Při porovnávání

logických výrazů je nutné jednotlivé dílčí výrazy uzavírat do kulatých

závorek, aby nedocházelo při vyhodnocování k běhové chybě, např.: (a>0) and (a<6) . Tato ukázka znázorňuje proměnnou a, která by měla nabývat hodnotu od jedné do pěti. Nevyhoví-li proměnná a podmínce, bude programem podmínka ignorována. Pokud bychom použili

v příkladu logický součet, tedy (a>0) or (a<5) , pak proměnná a může nabývat libovolné hodnoty omezené pouze typem. Pokud použijeme

logickou operaci výlučného součtu např.: (a<=b) xor (a>=b) , pak je podmínka pravdivá pouze tehdy, když si proměnné nejsou rovny.

Klíčové slovo logické negace se umísťuje hned za vyhrazené slovo if

např.: if not a>0 , což znamená, že podmínka platí, jestliže proměnná

a bude menší než jedna. Výrazy v podmínce, které jsou spojené operátory,

můžeme různě kombinovat. Důležité je uvědomit si, že nejdříve se testují

if podmínka then begin příkaz 1; příkaz 2; . . příkaz n end;

writeln(’zadej prvni hodnotu: ’); readln(a); writeln(’zadej druhou hodnotu: ’); readln(b);

if a>b then (’druha hodnota ’,b,’je mensí’); if a<b then (’první hodnot ’,a,’je mensí’);

Page 28: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

výrazy s operátorem not, poté s operátorem and a nakonec výrazy spojené s operátory or a xor. Jestliže algoritmus vyžaduje použití více podmínek

v programu, můžeme postup řešení zkrátit tím, že upřednostníme

vnořenou podmínku, tj. podmínku v podmínce, např.: vyberte ze tří

proměnných nejmenší zadanou. Příklady na procvičení: 1) Vypište, zda zadané číslo je kladné či záporné. Poté zkuste totéž, ale

přidejte, je-li navíc i nulové. 2) Zadejte dvě čísla, která program na výstupu seřadí vzestupně. 3) Sestrojte program, který bude simulovat semafor, barvy nahraďte čísly

(1- červená, 2 - oranžová, 3 - zelená) a po jejich vložení vypište, jak se má auto na křižovatce chovat.

5) Zjistěte, zda čísla zadaná na vstupu jsou dělitelná třemi a zároveň pěti. 6) Ze zadaných tří hodnot vypište maximální. Poté zkuste totéž s pěti

proměnnými. 7) Po vložení čtyř proměnných, které zastupují známky ve škole,

spočítejte jejich průměr a vypište, zda se jedná o vyznamenání, o prospěl či neprospěl.

8) Vytvořte program, který určí, zda je číslo sudé nebo liché. 9) Zhotovte program, který po zadání roku, měsíce a dne narození vypíše,

kolik je dotyčnému let a zda má dnes narozeniny.

10) Navrhněte program, který z data narození zjistí, zda již máte volební

právo.

if i<j then if i<k then min:=i; if j<i then if j<k then min:=j; if k<i then if k<j then min:=k;

Page 29: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Úplná podmínka má následující syntaktickou podobu: k vysvětlení můžeme použít český opis: kdy

if klíčové slovo podmínka je libovolná hodnota nebo výraz, který může

nabývat hodnotu pravda nebo nepravda then klíčové slovo příkaz1 libovolný příkaz nebo jiná operace, který se

provede, jestliže podmínka bude platit else klíčové slovo příkaz2 libovolný příkaz nebo jiná operace, který se

provede, jestliže podmínka nebude platit

Zde u úplné podmínky již platí, že program podmínku vykoná, i když podmínka neplatí, neboť za klíčovým slovem else zadáváme, co se

má stát, pokud podmínka splněna není. I zde můžeme zadat více příkazů jak v první části podmínky, tak

v druhé. Opět k tomu použijeme ohraničení begin a end.

if podmínka then příkaz 1 else příkaz 2

jestliže podmínka platí, pak proveď tento příkaz, jestliže podmínka neplatí, proveď následující příkaz

if podmínka then begin příkaz 1; příkaz 2; . . příkaz n end else begin příkaz 1; příkaz 2; . . příkaz n end;

Page 30: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Pozor, před ani za else se nedělá středník. V prvním případě

kompilátor zobrazí chybu, v druhém se provedou obě podmínky dohromady.

Úplná podmínka, kterou zobrazuje vývojová značka rozhodování (se splněním ’+’ nebo nesplněním ’ -’ ). Na rozdíl od neúplné podmínky, kde při nesplnění předpokladu dojde v programu k přeskoční podmínky, se zde u úplné podmínky při nesplnění předpokladu vykoná příkaz 2, při splnění předpokladu vykoná příkaz 1.

Řada příkladů, které byly uvedeny u neúplné podmínky, jenž se řeší zdlouhavějším způsobem, lze vyřešit přes úplnou podmínku jednodušeji tím, že za vyhrazeným slovem else uvedeme příkaz, pro který jsme u neúplné podmínky museli vymýšlet podmínku novou. Dejme tomu úkol s vypsáním kladného a záporného čísla. U neúplné podmínky je nutné uvést podmínky dvě ve tvaru:

if a>=0 then write (’hodnota je kladna’); if a<0 then write (’hodnota je zaporna’);

zatím co u úplné podmínky nám stačí zadat:

if a>=0 then write(’hodnota je kladna’) else write(’hodnota je zaporna’);

a tím se nám program zjednodušuje a urychluje. Příklady na procvičení: 1) Sestrojte program na výpočet hmotnosti, který na základě indexu

(výška/váha) určí, zda osoba má nadváhu, váhu optimální či podváhu. Hodnoty indexu pro nadváhu jsou pod 1,8, pro optimální váhu od 1,8 do 2,4 a pro podváhu nad 2,4.

příkaz 2

příkaz 1

Page 31: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

2) Sestavte program, který zjistí, zda zadané číslo je v intervalu <0,50>. 3) Vytvoř program na zobrazení absolutní hodnoty čísla. 4) Navrhněte program na sečtení dvou libovolných hodnot ze tří, které načítáme na vstupu. Hodnoty těchto dvou sečtených proměnných však musí být v intervalu <0,5>. Pokud nebudou alespoň dvě z proměnných do tohoto intervalu náležet, program vypíše, že hodnoty jsou mimo rozsah.

5) Zhotovte program na sečtení dvou libovolných hodnot ze tří, které načítáme na vstupu. Hodnoty těchto dvou sečtených proměnných však musí být v intervalu <0,5>. Pokud nebudou alespoň dvě z proměnných do tohoto intervalu náležet, program se ukončí. Pokud hodnoty budou v rozsahu všechny tři, sečtou se ty nižší.

6) Vytvořte program na výpočet cen jízdného taxi, když víte že cena jízdného za jeden kilometr činí:

do 19,9km ………. 27 Kč/km od 20 do 49,9 ……. 25 Kč/km od 50 do 99,9 ……. 23 Kč/km nad 100 ………….. 20 Kč/km

6) Vyřešte výpočet celkové tělesné hmotnosti BMI pro člověka.

K sestavení výpočtu zadejte výšku v metrech a váhu v kilogramech a dosaďte je do vzorce výška/(váha)2.

Page 32: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Náhodný výběr

Programy vytvořené pro uživatele nemusí nutně nabývat hodnot, jež určuje programátor nebo uživatel. Představitelem této funkce je příkaz random, generátor náhodných čísel. Příkaz se zavádí příkazem randomize, který příkaz random nastaví na počáteční hodnoty. Randomize nemá žádné jiné parametry a zadává se do samotného zdrojového kódu většinou za begin pouze se středníkem. Pokud by tento příkaz nebyl v programu uveden, nespustí se libovolný výběr hodnoty v programu a náhodná hodnota bude vždy nulová. Příkaz random můžeme buď přiřazovat k proměnným celočíselného typu, nebo je můžeme vypisovat přímo. Hodnota rozsahu náhodného čísla se uvádí za příkaz do závorek. Vždy jde o posloupnost čísel začínající nulou. Pokud bychom chtěli nulu vyřadit z výpisu libovolných čísel, stačí za mezní hodnotu přičíst jedničku např.: random(15)+1 . Náhodná hodnota se načítá ze systémových hodin a maximální hodnota může být 65536. Příklad přiřazení x:=random(255) , nebo výpisu write(random(15) .

Úkolem k procvičení je prográmek na hádání čísla. Počítač vygeneruje libovolné číslo od jedné do sta a úkolem uživatele je uhodnout tuto hodnotu na co nejméně pokusů. Při hádání je po zadání čísla napovězeno hráči, zda má volit následné číslo vyšší či nižší. Po uhodnutí program vypíše, jaké bylo myšlené číslo, a také počet pokusů, které uživatel potřeboval k vyřešení. Příklady na procvičení:

1) Sestrojte program, který vygeneruje náhodné číslo od jedné do deseti. 2) Vypište záporné číslo a zjistěte zda je liché nebo sudé.

3) Vygeneruj dvě náhodná čísla a vypiš je vzestupně.

4) Vytvořte program pro výpočet průměru z pěti náhodných čísel.

5) Ze tří náhodně vygenerovaných čísel vypiš vždy nejmenší.

Page 33: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Nový řádek u výstupu a vstupu Pokud potřebujeme, aby se nám vypisovaly příkazy pod sebou a ne vedle sebe, můžeme použít příkaz výstupu, který zapíše za obsah výpisu znak, jenž posune kurzor na nový řádek. Tento příkaz má název writeln, kde zkratka ln v příkazu značí line-řádek. Jedná se o shodný příkaz s write, nicméně po vykonání příkazu výstupu dojde k přesunu kurzoru na začátek nového řádku. Použijeme-li tedy následující příkaz výstupu write(’Zadej hodnotu ’) a vstupu read(a) , bude výsledek po provedení příkazů mít vzhled Zadej hodnotu 5 , zatímco pokud použijeme writeln ve stejném zadání, výsledek bude obsahovat text Zadej hodnotu na jednom řádku a následně program umístí kurzor na přiřazení hodnoty 5 na začátek dalšího řádku. Totéž platí, jestliže potřebujeme dejme tomu vynechat řádek ve výpisu, potom nám stačí zadat writeln bez parametrů.

Stejný případ platí i pro příkaz vstupu, který má tvar readln a též přesouvá kurzor na nový řádek. Při použití tohoto příkazu v celém programu můžeme využít zapsání příkazu readln bez parametrů k načtení klávesy Enter. Dokud nedojde k jejímu stisku, program se nerozběhne. Nejvíce se využívá na konci programu před endem na zobrazení výsledku, abychom nemuseli přepínat mezi editorem a výstupní obrazovkou klávesovou zkratkou Alt+F5. Podmínkou funkčnosti čekání na stisk klávesy Enter u výstupní obrazovky je, aby v celém zdrojovém textu byl použit jen příkaz readln a žádný read.

Využití obou příkazů na ukázce programu výpisu čísla s hodnotou x-krát větší.

program násobení; var i,j:integer; begin writeln(’Zadej hodnotu’); readln(i); writeln(’Zadej nasobek’); readln(j); i:=i*j; writeln(’Vysledna hodnota je’,i) readln; end.

Program bude vypisovat jednotlivé přiřazení z klávesnice na samostatné řádky a po výpisu výsledku počká, na stisk klávesy Enter.

Page 34: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Příkazy cyklů

Příkazy cyklů opakují určité příkazy nebo posloupnosti příkazů

pomocí dokola se opakujících smyček. Uskutečňují jednotlivé příkazy tak, jak jdou za sebou, od prvního k poslednímu, dokud nenarazí na podmínku, která na základě vyhodnocení cyklus buď ukončí nebo provede skok k novému vykonávání jednotlivých příkazů.

V Pascalu máme tři druhy příkazů cyklů, z nichž první dva se liší především v tom, zda podmínka, má - li se smyčka opakovat nebo ukončit, je na začátku cyklu nebo na konci, a třetí, bez podmínky, je využíván, jestliže předem známe počet opakování cyklu: 1) cyklu repeat until - podmínka opakování je na konci 2) cyklus while do - podmínka opakování je na začátku 3) cyklus for to do - počet opakování je předem znám bez podmínky

Nejjednodušší je cyklus první. Tento cyklus postupně vykonává

příkaz po příkazu uvedených za klíčovým slovem repeat (opakuj), až po podmínku umístěnou za klíčovým slovem until (dokud). Pokud podmínka until na konci cyklu neplatí, vykoná se celý blok příkazů uvedených v těle cyklu za repeatem znovu, a to tak dlouho, dokud nebude podmínka splněna. U tohoto cyklu dochází vždy k průchodu opakováním alespoň jednou.

Syntaktická a schematická podoba příkazu má následující tvar:

Za příkazem repeat se nemusí dělat

středník. Jednotlivých příkazů v cyklu můžeme vložit neomezeně, ale za nimi se středník dělat musí, a pokud potřebujeme, můžeme použít i další vnořené cyklu v repeatu. Protože za until je podmínka, nelze u ní přiřazovat, pouze využít relační operátory, za kterými již cyklus končí a neobsahuje žádná další klíčová slova.

repeat příkaz 1; příkaz 2 ; . . příkaz n ; until podmínka;

s podmínkou

příkaz 1

příkaz 2

příkaz n

Page 35: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Vytvoříme - li však podmínku na konci opakování chybně, což se v počátku seznamování s cykly stává, dochází k zacyklení (dokola se prochází cyklem bez možnosti ukončení samotným programem), a tak nezbývá, než cyklus přerušit zastavením kombinací kláves Ctrl+Pause. Na obrazovce se objeví modrý pruh, který udává, na jakém místě byl program uživatelem přerušen. Opětovné spuštění po jakékoliv opravě bude vyžadovat potvrzení změny zdrojového textu, a jestliže program proběhne řádně a nebude již zapotřebí jej nestandardně ukončit, označení zmizí.

Nejběžnější použití tohoto cyklu je v omezení zadávaných hodnot. Jestliže toto omezení budeme ošetřovat podmínkou, pouze se vypíše chyba v zadané hodnotě, ale program bude pokračovat dál. Využití tohoto cyklu zkusíme aplikovat na příkladu z podmínky výpočtu průměru čtyř známek ve škole. Při řešení zadání v podmínkách se mohlo stát, že uživatel, ačkoliv měl zadat známky v rozsahu <1..5>, schválně mohl zadat neodpovídající hodnoty. A z tohoto důvodu je nejlepším ošetřením proti takovémuto překlepu cyklus, který uživatele nepustí k řešení dílčích úloh algoritmu dál, dokud nezadá hodnoty správně.

Část programu s tímto ošetřením pak bude vypadat následovně:

repeat

writeln(’Zadej hodnotu’); readln(i);

if (i>5) or (i<1) then begin

writeln(’Zadna hodnota ’,i,’ je chybna!’); writeln(’Zkus to znovu’)

end; until (i<=5) and (i>=1);

Po zadání příkazu opakování následuje příkaz výstupu a vstupu,

kterým načteme hodnotu definovanou typem v deklarační části a dále neúplná podmínka pro zjišťování rozsahu zadaného čísla. Pokud číslo není v rozsahu <1..5>, podmínka platí a zobrazí se na monitoru výstup „Zadaná hodnota je chybná!“ a „Zkus to znovu“ , pokud hodnota do intervalu patří, podmínka se vůbec nevykoná. Poté následuje ukončení cyklu klíčovým slovem until s podmínkou, která opět vyhodnocuje výraz porovnáváním. Pokud podmínka opakování za untilem platí, smyčka se ukončí a program pokračuje dalšími příkazy, jestliže

Page 36: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

neplatí, cyklus se opakuje znovu od výstupu, a to tak dlouho, dokud není podmínka splněna. Další novou částí cyklů bez předem daného počtu opakování je počítadlo, které nám zaznamenává množství průchodu smyčkou. Jako příklad lze uvést výpis slov „ Ahoj světe. “ třeba pětkrát:

Prvním průchodem, který se provede vždy u tohoto cyklu, jak jsme si

uvedli výše, nabude proměnná p hodnotu o jednu větší, a tedy se bude rovnat jedné. Na začátku každého spuštění programu se všechny proměnné v Pascalu vždy v paměti vynulují, ale i tak může dojít k chybě, a proto bychom měli na začátku programu nulovat všechny proměnné sami přiřazením nuly k proměnným. Poté následuje podmínka a porovnání hodnot. Protože průchod cyklem byl proveden poprvé a proměnná p nabyla hodnotu jedna, podmínka opakování splněna není a smyčka se bude provádět znovu. Druhý průchod přiřadí proměnné p hodnotu dva a podmínka opakování splněná opět nebude. Totéž se bude dít i v třetím a čtvrtém opakování. Při pátém průchodu cyklem proměnná p již získá počet pět a podmínka opakování bude vyhodnocena jako pravdivá a smyčka se ukončí.

Protože ukončení cyklu repeat na předem daný počet opakování je příliš zdlouhavé a nevýhodné (pohodlnější je využít příkaz cyklu for, který si rozebereme na konci kapitoly), ukážeme si jiné praktičtější použití cyklu, kdy předem neznáme počet opakování. Jedná se kupříkladu o vkládání hodnot, a opět budeme aplikovat vzor se zadáváním prospěchu ve škole, jestliže chceme zjistit průměr ze zadaných známek z maturitních předmětů. Na základě výpočtu pak zobrazíme výsledek. Zadávání známek budeme končit stiskem hodnoty nula.

repeat p:=p+1; writeln(’Zadej známku’); readln(i); k:=k+i; until i=0; prum:=k/(p - 1); writeln(prum);

p:=0; repeat writeln(’Ahoj svete!’); p:=p+1; until p=5;

Page 37: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Zdrojový text nám zobrazuje počítadlo, které zaznamenává počet

opakování cyklu, dále výstupní a vstupní příkaz a na dalším řádku zpracování součtu zadaných hodnot vstupu, které známe již z podmínky. Poté následuje podmínka opakování vyhodnocující vstupní číslo, které ukončí opakování smyčky při načtení hodnoty nula. Jestliže je podmínka opakování splněna, program přistoupí k zpracování výpočtu průměrné známky. Zde je potřeba si uvědomit, že se k proměnné p přičte i poslední průchod smyčkou při zadání závěrečného vstupu, který je nutný ve výpočtu odečíst, aby nedošlo ke zkreslení výpočtu. Celá úloha se dá zkomplikovat omezením na ošetření zadaných hodnot.

Druhý cyklus while řeší opakování stejným způsobem jako repeat a příkazy jsou si rovnocenné. Nicméně při použití cyklu while je podmínka opakování na začátku a pokud program podmínku nesplňuje, nevykoná se a neproběhne ani jednou. U tohoto cyklu tedy nedojde při nesplnění podmínky k vnoření do těla cyklu, a proto je někdy výhodnější používat právě tento druh opakování. Cykly jsou si nicméně rovny a co lze vykonat cyklem repeat, lze provést i cyklem while a naopak.

Tvar zápisu cyklu while:

kde následující části syntaktického tvaru znamenají

while klíčové slovo podmínka je libovolná hodnota nebo výraz, který může nabývat hodnotu pravda nebo nepravda do klíčové slovo příkaz libovolný příkaz nebo jiná operace

Pokud potřebujeme zapsat více příkazů do cyklu, musíme zadat za

příkaz do klíčové slovo begin, které nám dovolí vložit více příkazů do těla cyklu a posloupnost těchto příkazů ukončíme klíčovým slovem end se středníkem. Poté bude syntaktický a schematický zápis vypadat následovně:

while podmínka do příkaz;

Page 38: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Výhoda oproti cyklu repeat je

v tom, že pokud potřebujeme ošetřit

omezení při zadávání určitých hodnot,

je jednodušší použít cyklus while,

nicméně mezi začátečníky není tento

cyklus moc oblíben: writeln (’Zadej hodnotu od 1 do 5 ’); readln (i);

while (i<1)or(i>5) do begin

writeln(’chyba, zadej znovu’); readln(i)

end;

V uvedeném příkladu nejdříve načteme proměnnou i , která se vyhodnotí v podmínce. Neodpovídá - li hodnota podmínce, pokračuje se

za cyklem dalšími příkazy, tzn., proměnná má hodnotu 1 až 5, odpovídá - li proměnná podmínce, následuje vstup do smyčky a nejdříve se vypíše

hlášení „chyba“ a poté bude cyklus čekat na nové zadání vstupu pro

proměnnou i . V případě, že bude proměnná opět vyhovovat podmínce, doje opětovně k vypsaní chybového zadání a čekání na načtení nového vstupu a to tak dlouho, dokud podmínka nepřestane platit. Příklady na procvičení: 1) Sestrojte program na výpis hodnot, které jsou jen kladné. Zadávání

končete nulou a u výsledku dále zobrazte i celkový počet zadaných

vstupů.

while podmínka do begin příkaz 1; příkaz 2; . . příkaz n end;

příkaz 1

příkaz 2

příkaz n

Page 39: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

2) Sestavte program na součet sudých a lichých hodnot zadaných ve

vstupu, konec zadávání proveďte opět nulou. 3) Vymyslete prográmek na součin dvou hodnot tak, aby v prográmku

nebylo uvedeno znaménko krát. 4) Použijte zadání předchozí otázky, v řešení se mohou objevit ale jen dvě

proměnné. 5) Navrhněte program na uspořádání pěti zadaných čísel ze vstupu tak,

aby se na výstupu seřadila vzestupně. 6) Zhotovte program na vypsání druhého nejvyššího čísla z hodnot

zadaných na vstupu a zakončených nulou. 7) Všechny uvedené příklady řešte jak pomocí cyklu repeat, tak i pomocí

cyklu while. Poslední z trojice cyklů je opakování bez podmínky, kdy je předem dán

počet průchodů smyčkou. Jedná se o cyklus for, který v řadě případů nahrazuje dva výše uvedené cykly, neboť efektivněji a přehledněji

dosahuje požadovaného výsledku. Cyklus má dva tvary: a) vzestupný b) sestupný Tvar zápisu vzestupného cyklu for má tuto podobu: kdy

for klíčové slovo proměnná jakákoliv proměnná typu integer min hodnota celé číslo, proměnná i výraz udávající

počáteční hodnotu smyčky to klíčové slovo max hodnota celé číslo, proměnná i výraz udávající

konečnou hodnotu smyčky do klíčové slovo příkaz libovolný příkaz nebo jiná operace

for proměnná:=min hodnota to max hodnota do příkaz;

Page 40: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Pro snazší pochopení uvedené formy zápisu jej můžeme vyložit

následujícím způsobem:

A opět, pokud potřebujeme zadat více příkazů náležejících

ke smyčce, vypomůžeme si uzavřením dané posloupnosti příkazů mezi

klíčová slova begin a end se středníkem, např.:

Jako příklad si můžeme uvést vypsání hodnot od jedné do deseti.

Ukázka slouží i jako porovnání mezi cyklem for a repeat (while). Uvedený

vzor lze naprogramovat všemi třemi cykly, nicméně tímto způsobem

dojdeme k nejpohodlnějšímu řešení:

Místo konstant můžeme použít i proměnné:

Syntaxe sestupného cyklu má tuto formu:

kdy for klíčové slovo proměnná jakákoliv proměnná typu integer max hodnota celé číslo či proměnná udávající horní

hodnotu smyčky downto klíčové slovo min hodnota celé číslo či proměnná udávající spodní

hodnotu smyčky do klíčové slovo příkaz libovolný příkaz nebo jiná operace

for proměnná:=min hodnota to max hodnota do begin příkaz 1; příkaz 2; . . příkaz n end;

Pro proměnnou, která má např. nulovou počáteční hodnotu, přičítej po průchodu smyčkou vždy hodnotu o jednu větší až ke konečné hodnotě a při tom proveď uvedený příkaz.

for proměnná:=max hodnota downto min hodnota do příkaz;

for i:=min to max do writeln(i)

for i:=1 to 10 do writeln(i).

Page 41: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Opětně pro snazší pochopení uvedeného zápisu jej můžeme objasnit

takto:

I zde platí, že jestliže potřebujeme zadat sekvenci příkazů do

smyčky, využijeme klíčová slova begin a end se středníkem. Pro

algoritmické znázornění sestupného cyklu se využívá tato vývojová

značka (u vzestupného se jen prohodí min a max):

Příklady na procvičení: 1) Napište program pro vypsání hodnot od šesti do deseti, aniž byste

ve zdrojovém kódu tato čísla použili. 2) Pomocí cyklu for načti pět hodnot, sečti je a vypočítej z nich průměr. 3) Vymyslete program na vypsání malé násobilky po zadání hodnoty od

nuly do deseti. 4) Proveďte totéž, ale výpis rozdělte do dvou sloupců..

Pro proměnnou, která má horní hodnotu opakování po průchodu smyčkou odečítej hodnotu o jednu až po nejnižší zadanou hodnotu a pokaždé přitom proveď příkaz.

proměnná:=max,min

příkaz 1

příkaz 2

příkaz n

Page 42: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Datový typ char

V kapitole o číselném datovém typu jsem si uvedli čtyři základní

datové typy. Mezi nimi byl i typ char (charakter - znak) pro práci se znaky. Jako jiné typy se zavádí v deklarační části za jménem názvu proměnné.

Jestliže však chceme přiřadit k dané proměnné znak, musíme jej zadat do

apostrofů, např.:

Při zápisu znaku do datového typu char rozlišujeme velké i malé

znaky. Pakliže bychom zapsali do proměnné znak, číslo, znak:=’1’ , kompilátor jej nebude překládat jako číslo, ale znak. Pokud by však nebyly uvedeny apostrofy u daného znaku, překladač by ohlásil chybu typu. Při

zadání většího počtu znaků si proměnná uchová pouze první zadaný znak.

Při načítání znaků je možné využít všechny znaky ASCII kódu (American

Standard Code for Information Intecharge - znaky využívané počítačem).

Příklad použití typu char je kupříkladu u ukončení cyklu na stisknutí

požadované klávesy u úlohy uvedené výše, kde musíme použít nulu a

posléze ji odečíst. V tomto případě nikoliv: repeat p:=p+1; writeln(’Zadej známku’); readln(i); k:=k+i; writeln(’Chces zadavat dal? Ne stiskni n.’); readln(z); until z=’n ’; prum:=k/p; writeln(prum);

Dále nám tento typ nabízí dvě funkce: a) ord převede znak na číslo write(ord(’ \ ’)) , vypíše číslo 92 b) chr převede číslo na znak write(chr(92)) , vypíše znak

zpětné lomítko

var znak:char; begin znak:=‘a‘;

Page 43: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Protože využití ASCII kódu v programování je užitečné, je velmi

jednoduché si pomocí cyklu for nechat vypsat všechny znaky tak, jak po sobě v této tabulce následují.

for i:=1 to 255 do write(i, ’) ’,chr(i), ’; ’);

Příklady na procvičení:

1) Sestav prográmek na výpis iniciál ze jména. Uživatel zadá celé své

jméno a program je převede na počáteční písmena a vypíše. 2) Napište program, který dle prvního písmene ročního období vypíše

celý jeho název. Ostatní písmena ošetři. 3) Nechť uživatel zvolí znak, pomocí kterého se bude vykreslovat plný

čtverec (4*4), složený ze zvoleného znaku. 4) Navrhni program na výpis trojúhelníku ze znaku, který zvolí na

začátku programu uživatel, poté zvolí ještě výšku (počet znaků od

jedné do pěti) a trojúhelník vykresli. 5) Sestavte program, který bude převádět malé písmeno na velké

a obráceně, dokud uživatel nezadá nulu. 6) Vytvoř program heslo, kdy počítač si myslí určité čtyřmístné slovo,

které je uživateli předem známo. Pokud jej však uživatel nezadá ani na

třetí pokus správně, systém vypíše chybu a ukončí se. Pokud je heslo

zadáno správně na některý ze tří pokusů, program uživatele pochválí a

také se skončí. 7) Zhotov program na hádání slova, kdy počítač má nadefinované určité

slovo a uživatel se je pokouší uhodnout.

Page 44: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Mnohonásobné větvení

U mnohonásobného větvení se jedná opětovně o podmínku nyní

tvořenou příkazem case, který může mít opět dva druhy zápisu: a) neúplný - pokud podmínka není splněna, příkaz se neprovede b) úplný - příkaz se provede vždy

Syntaxi neúplné podmínky case znázorňujeme takto:

kde case klíčové slovo proměnná jméno proměnné, které může být typu

integer a char of klíčové slovo konstanta pravděpodobná hodnota z množiny

proměnné : oddělující značka vymezující možnou

hodnotu od příkazu příkaz povel, který se vykoná, jestliže odpovídá

konstanta proměnné, za každým příkazem

je středník end zakončení podmínky case se středníkem Podoba schematického znázornění neúplného příkazu case je

následující:

case proměnná of konstanta 1:příkaz 1; konstanta 2:příkaz 2;

.

. konstanta n:příkaz n end;

příkaz 1 příkaz 2 příkaz n

Page 45: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Řešení rozsáhlejších úloh pomocí podmínky if je zdlouhavé a značně nepřehledné. Proto se ke snadnějšímu postupu využívá příkaz case. Při použití povelu case se nejdříve zvolí typ proměnné, kterou může proměnná získat a nadefinuje se v deklarační části. Poté se daná proměnná načte a podmínka projde sledem všech množin konstant obsažených v levé části větvení za klíčovým slovem of. Pokud žádná ze stálých veličin uvedených před dvojtečkou v podmínce neodpovídá proměnné, podmínka je vyhodnocena jako neplatná a neprovede se. Jestliže dojde ke shodnosti konstanty s proměnnou, vykoná se příkaz uvedený za danou veličinou. V případě, že potřebujeme použít větší počet příkazů za konstantou, můžeme je uzavřít mezi begin a end.

Jako příklad si můžeme uvést úkol pro výpočet základních matematických operací – kalkulačka, kdy si nejdříve zadáme první a druhou hodnotu a jako poslední, zda hodnoty budeme sčítat odčítat násobit nebo dělit:

var a,b:integer; z:char; begin writeln(’Zadej první hodnotu’);

readln(a); writeln(’Zadej druhou hodnotu’);

readln(b); writeln(’Zadej početní operaci’);

readln(z); case z of

’ +’ :write(a+b); ’ -’ :write(a - b); ’*’ :write(a*b); ’ /’ :write(a/b:0:2)

end; readln;

end. Jako konstanta nemusí být uvedena jen jedna stálá veličina, ale

může být použit i určitý rozsah, který se zadává dvěma tečkami mezi mezními hodnotami. K zavedení typu integer se mezní hodnoty neuvozují do apostrofů 1800..1899:write(’19. století’) , s apostrofy se používají u typu char ’a’..’z’:write(’pismeno’) .

Page 46: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Pro názornost - forma zápisu s více příkazy za konstantou ’5’..’9’: begin writeln(’chyba’); z:=z - 1; end;

U úplné podmínky příkazu case platí stejné pravidlo jako

u podmínky if. Pokud podmínka platí, vykoná se příkaz za odpovídající konstantou. V případě, že není splněna ani jedna z možných konstant, provede se příkaz popřípadě příkazy, pokud je uzavřeme mezi begin a end za klíčovým slovem else.

Syntaktická forma zápisu úplného příkazu case má tvar:

kde case klíčové slovo proměnná jméno proměnné, které může být typu

integer a char of klíčové slovo konstanta pravděpodobná hodnota z množiny

proměnné : oddělující značka vymezující možnou

hodnotu od příkazu příkaz povel, který se vykoná, jestliže odpovídá

konstanta proměnné, za každým příkazem je středník

else klíčové slovo příkaz povel, který se vykoná, jestliže

neodpovídá konstanta proměnné v žádné možnosti, může být bez středníku

end zakončení podmínky case se středníkem

case proměnná of konstanta 1:příkaz 1; konstanta 2:příkaz 2;

.

. konstanta n:příkaz n else konstanta :příkaz end;

Page 47: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Schematický nákres úplného příkazu case:

Ukázkou na řešení úplné podmínky case je příklad na výpočet hmotnosti. Uživatel zadává výšku a váhu a na základě těchto dvou veličin mu program sdělí, zda má váhu v normě či zda má nadváhu nebo podváhu. Výpočet koeficientu se provádí dělením výšky a váhy. Údaje jsou v metrech a kilogramech.

var vyska,vaha,orez,hod1,hod2:integer;

deshod:real; begin

writeln(’zadej svoji vysku v metrech: ’); readln(vyska); writeln(’zadej svoji vahu: ’); readln(vaha); deshod:= vyska/vaha; orez:=trunc(deshod*10); hod1:=orez div 10; hod2:=orez mod 10;

case hod1 of 1: write(’nadvaha’); 2:case hod2 of 0..5:writeln(’norma ’); 6..9:writeln(’podvaha’); end; 3: writeln(’podvaha’)else writeln(’je mi lito chybne zadano’);

end; end.

příkaz 1 příkaz 2 příkaz n příkaz

Page 48: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Datový typ string Tento datový typ byl vytvořen jako nástavba datového tytu char.

Jedná se o znakový datový typ, jenž může obsahovat více znaků najednou.

Maximální počet znaků, které můžeme do tohoto typu zadat, je 255. Zavádí se v deklarační části za jménem proměnné, kde můžeme

omezit velikost obsahu zadávaného řetězce a to připsáním hodnoty za typ,

nebo bez hodnoty délky řetězce s maximální velikostí. Syntaxe zápisu typu string v deklarační části má následující tvar:

kde

proměnná představuje jméno proměnné string klíčové slovo

[dékla řetězce] udává se celým číslem v hranatých závorkách např. s[5], je to nepovinný údaj

Typ string tedy umožňuje proměnné přiřadit posloupnost znaků

zapsanou v apostrofech. Jestliže zadáme do proměnné typu string delší posloupnost znaků, než je uvedeno v deklarační části, budou zbývající

znaky smazány. Pokud přiřazujeme k proměnné, může mít zápis přiřazení

podobu jazyk:=’Pascal’ . Protože se jedná o znakový datový typ,

musí být přiřazené znaky uvozeny v apostrofech, stejně jako u typu char.

Jednotlivé pozice v řetězci jsou číslovány od první až po poslední

vymezenou v deklarační části. Pozor, i zde rozlišujeme velké a malé znaky

při zápisu. Takže z výše uvedeného příkladu přiřazení vyplývá:

Pozice znak

1. ‘P‘ 2. ‘a‘ 3. ‘s‘ 4. ‘c‘ 5. ‘a‘ 6. ‘l‘

var proměnná:string[délka řetězce]

Page 49: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Nultá pozice zastupuje počet obsazených znaků v řetězci. Představuje

ji funkce Length, která vrací aktuální hodnotu délky řetězce. Syntaxe

zápisu má pak tvar:

např.: write(Length(jazyk)), vypíše na výstupní obrazovce hodnotu 6, neboť slovo Pascal má šest znaků. Pokud potřebujeme s aktuální délkou řetězce dále pracovat, máme možnost ji přiřadit

k celočíselné proměnné, např.: délka:=Length(jazyk), nebo ji můžeme

přímo vypsat. Jestliže potřebujeme vypsat celý řetězec, použijeme příkaz:

V případě, že požadujeme vypsat znak na určité pozici

z požadovaného řetězce, umístíme hodnotu s pozicí do hranatých závorek:

Příklad vypsání celého řetězce: write(jazyk), vypíše celou proměnou, v našem případě slovo Pascal . Ukázka vypsání určitých

znaků v řetězci: write (jazyk[1],jazyk[2],jazyk[1], jazyk[5]) vypíše na výstupní obrazovku znaky PaPa.

Obdobným způsobem jak jsme zvyklí z příkazu read přiřazujeme

znaky z klávesnice na jednotlivé pozice, např.: read (jazyk[1], jazyk[5]), nebo celý text najednou read (jazyk). V první ukázce zapíšeme z klávesnice pouze na pozici jedna a pět, v druhé zapisujeme postupně od první po konečnou pozici danou deklarační částí.

S jednotlivými pozicemi v řetězci můžeme pracovat stejně jako se

samotnými proměnnými, např: if jazyk[1]= ’ P’ then …

write(Length(název řetězce))

write(jméno proměnné řetězce)

write( proměnná řetězce[hodnota pozice])

Page 50: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Ukázkou řešení datového typu string bude příklad na zjištění kladné

či záporné odpovědi na určitou otázku. var

otazka:string; begin writeln(’Je pondeli, zadej ano ci ne’: ’); readln(otazka); if (otazka=’ANO ’)or (otazka=’ano ’)then writeln(’kladna odpoved: ’) else if (otazka=’NE ’)or (otazka=’ne ’)then writeln(’zaporna odpoved: ’)else writeln(’chybna odpoved: ’); readln;

end.

Pokud potřebujeme dva datové typy string spojit dohromady,

vložíme mezi jejich proměnné symbol +, např..

var

s1,s2,s3:string; begin s1:=’auto’; s2:=’mechanik’; s3:=s1+s2;

write(s3); Při výpisu bude proměnná s3 obsahovat řetězec‚’automechanik’. Další funkce proměnných typu string:

Concat má stejnou funkci jako operátor plus, spojí dva a více řetězců dohromady s3:=concat(’auto’,’mechanik’) .

Copy zkopíruje určitý počet znaků řetězce od dané pozice

se zadanou délkou s:= copy(s3, 5, 8) , vypíše do proměnné typu string textový řetězec z proměnné s3 , takže pokud byl v proměnné s3 text automechanik , bude v proměnné s mechanik . Kopíruje od páté pozice osm znaků.

Page 51: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Delete smaže určitou část řetězce od zadané pozice s danou délkou s:= copy(s3, 5, 8 ). Jestliže použijeme stejný text jako

v předešlé funkci, bude z proměnné s po vykonání příkazu smazán text mechanik.

Insert vloží nadefinovaný řetězec do proměnné typu string od určité

pozice insert( ’ mechanik ’ ,s,5). Pokud bude v proměnné s nadefinovaný text auto , výše uvedeným příkladem umístíme od posledního znaku v proměnné text mechanik a výsledek poté bude obsahovat řetězec automechanik.

Pos porovnává pozice v určitém řetězci s určitou hodnotou. Např.

pokud bude k proměnné přiřazen řetězec s:=’auto’ , můžeme například jeho druhou pozici porovnat v podmínce if pos(’u’,s)=2 then , nebo v přiřazení a:= pos(’u’,s)

Příklady na procvičení:

1) Najděte v uživatelem nadefinovaném řetězci velké písmeno A. 2) Vypište počet malých a v řetězci nadefinovaném uživatelem.

3) Napište počet všech předložek v uživatelem napsaném textu.

4) Určete počet vět na základě tečky ve větě, z textu zadaného uživatelem.

5) Proveďte totéž, ale ošetřete i velké počáteční písmeno a mezeru za

tečkou.

6) Procházejte celý řetězec nadefinovaný uživatelem a zjistěte počet znaků v řetězci. Napodobení funkce length.

7) Převeďte číslo z dvojkové soustavy do desítkové .

Page 52: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Převod mezi typem znakovým a celočíselným

Pascal nám umožňuje převádět číselné znaky na čísla. K převodu

mezi typy slouží procedura val. Ta pracuje jak s celými tak reálnými čísly a zároveň, jak s typem string tak s typem char. U této procedury se musí v deklarační části nastavit tři proměnné (jedna znaková, jedna číselná a jedna celočíselná).

Proměnná typu string (char), nese číselné znaky, 1. číselná proměnná

přebírá znaková čísla a přiřazuje je jako hodnoty a 2. proměnná typu

integer zaznamenává pozici chyby. Převod může mít následující postup:

Jestliže zadáme do proměnné typu string znaky:= ’- 45’ a chceme je převést na celočíselnou hodnotu cisla, převod zapíšeme

následujícím způsobem val (znaky, cisla, chyba). Poté bude přiřazena proměnné cisla hodnota - 45 a proměnná chyba bude obsahovat 0, protože převod proběhl bez chyb. Při převodu

znaky:= ’ 4,5 ’ bude proměnná cisla obsahovat 0 a proměnná chyba 2. Je to způsobeno chybou na druhé pozici, kde není číselný znak, ale znak , , jež se nedá převést, protože Pascal pracuje s desetinnou tečkou a ne čárkou.

Opačný postup, tedy převod celočíselného typu na znak v Pascalu, zajišťuje funkce str:

Proměnná číselného typu nese určitou hodnotu, která se zapisuje po

provedení procedury str do proměnné typu string, nelze použít u typu char.

Pokud potřebujeme převést desetinné číslo použijeme dvě za sebou jdoucí

dvojtečky, kdy první určuje odsazení od posledního znaku, druhá počet

desetinných míst za desetinou tečkou. Tuto druhou dvojtečku nelze použít

při převodu celých čísel. Ukázka převodu z čísla na znak, kdy proměnná čísla nese hodnotu - 4.5 a chceme ji převést do textové podoby, může mít tvar str(cisla:0:1,znaky) . Po provedení této procedury získá proměnná znaky na 1. pozici znaménko pomlčka, na 2. pozici znak čtyři na 3. pozici znak tečky a na 4. pozici znak pětky.

val( znak, číslo, kladné celé číslo)

str(číslo[:odsazení:počet desetinných míst],string)

Page 53: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Jednotky

Jednotka je soubor krátkých prográmků napsaných ve zdrojovém

kódu Pascalu. Obsahují vlastní proměnné, typy a samotné zdrojové kódy,

sloužící pro usnadnění práce při vytváření programů s danou jednotkou. Jsou uloženy v souboru turbo.tpl a chovají se jako samostatný program.

Jednotky se zavádí v deklarační části nad klíčovým slovem var a const a uvozují se klíčovým slovem uses. Za ním následuje název jednotky. Pascal zahrnuje devět základních jednotek:

a) CRT - obsahuje nástroje pro lepší práci v textovém

režimu b) DOS - umožňuje komunikaci s operačním systémem

MS-DOS c) GRAPH - zprostředkovává práci v grafickém režimu d) GRAPH3 - zavádí činnost v grafickém módu pro Turbo

Pascal 3.0. e) OVERALY - dovoluje zvětšit zdrojový kód nad velikost

65kB f) PRINTER - usnadňuje komunikaci s tiskárnou g) SYSTÉM - základní jednotka, není nutné ji zavádět. Je

použita ve všech programech. h) TURBO3 - zprostředkovává zpětnou kompatibilitu

s Turbo Pascalem 3.0. i) WINDOS - zahrnuje podobné funkce jak jednotka DOS

s výkonnějšími operacemi

Jednotka CRT

Jednotka CRT obsahuje nástroje pro lepší práci s výstupní uživatelskou obrazovkou a skládá se z několika procedur a funkcí. Tyto funkce dovolují rozšíření základních operací o barvy, zvuky, a jiné

výstupní efekty. Výstupní obrazovka programu má dva základní režimy

zobrazení, jež záleží na nastavení systému. Je to 24 a 50řádkový režim.

Pod operačním systémem Windows 9x je standardně nastaven 24řádkový

režim, pod operačním systémem Windows 2000 a Windows XP režim

50řádkový. Změna režimu se nastavuje přes proceduru textmode, která bude popsána níže.

Page 54: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Pro lepší pochopení některých procedur, se kterými pracuje jednotka CRT, je třeba znát rozvržení výstupní obrazovky. Ta se skládá z x-ové a y-ové osy. X-ová osa představuje počet bodů na řádku a y-ová osa zahrnuje počet bodů ve sloupci. Při zadávání souřadnic se nejdříve uvádí

osa x a poté y, oddělená čárkou. Pro snazší představu o rozměrech uživatelské plochy slouží její

popis:

Při 50řádkovém režimu nám bílý bod vpravo dole na uživatelské

textové ploše znázorňuje pozici kurzoru 80,49 , kdy číslo 80 značí počet

znaků na řádek a číslo 49 počet řádků na obrazovce. Souřadnice 1,1 je vždy umístěna vlevo nahoře.

Funkce a procedury jednotky CRT:

a) clrscr - smaže obrazovku a umístí kurzor na

začátek řádku na souřadnici 1,1 b) textcolor - nastaví barvu textu od 0 do 15 dle

tabulky přiřazující daným číslům barvu.

Např.: textcolor (14) nastaví barvu písma na žlutou. Při zadávání

hodnoty můžeme použít jak číslo

udávající požadovanou barvu tak i

samotný anglický název barvy, např.: textcolor(red) . Pokud má písmo blikat, přidá se za název barvy

buď + 128, nebo text blink.

x-ová osa

y-ov

á os

a

79,49 ����

����39,25

����1,1

Page 55: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

číslo Barva překlad číslo barva překlad

0 Black černá 8 darkgray tmavě šedá 1 Blue modrá 9 lightblue světle modrá 2 Green zelená 10 lightgreen světle zelená 3 cyan azurová 11 lightcyan světle azurová 4 red červená 12 lightred světle červená 5 magenta fialová 13 lightmagenta světle fialová 6 brown hnědá 14 yellow žlutá 7 lightgray světle šedá 15 white bílá

c) textbackground - nastaví barvu pozadí od 0 do 7,

např.: extbackground(1) nastaví barvu pozadí na modrou. I zde můžeme použít jak číselné označení jména barvy tak její anglické jméno. Barvy odpovídají prvnímu sloupečku v tabulce. Pokud chceme mít zbarvenou celou plochu pozadí, zapíšeme pod textbackground(hodnota) příkaz clrscr .

d) delay - pozastavuje běh programu na danou

časovou jednotku. Hodnota jednotky se udává v milisekundách ( 1s=cca1000ms), pokud tedy chceme zadat prodlevu programu na jednu vteřinu, zapíšeme delay(1000). Tato hodnota platí pro počítače s nižším taktem procesoru. Se vzrůstajícím taktem se prodleva zkracuje.

e) sound - zapne PC speaker na určité zvukové

frekvenci. Hodnota uvedená za příkazem v závorce udává kmitočet v Hz, např.: sound(500 ). Slyšitelný rozsah pro zdravé lidské ucho je mezi 0-15000.

Page 56: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

f) nosound - vypne PC speaker (nutno zapsat pro ukončení zvuku), pokud spustíte program bez nosound , nemá žádný parametr, zvuk se nevypne a je nutné opustit prostředí DOSu.

g) gotoxy - nastaví pozici kurzoru na zadané

souřadnice. Např.: gotoxy(20,5) umístí kurzor dvacet bodů od začátku pátého řádku. Pro bezchybný zápis procedury gotoxy(x,y) nemusíme tak jako u všech výše uvedených procedur do závorky zadávat hodnoty typu integer, ale můžeme je nahradit i proměnnými.

h)wherex - vrátí aktuální x-ovou souřadnici

polohy kurzoru, v celočíselné podobě např.: i:=wherex , nebo gotoxy(wherex,20) .

i)wherey - totéž co funkce wherex vrací aktuální

y-ovou souřadnici polohy kurzoru, v celočíselné podobě, např.: i:=wherey , nebo gotoxy(wherex,wherey).

j) window - stávající okno obrazovky bude

nahrazeno oknem novým se zadanými souřadnicemi. Souřadnice v okně jsou relativní a odpovídají souřadnicím nového okna. Syntaxe procedury: window (x1,y1,x2,y2) , kde x1 a y1 reprezentují hodnoty levého horního rohu okna a x2 a y2 zastupují hodnoty pravého dolního rohu nového okna. Pokud tedy zadáme např.: window (25,11,55,14) , vytvoříme nové okno uprostřed

Page 57: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

obrazovky, které má velikost x-ové souřadnice 30 bodů na řádek a y-ová souřadnice má 3 body na sloupec. Od chvíle nastavení nového okna se nelze vrátit do okna původního a program používá souřadnice nastaveného okna. Návrat do předešlého okna nelze provést jinak než, znovunastavením nového okna. Pokud bychom chtěli, aby bylo okno ihned viditelné na obrazovce, musíme mu nastavit jinou barvu pozadí a vymazat obrazovku.

k) keypressed - funkce, která zjišťuje, byla-li

stisknuta jakákoli klávesa na klávesnici. Využívá se kupříkladu k ukončení repeat cyklu until keypressed , který bude opakovat smyčku, dokud nestiskneme nějakou klávesu.

l) readkey - funkce načte do paměti jeden znak

z klávesnice. Znak se po stisku klávesy neobjeví na obrazovce. Pokud potřebujeme danou hodnotou zpracovat, můžeme ji například přiřadit do proměnné charového typu: i:=readkey .

m) textmode - slouží pro nastavení režimu

zobrazení. Pod OS Windows 9x se standardně nastavuje režim zobrazení 80 znaků na řádek a 25 znaků na sloupec. Pokud toto zobrazení potřebujeme přednastavit na režim s menším počtem řádků či sloupců, můžeme vycházet z následující tabulky.

Page 58: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

syntaxe řádků sloupců

textmode(co40) 40 25 textmode(co80) 80 25

textmode(co40+font8x8) 40 50 textmode(co40+font8x8) 80 50 Jako vzorový příklad pro práci s textovou uživatelskou plochou

uvádím ukázku barevného textu na barevném pozadí umístěném uprostřed zobrazovací plochy pod OS Windows 9x.

uses crt;

begin textbackground(1); clrscr; gotoxy(30,12); textcolor(14); writeln(’Konecne vidim barevne a pipam’); sound(300); delay(200); nosound

end.

Než přejdeme k dalším příkladům vysvětleme si ještě jedno zadání společně. Jedná se o příklad s pohybem kurzoru, který má reagovat na stisk určité klávesy. Pokud chceme například posouvat znak „ “ po obrazovce doleva a doprava, využíváme princip přepisování znaku s barvou pozadí. Nejdříve si nastavíme barvu pozadí a vyčistíme obrazovku. Poté nastavíme barvu textu a umístíme kurzor se znakem na souřadnice uprostřed obrazovky (40,12).

uses crt;

var o:char; begin

textbackground(1); clrscr;

textcolor(14); gotoxy(40,12);

write(’*’);

*

Page 59: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Dále nadefinujeme smyčku repeat, ve které využijeme další z řady procedur jednotky CRT a vložíme funkci readkey na načtení určité klávesy z klávesnice. Pro výběr pohybu kurzoru doprava si zvolíme klávesu p, pro pohyb kurzoru doleva klávesu l a pro ukončení cyklu klávesu k . Tuto volbu ošetřujeme podmínkou, v níž přiřazujeme nějaké proměnné buď klávesu vpravo či vlevo. Za podmínkou následuje posloupnost příkazů s již zmiňovaným trikem používání barvy pozadí. Nejdříve si tedy navolíme barvu pozadí, poté předposlední pozici kurzoru (kurzor se nachází vpravo za vypsaným znakem), kterou navolíme díky funkci wherex-1 a vypíšeme znak. Tím docílíme toho, že vypsaný znak se přepíše stejným znakem, ale s barvou pozadí, takže působí jako smazaný. Poté nám již stačí vypsat znak o pozici dál a námi nadefinovanou barvou popředí.

repeat

o:=readkey; if o=’p’ then begin

textcolor(1); gotoxy(wherex - 1,12);

write(’*’); textcolor(14);

gotoxy(wherex,12); write(’*’);

end;

To vše uvedeme ještě jednou pro opačný směr a následuje ukončení cyklu s podmínkou na stisk určité klávesy. Pokud podmínka není splněna, smyčka se dále opakuje.

if o='l' then begin textcolor(1);

gotoxy(wherex - 1,12); write(’*’);

textcolor(14); gotoxy(wherex - 2,12);

write(’*’); end;

Pokud je podmínka splněna, prográmek končí svou činnost.

until o=’k’; end.

Page 60: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Pro načítání z klávesnice můžeme použít i kurzorové a speciální klávesy.

Klávesa kód(Alt+35) Enter #13 Esc #27

Mezerník #32 � #072 � #075 � #077 � #080

Pokud bychom tedy chtěli provést předešlý příklad pomocí

kurzorových kláves a klávesy Enter, příkazy by měly tuto formu zápisu:

if o=(#077) then … if o=(#075) then … until o=(#13);

Příklady na procvičení: 1) Vytvořte program na změnu pozadí obrazovky dle číselné nabídky.

2) Naprogramujte rámeček ze znaků, které si uživatel vybere na začátku

programu. Dále si uživatel volí i velikost rámečku od dvou do dvaceti.

3) Sestrojte program na přičítání a odečítání čísla. Uprostřed obrazovky se zobrazí číslo nula. Po stisku kurzorové klávesy „nahoru“ se k nule přičte hodnota o jednu větší atd. až po hodnotu sto. Pokud uživatel stiskne šipku dolů, hodnota se kdykoliv zmenší o jednu, maximálně však do méně sta. Na stisk klávesy Enter se program ukončí.

4) Vyrobte program „světelné noviny“. Uživatel si nastaví text, který po zadání běží v novém okně zleva doprava stále dokola. Maximálně čtyři znaky.

5) Navrhni program na vykreslení trojúhelníku na uživatelem zadaný

počet řádků z předem daného znaku.

Page 61: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

6) Zhotovte program „spirála“, který se bude skládat z rámečků, které se budou vždy s novou začínající stranou o jeden znak zmenšovat, až skončí uprostřed obrazovky. Poté spirálu opět po jednotlivých úsecích mažte.

7) Vypracujte „čítač“, tzn. po spuštění prográmku nastavte dobu odčítání od jedné do šedesáti (ošetřete) a zapněte čas. Od nastaveného času se začnou po cca vteřinovém intervalu odečítat o jednu hodnotu čísla, dokud nebude čas na nule. V tento okamžik se hodiny zastaví a program pípne.

8) Vytvořte prográmek „spořič obrazovky“ s různým počtem zobrazovaných bodů a s různou rychlostí jejich pohybu po obrazovce.

9) Napište program pro písničku „Kočka leze dírou“, kdy program zahrajete celou melodii písně. Notová stupnice pro Pascal má tyto hodnoty: c=262, d=294, e=330, f=349, g=392, a=440, h=494.

10) Sestavte hru „výherní automat“ na trénink postřehu uživatele. Uprostřed obrazovky jsou vedle sebe umístěny dvě buňky s náhodně se zobrazujícími čísly od nuly do devíti. Úkolem je stisknout libovolnou klávesu v okamžiku shodnosti dvou čísel. Pokud je pokus úspěšný, bod se přičte, pokud chybný, bod se odečte. Hra končí při dosažení buď tří kladných nebo záporných bodů.

11) Navrhni pro výše uvedené programy úvodní obrazovku, ve které

bude číselný seznam tebou vytvořených programů a po spuštění volby a vykonání programu bude možné se do úvodní obrazovky vrátit zpět a spustit jinou volbu.

12) Naprogramuj šachovnici s 16 poli na řádku a 8 poli ve sloupci. Dále

nastav před prvním řádkem abecední osu a prvním sloupcem osu číselnou.

13) Vytvoř program, kdy uživatel zadá slovo, to se náhodně 5 * rozmístí

na obrazovce a poté se u jednotlivých slov po jednotlivých znacích bude přesouvat na dolní řádek, kde zmizí.

Page 62: „Základy programování v Pascalu“ (učební pomůcka)files.sedlackova.webnode.cz/200000054-85b6286b54... · SŠ informatiky a spojů, Brno, Ćichnova 23, Brno 624 00 „Základy

Literatura [1] MOKRES, David. Základy programování. Praha. Computer Press, 1998. [2] SATRAPA, Pavel. Pascal pro zelenáče. Praha. Neokortex, 2000. [3] BAJGAR, Lubomír, TYC, Otto. Základy programování. Pascal. Brno.

VUT Brno, 1992. [4] Borland Pascal 7.0. Dokumentace překladače. Borland


Recommended