programování v pascalu
DESCRIPTION
Programování v Pascalu. pro začátečníky. Algoritmus, program. algoritmus je přesný postup řešení problému jeho vlastnosti jsou: - jednoznačnost, konečnost (vede k výsledku) - obecnost, opakovatelnost, srozumitelnost - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/1.jpg)
1
Programování v Pascalu
pro začátečníky
![Page 2: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/2.jpg)
2
Algoritmus, program
• algoritmus je přesný postup řešení problémujeho vlastnosti jsou:- jednoznačnost, konečnost (vede k výsledku)- obecnost, opakovatelnost, srozumitelnost
• algoritmus lze vyjádřit slovně, diagramem, programem nebo rovnicemi (matematicky)
• program je - algoritmus zapsaný kódem srozumitelným počítači- konečná posloupnost příkazů progr. jazyka
![Page 3: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/3.jpg)
3
Programovací jazyky
Rozdělení:• vyšší programovací jazyky
(Pascal, Fortran, Delphi)nezávislé na typu procesoru
• nižší programovací jazyky (jazyk symbolických adres)závislé na typu procesoru
![Page 4: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/4.jpg)
4
Programování
• strukturované (Pascal)redukce problému na podproblémyzáklad tvoří příkazy, akce
• objektové (Delphi)reakce na událostizáklad tvoří data, objekty
• funkcionální (Lisp) matematický popis funkcí, abstrakce
![Page 5: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/5.jpg)
5
Základní informace
• zdrojový kód je posloupnost příkazů daného programovacího jazyka (.PAS)
• strojový kód je kombinace 0 a 1, které představují konkrétní instrukce procesoru (.EXE)
• překladač je program, který provádí převod ze zdrojového do strojového kódu,jeho součástí je kontrola chyb syntaxe na lexikální i syntaktické úrovni (na úrovni slova i celé věty)
![Page 6: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/6.jpg)
6
START: MOV B,15MOV C,8
MOV A,C SUB B JC KONEC MOV A,B SUM C MOV X,A INT 16 KONEC: NOP
AF 15 12 08 A0 B8
10101111 00100101 00010010 10100000 10111000J. S. A. (assembler 8086)
Překlad do strojového kódu (8086)
zdrojový kód v jazyce Pascal:
A:=15: B:=8IF A > B THEN BEGIN X:=A+B; WRITE(X); END;
Z
A = 15B = 8
A>B Vypiš A+B
K
Příklad :
![Page 7: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/7.jpg)
7
Syntax a sémantikaPojmy:• syntax - pravidla tvorby příkazů, vět jazyka (gramatika)• sémantika - popisuje význam příkazů, vět
K českým větám přiřaďte sémantiku, význam:• Na věži byly hodiny.• Na věži byli hodiny.• Na věži bily hodiny.• Na věži bili hodiny.Nebo některá věta obsahuje syntaktickou chybu?
![Page 8: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/8.jpg)
8
Úvod k Pascalu
• autorem je Švýcar Niclaus Wirth• Pascal učí metody strukturovaného programování,
kdy každá struktura má 1 vstup a 1 výstup.Algoritmizaci chápe jako redukci problému na podproblémy
• základní podoba Pascalu je referenční jazyk• implementace: Turbo Pascal, Borland Pascal
![Page 9: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/9.jpg)
9
Prvky Pascalu
• množina symbolů, abeceda: anglická abeceda, číslicezvláštní symboly : + - / * = <> < > <= >= ( ) [ ] { } := . , : ' (* *)vyhrazená (klíčová) slova (program, var, begin…)
• identifikátory: označení, názvy vlastních prvků- lze použít písmena (bez diakritiky) i číslice- první musí být písmeno, ne číslice- nesmí se shodovat s klíčovým slovem, názvem programu
• Pascal nerozlišuje velká a malá písmena
![Page 10: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/10.jpg)
10
Proměnná (variable)
Proměnná je• objekt (pro uložení dat), jeho hodnota se mění• pojmenovaný úsek operační pamětiKaždá proměnná má přiděleno• jméno, identifikátor• datový typ - množina přípustných hodnot
- množina operacíSeznam proměnných používaných v programu MUSÍ být uveden v jeho hlavičce, v deklarační části za VAR.
![Page 11: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/11.jpg)
11
Konstanta (constant)
Konstanta je také• objekt, úsek operační pamětiMá přiděleno• jméno, identifikátor• hodnotu, která se nemůže měnit
Seznam konstant používaných v programu MUSÍ být uveden v jeho hlavičce, v deklarační části za CONST.
Často se používá pro uložení hodnoty čísla pí, pro předem známý či maximální počet, časový interval...
![Page 12: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/12.jpg)
12
Základní datové typy
Rozdělení:• ordinální: integer, char, boolean• neordinální: real
Ordinální typy jsou zobrazitelné na množině celých čísel, jejich prvky mají definovány předchůdce i následovníka.Priority operátorů jsou stejné jako v matematice.Při tvorbě výrazů lze používat kulaté závorky.
![Page 13: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/13.jpg)
13
Integer - celé číslo
Datový typ integer nabízí operace• + - * - aritmetické sčítání, odečítání, násobení• div - celočíselné dělení• mod - zbytek po dělení• abs - absolutní hodnotaPříklady:
rozdil:=x-y; obvod:=2*(a+b); klad:=abs(a); stovky:=cislo div 100; zb:=x mod y;
![Page 14: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/14.jpg)
14
Real - reálné číslo
Datový typ real nabízí operace• + - * / sčítání, odečítání, násobení, dělení• abs absolutní hodnota• sqrt odmocnina• sin, cos, arctan goniometrické funkce• trunc převod na celé číslo odseknutím desetinných
míst• round zaokrouhlení na celé číslo
![Page 15: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/15.jpg)
15
Boolean - logická hodnota
Datový typ boolean obsahuje pouze hodnoty true, false, tj. pravda, nepravda a nabízí operace
• and součin, konjunkce• or součet, disjunkce• not negacePříklady:
nalezeno:=false; ok:=p and q; opak:=not ok;konec:=(i=10)or(n>100);
![Page 16: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/16.jpg)
16
Char - znak
Datový typ char nabízí operace• succ následovník znaku• pred předchůdce znaku• ord ordinální hodnota znaku, ASCII kód• chr znak s daným ASCII kódemPříklady:
kod:=ord(ch); p:=pred(ch);znak:=chr(kod+3);
![Page 17: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/17.jpg)
17
Stavba programu obecněprogram název programu; label seznam návěští;uses seznam používaných knihoven;const deklarace konstant;var deklarace proměnných;procedure deklarace procedur;function deklarace funkcí;begin příkazy programu
end.
Nepotřebná klíčová slova (label, uses, procedure, function)lze vynechat, platí to zejména v jednoduchých programech.Kdekoliv v programu může být poznámka v (* *) nebo { }.
deklarační část
příkazová část
hlavička
![Page 18: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/18.jpg)
18
Hlavička a deklarační část• program Název programu;
- název splňuje konvence DOSu, bez diakritiky, bez mezer, začíná písmenem
• var deklarace proměnných- seznam jmen proměnných:datový typ;
• const deklarace konstant- jméno konstanty=hodnota (lze i výraz)
Jméno proměnné ani konstanty se nesmí shodovat s klíčovým slovem ani s názvem programu. Program může používat více proměnných i konstant, ale klíčová slova var, const se uvedou maximálně jednou.
![Page 19: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/19.jpg)
19
Příkazy
• jednoduchý příkazpřiřazení, příkazy vstupu a výstupu
• složený příkaz• větvení, podmíněný příkaz• příkazy cyklu• příkazy skoku• volání podprogramu
![Page 20: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/20.jpg)
20
Jednoduché příkazy
• přiřazovací příkaz :=syntaxe: proměnná:=výrazsémantika: vyhodnotí se výraz a výsledná hodnota je uložena do proměnné
• vstup dat, čtení read, readln (ln=nový řádek)• výstup dat, psaní write, writeln
- lze číst (nebo vypisovat) více hodnot současně- oddělovačem položek v seznamu je čárka- výstup proměnné lze formátovat pomocí znaku :- konkrétní text musí být uzavřen mezi apostrofy
![Page 21: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/21.jpg)
21
Složený příkaz
• je to sekvence, posloupnost příkazů• začíná klíčovým slovem begin• končí klíčovým slovem end• mezi nimi jsou další příkazy oddělené středníkem• poslední příkaz nemusí být zakončen středníkem,
před slůvkem end tedy nemusí být středníkStředník ; je v Pascalu oddělovač příkazů.
![Page 22: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/22.jpg)
22
Jednoduchý program
(* Součet dvou daných celých čísel *)
program soucet;var a,b,soucet:integer;begin
write('Zadej dve cisla: ');readln(a,b);soucet:=a+b;writeln('soucet je ',soucet);writeln(a,'+',b,'=',soucet);readln
end.
deklarační část
příkazová část
poznámka
hlavička
![Page 23: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/23.jpg)
23
Podmíněné příkazy
• Umožňují větvení programu, řízení se předává na základě platnosti podmínky
• Program se rozhoduje, kterou cestou se vydá• Příkaz IF - dvě alternativy• Příkaz CASE - dvě a více alternativ• Rozdělení příkazu IF
- úplný podmíněný příkaz IF- neúplný podmíněný příkaz IF
![Page 24: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/24.jpg)
24
Podmíněný příkaz IF - úplný
• Syntaxe: if podmínka then příkaz1 else příkaz2;• Sémantika: vyhodnotí se podmínka. Pokud podmínka platí,
provede se příkaz1, jinak se provede příkaz2. Poté se pokračuje ve vykonávání dalších příkazů programu.
• Před slůvkem else nesmí být středník
Podmínka je logický výraz, který má hodnotu pravda nebo nepravda (true, false), je typu boolean.Pro tvorbu podmínky se užívají relační operátory = > < >= <= <> a kulaté závorkyPodmínka může být jednoduchá nebo složená pomocí logických spojek and, or, not.
![Page 25: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/25.jpg)
25
Diagram úplného příkazu IF
podmínka
příkaz2 příkaz1
+-
if podmínka then příkaz1 else příkaz2;
![Page 26: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/26.jpg)
26
Podmíněný příkaz IF - neúplný
• Syntaxe: if podmínka then příkaz1;• Sémantika: vyhodnotí se podmínka. Pokud
podmínka platí, provede se příkaz1, jinak se pokračuje ve vykonávání dalších příkazů programu.
Pokud podmínka neplatí, neprovede tento příkaz nic, program pokračuje zpracováním dalších příkazů. Pokud tedy podmínka neplatí, není to důvod pro havárii programu.
![Page 27: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/27.jpg)
27
Diagram neúplného příkazu IF
podmínka
příkaz1
+-
if podmínka then příkaz1;
![Page 28: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/28.jpg)
28
Maximum ze dvou čísel
(* Maximum ze dvou celých čísel *)program p14;var a,b:integer;begin
write('Zadej dve cisla: ');readln(a,b);if a>b then writeln(a)
else writeln(b);readln;
end.
![Page 29: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/29.jpg)
29
Je číslo kladné, záporné nebo nula?
(* je číslo kladné, záporné nebo nula? *)program stav;var n:integer;begin
write('Zadej cislo: ');readln(n);if n>0
then writeln('je kladne') else if n=0 then writeln('je nula')
else writeln('je zaporne');readln
end.
Složený podmíněný příkaz - podmínka v podmínce.
![Page 30: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/30.jpg)
30
Je číslo kladné, záporné nebo nula?
(* je číslo kladné, záporné nebo nula? *)program stav;var n:integer;begin
write('Zadej cislo: ');readln(n);if n>0 then writeln('je kladne'); if n=0 then writeln('je nula');if n<0 then writeln('je zaporne');readln
end.
Tři neúplné podmíněné příkazys jednoduchými podmínkami.
stop
n >0
n =0
n <0
čti n
start
- +piš
je kladné
- +piš
je nula
- +piš
je záporné
![Page 31: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/31.jpg)
31
Příklady podmínek v příkazu IF• zjištění sudosti/lichosti celého čísla
if (n mod 2)=0 then …sudé… else …lichéif (n mod 2)=1 then …liché… else … sudéif odd(n) then …liché… else … sudé
• zjištění dvojciferného čísla (n je 1. kladné, 2. obecné) - if (n>9) and (n<100) then…- if ((n>9) and (n<100))or ((n<-9)and (n>-100)) then… což lze zapsat jednodušeji- if (abs(n)>9)and (abs(n)<100) then…
• zjištění velkého písmene anglické abecedy - if (ch>='A') and (ch<='Z') then…
![Page 32: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/32.jpg)
32
Příkaz CASE• Syntaxe příkazu case:
case proměnná of konstanta1: příkaz1; konstanta2: příkaz2; …… konstantan: příkazn else příkaz end;
• Sémantika příkazu case: Vyhodnocují podmínky proměnná=konstanta1, proměnná=konstanta2..... Provede se příkaz za první podmínkou, která platila. Pokud ani jedna podmínka nebyla splněna, provede se příkaz na konci za slůvkem else.
• Část else je ale nepovinná (máme úplný a neúplný příkaz CASE)• Příkaz CASE vždy končí klíčovým slovem END!!
vícenásobné větvení
![Page 33: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/33.jpg)
33
Poznámky k příkazu CASE
• hodnoty, podle kterých se uvnitř příkazu rozhoduje, bývají konstanty stejného datového typu jako řídící proměnná
• tuto hodnotu může tvořit i více údajů- seznam: hodnoty oddělené čárkou (1,2,3)- interval: dolní a horní mez oddělená znaky .. (1..5)
• pokud potřebujeme provést v jedné větvi více příkazů, je odpovídající příkaz složený a musí se proto použít závorky begin end.
![Page 34: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/34.jpg)
34
Diagram úplného příkazu CASE
příkaz 1 příkaz 2 příkaz n
příkaz+
-
![Page 35: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/35.jpg)
35
Pozdrav podle zadaných hodinprogram p24;var h:integer; begin writeln('Zadej cas'); readln(h); case h of 1..7: writeln('Dobre rano'); 8..11:writeln('Dobre dopoledne'); 12: writeln('Dobre poledne'); 13..18: writeln('Dobre odpoledne'); 19..24: writeln('Dobry vecer') else writeln('Byl zadan neplatny udaj!') end; readln;end.
šestinásobné větvení
![Page 36: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/36.jpg)
36
Random - generátor náhodných číselUmožňuje získat náhodné číslo typu word (0..65535).Minimum je vždy nula, maximum se zadá jako parametr.Před prvním použitím je nutné generátor inicializovat.• inicializace generátoru náhodných čísel
procedura Randomize;použití: pouze jednou na začátku programu
• získání náhodného čísla v daném rozsahufunkce Random(max) – vrátí číslo z intervalu <0,max-1>použití: lze volat víckrát- v přiřazovacím příkazu x:=Random(5); - přímo jako parametr writeln(Random(100));
![Page 37: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/37.jpg)
37
Random – příklady použití
• náhodná známka 1-5x:=random(5)+1;
• náhodné celé číslo 10-100x:=random(91)+10;
• náhodné kladné sudé číslo menší než 1000x:=random(500)*2;
• náhodné jednociferné číslo, tj. od -9 do 9x:=random(19)-9;
![Page 38: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/38.jpg)
38
Cykly• slouží k zachycení opakování příkazů• ve vývojovém diagramu se projeví zpětnou šipkou• příkazy, které se mají opakovat, tvoří tělo cyklu• ukončení cyklu řídí ukončovací podmínka• chybně napsaná podmínka může způsobit zacyklení
programu (cyklus nikdy nekončí)• typy cyklů:
repeat – until s podmínkou na konci podmíněnéwhile - do s podmínkou na začátkufor - to - do s pevným počtem opakování
![Page 39: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/39.jpg)
39
Cyklus RepeatSyntaxe: repeat příkaz until podmínka;repeat příkaz1;
příkaz2;…;příkazn
until podmínka;Sémantika:Opakuj příkazy tak dlouho,dokud nebude platit podmínka
Cyklus končí, když podmínka platí.Vykoná se vždy alespoň 1x.Tělo cyklu nemusí být ohraničeno závorkami begin..end.
tělo cyklu
podmínka
+
-
cyklus s podmínkou na konci
tělo cyklu
![Page 40: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/40.jpg)
40
Cyklus While
tělo cyklu
-
+
podmínka
-
Syntaxe:while podmínka do příkaz;while podmínka do begin příkaz1; příkaz2;
…..příkazn
end;Sémantika:Dokud platí podmínka, opakuj příkazy v těle cyklu.
Cyklus končí, když podmínka neplatí.Tělo cyklu musí být ohraničeno závorkami begin..end,pokud obsahuje více příkazů.Cyklus se nemusí provést ani 1x, pokud hned poprvé podmínka neplatí.
cyklus s podmínkou na začátku
tělo cyklu
![Page 41: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/41.jpg)
41
Cyklus ForSyntaxe:for proměnná:=dolní mez to horní mez do příkaz;for proměnná:=dolní mez to horní mez do begin příkaz1; příkaz2;
….. příkazn
end;Sémantika:Chod cyklu zajišťuje řídící proměnná cyklu, počítadlo. Počítadlo musí být ordinálního typu (nejčastěji integer). Při vstupu do cyklu je řídící proměnná nastavena na hodnotu dolní mez. Při každém průchodu tělem cyklu se automaticky zvyšuje o jedničku (následná hodnota). Cyklus končí, když řídící proměnná dosáhne hodnoty horní mez.
cyklus s pevným počtem opakování
I=1,N
tělo cykl
utělo cyklu
![Page 42: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/42.jpg)
42
Cyklus for• pro počítadlo cyklu se používá proměnná i (integer, ne real) • nejčastější použití:
for i:=1 to 10 do …. nebo for i:=1 to n do ….• počet opakování: horní mez - dolní mez +1.
je-li dolní mez=horní mez, opakuje se 1xje-li dolní mez>horní mez, cyklus se neprovede vůbec
• cyklus for se nikdy nezacyklí, je nejbezpečnější• hodnotu počítadla nelze uvnitř cyklu měnit, tuto proměnnou ale lze
používat (pro výpočet, výpis atd.)• cyklus for existuje i ve zpětné verzi, kdy řídící proměnná
automaticky klesá o jedničku (na předchůdce)syntaxe:for proměnná:=horní mez downto dolní mez do příkaz;
![Page 43: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/43.jpg)
43
Vytiskněte čísla 1,2,3…n - while
program while1;var i,n:integer;begin i:=0; readln(n); while i<n do begin i:=i+1; writeln(i) end; end.
START
i:=0
ČTI n
PIŠ i
STOP
i<n
-
+
i:=i+1
• vynuluj počítadlo i • přečti číslo n (horní mez, počet čísel)• dokud platí podmínka i<n opakuj - zvyš i o jedničku - vytiskni i
![Page 44: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/44.jpg)
44
Vytiskněte čísla 1,2,3…n - repeatprogram repeat1;var i,n:integer;begin i:=0; readln(n); repeat i:=i+1; writeln(i) until i=n;end.
STOP
START
i:=0
ČTI n
i=n
-
+
i:=i+1
PIŠ i
• vynuluj počítadlo i • přečti číslo n (horní mez, počet čísel)• opakuj - zvyš i o jedničku - vytiskni i tak dlouho, až bude platit podmínka i=n
![Page 45: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/45.jpg)
45
Vytiskněte čísla 1,2,3…n - for
program for1;var i,n:integer;begin readln(n); for i:=1 to n do writeln(i) end.
• přečti číslo n (horní mez, počet čísel)• pro hodnoty počítadla i od 1 do n opakuj - vytiskni i (počítadlo i se automaticky zvyšuje o jedničku)
![Page 46: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/46.jpg)
46
Zpracování posloupnosti čísel
• klasický programátorský úkol, použití cyklu• typy:
- známe počet čísel (10,n) - cyklus for, (repeat, while)- neznáme počet čísel - repeat, while (for nelze použít!)
• tvorba programu- inicializace proměnných, počáteční nastavení, kde je třeba (vynulování)- zapsání příkazů do těla cyklu- určení ukončovaní podmínky, je-li třeba (repeat, while)- po ukončení cyklu obvykle výpis výsledků, které lze získat až po zpracování všech čísel (např. výpočet průměru)
![Page 47: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/47.jpg)
47
Zpracování n čísel
STOP
START
i:=0
ČTI n
i=n
-
+
i:=i+1
Čti a
soucet:=0
soucet:=soucet+a
prumer:=soucet/n
Piš prumer
inicializace
zpracuj číslo je
konec?
čti číslo
spočítej a vypiš
výsledek
program cislafor;var a,i,n,soucet:integer; prumer:real;begin i:=0; readln(n); soucet:=0; for i:=1 to n do begin readln(a); soucet:=soucet+a end; prumer:=soucet/n; writeln(prumer:8:2) end.(* ukázka cyklu repeat *)repeat i:=i+1; readln(a); soucet:=soucet+auntil i=n;
![Page 48: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/48.jpg)
48
Chyby v programu• syntaktické chyby - syntax errors
odhalí překladač, zaobrazí jako červený proužek,jsou to prohřešky vůči syntaxi, tj. např. chybějící středník, překlep, chybějící klíčové slovo
• logické chyby - logic errorsprogram lze spustit, ale dává špatné výsledky, je třeba zkontrolovat algoritmus nebo použí prostředky ladění (debugging)
• chyby běhu - run time errorsprogram se zhroutí z důvodu špatného vstupu dat, např. zadáte místo čísla písmeno, není nalezen vstupní soubor atd.
![Page 49: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/49.jpg)
49
Jednotka CRT (unit)
• slouží k ovládání obrazovky a klávesnicev textovém režimu, umožňuje pracovat se zvuky, barvami, umí mazat obrazovku…
• její identifikátor je třeba uvést v programu v seznamu užívaných jednotek (za uses)
• na obrazovce lze definovat textová okna (window) • nabízené prostředky:
- globální proměnné- podprogramy: procedury a funkce
![Page 50: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/50.jpg)
50
Základní informace• pracujete vždy v textovém módu, který určuje rozlišení
obrazovky. To je dáno počtem textových pozic ve směru vodorovném a kolmém.
• jeden mód je výchozí, implicitní, nemusíte ho tedy nastavovat. Od Windows2000 výše je to 80 sloupců a 50 řádků, u starších verzí 80 sloupců a 25 řádků.
• počátek souřadnic (bod [1,1]) je v levém horním rohu obrazovky,osa x je vodorovná, osa y kolmá.
• pokud potřebujete pracovat v jiném rozlišení, musíte zavolat proceduru TextMode s příslušným parametrem.
• Tabulka konstant pro nastavení textového módu: 0:BW40 40x25 B/W 1: CO40 40x25 Color 2:BW80 80x25 B/W 3: CO80 80x25 Color256:Font8x8 80x50 EGA/VGA (módy B/W jsou černobílé)
![Page 51: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/51.jpg)
51
Globální proměnné
• můžete využívat ve svém programu- LastMode předchozí textový mód- TextAttr atributy textu: barva textu a pozadí- WindMin souřadnice aktuálního okna, levý- WindMax horní a pravý dolní roh
![Page 52: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/52.jpg)
52
Práce s barvami a mazání
• barvy se označují čísly 0-15 nebo konstantami (black, blue, green, cyan, red, magenta, brown, lightgray, darkgray, lightblue, lightgreen, lightcyan, lightred, lightmagenta, yellow, white)
• barvy vyšších čísel než 15 blikají (konstanta Blink)• TextColor barva textu (0-15)• TextBackground barva pozadí (0-7)• ClrScr smaže obrazovku (okno) danou barvou pozadí• ClrEol smaže řádek od kurzoru do konce• DelLine smaže celý řádek obsahující kurzor
![Page 53: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/53.jpg)
53
Práce s kurzorem
• Gotoxy nastaví kurzor na danou pozici• Wherex vrací x-ovou souřadnici pozice kurzoru• Wherey vrací y-ovou souřadnici pozice kurzoru• Př.
TextBackground(cyan); ClrScr; Gotoxy(40,25); TextColor(blue); writeln(‘ahoj‘); Gotoxy(40,Wherey+5); writeln(‘hi‘);for i:=1 to 10 do begin Gotoxy(i,8); writeln (‘*‘); end;
![Page 54: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/54.jpg)
54
Čtení znaku• ReadKey vrací přečtený znak, ale nezobrazuje
ho lze použít i pro čtení řídících znaků jako je Escape, Enter nebo kurzorové šipky, na jeho Ascii kód se lze tázat pomocí operátoru # (ch=#13)
• KeyPressed vrací hodnotu true, pravda, byla-li stisknuta libovolná klávesa; jinak vrací hodnotu false, nepravda lze použít v příkazu If nebo v ukončovací podmínce cyklu While nebo Repeat
• Př. repeat writeln('ahoj') until KeyPressed; ch:=ReadKey; if ch=#27 then writeln('bylo stisknuto Escape');
![Page 55: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/55.jpg)
55
Přehled důležitých kódů znaků
• Znak mřížka má Alt kód 35• Enter #13, Esc #27, Mezerník #32• Backspace #8, Tabulátor #9, Delete #083• šipky nahoru, vlevo, vpravo, dolů
#072, #075, #077, #080• Home #071 End #079• F1 #059, F2 #060, F3 #061…
![Page 56: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/56.jpg)
56
Další podprogramy
• Delay čeká daný počet milisekund• Sound zapne speaker na dané frekvenci,
slyšitelné jsou zvuky od 50 do 15000 Hz, frekvence not je pevně daná (C1=256Hz, C2=512Hz, komorní A=440Hz)
• NoSound vypne speaker• Window vytvoří nové textové okno
okno je zadané pozicemi protilehlých rohů souřadnice v okně jsou relativní, udávají se vzhledem k levému hornímu rohu (bod [1,1])
![Page 57: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/57.jpg)
57
Příklad
Program crtdemo;uses crt;begin Randomize; Window(10,5,70,20); TextBackground(blue); ClrScr; repeat TextColor(random(16);
write('ahoj '); delay(500); if KeyPressed then ch:=ReadKey
until ch=#27;end.
Program vypisuje v okně po půlvteřině pozdrav, pokaždé náhodnou barvou, končí jen stiskem klávesy Escape.
![Page 58: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/58.jpg)
58
Strukturované datové typy
jedná se o složitější struktury, popisují více hodnot, sdružují řadu jednoduchých datových typů• pole array položky stejného typu• řetězec string text, pole znaků• záznam record položky různých typů• soubor file část diskového prostoru s daty• textový soubor text posloupnost znaků členěná do řádků (eoln) zakončená znakem konec souboru (eof)
![Page 59: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/59.jpg)
59
Pole array
Sdružuje více položek stejného typu, je to řada hodnot popsaná jedním identifikátorem, jedním názvem• jednorozměrné pole je vektor• vícerozměrné pole je matice• základní vlastnosti pole: - pevně daný počet prvků pole - všechny prvky pole jsou stejného datového typu - prvky pole mají označení, tzv. index
![Page 60: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/60.jpg)
60
Jednorozměrné pole• deklarace:var identifikátor pole:array[rozsah indexů]of typvar a:array[1..10]of integer; pole 10 čísel b: array[1..5]of char; pole 5 znaků• k prvku pole se přistupuje pomocí indexu a hranatých závorek, např. a[1], b[3], a[i]program pole; (* načte 20 čísel, vypíše pozpátku *)var a:array[1..20] of real; i:integer; begin for i:=1 to 20 do readln(a[i]); for i:=20 downto 1 do writeln(a[i]);end.Naplnění pole náhod. čísly 1-10: for i:=1 to 20 do a[i]:=random(10)+1;
![Page 61: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/61.jpg)
61
Dvourozměrné pole• deklarace:var identifikátor pole:array[rozsah indexů]of typvar a:array[1..10,1..10]of integer; pole 10x10 čísel b: array[1..5,1..20]of char; pole 5x20 znaků• přístup k prvku pole pomocí dvou indexů a hranatých závorek, např. a[1,1], b[3,1], a[i,j]program pole2; (* načte matici čísel 10x10 *)var a:array[1..10,1..10] of real; i,j:integer; begin for i:=1 to 10 do for j:=1 to 10 do readln(a[i,j]);end.
![Page 62: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/62.jpg)
62
String, řetězec• Jedná se o pole znaků dvojího typu - s udáním délky s:string[10] znamená 10 znaků
- bez udání délky (max. 255 znaků) s:string, nultá pozice s[0] obsahuje aktuální délku stringu s, stejnou hodnotu vrací funkce length
• s lze načíst, vypsat jediným příkazem readln(s), writeln(s)• přístup k položkám je stejný jako u obecného pole• jm:='Jan'; -> jm[1]='J', jm[2]='a', jm[3]='n' • stringy lze řetězit (spojovat za sebe) pomocí operátoru +
'Jan'+'Vlk'= 'JanVlk', 'Jan'+' '+'Vlk'= 'Jan Vlk'
![Page 63: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/63.jpg)
63
Podprogramy pro práci se stringy• concat spojení stringů (jako +);• copy kopie daného počtu znaků od dané pozice• delete smazání daného počtu znaků od dané pozice• insert vložení textu na danou pozici• pos vyhledání pozice podstringu (písmena)• upcasepřevod znaku na velká písmenaPříklady: nechť je s:='Jan Vlk';jm:=concat(s,' Kozina'); jm= 'Jan Vlk Kozina';x:=copy(s,5,3); x='Vlk'delete(jm,1,4); jm= 'Vlk Kozina'insert('Pavel ',x,1) X= 'Pavel Vlk'i:=pos('a',s) i=2
![Page 64: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/64.jpg)
64
Záznam recordJe pevně dán seznam jeho položekpoložky záznamu mohou být různého typuk položkám se přistupuje přes tečku a jméno• deklarace:
var jm: record pol1:typ1; pol2:typ2; poln:typn end;
var osoba: record jmeno:string; roknar:integer; bmi:real end; ……readln(osoba.jmeno); osoba.roknar:=1989;readln(vaha,vyska);osoba.bmi:=vaha/(vyska*vyska);writeln(osoba.jmeno, osoba.roknar,osoba.bmi);
![Page 65: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/65.jpg)
65
Konverze
často potřebujeme převést text na číslo a opačně,proto jsou k dispozici obecné konverzní prostředky:• val převede text na číslo, detekuje chybu
používá se u kontroly vstupům,3. parametr je pozice chyby (0=vše
OK)val(vstupní string, výstupní číslo, pozice chyby)
• str převede číslo na textstr(vstupnbí číslo, výstupní string)
![Page 66: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/66.jpg)
66
Příklad
• Program umožní vstup pouze čísel 1,2,3, všechno ostatní ignoruje, ale nespadne ani při zadání písmene, zadané číslo pak vypíše a skončí.
program hlidac;var ch:char; x,i:integer;begin repeat writeln(‘zadej cislo1,2,3: ‘); readln(ch); val(ch,x,i) until (i=0)and((x=1)or(x=2)or(x=3)); writeln(‘zadal jsi ‘,x); readln;
end.
![Page 67: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/67.jpg)
67
Soubor file
Soubor je část diskového prostoru s daty.Je jednoznačně určen názvem a přístupovou cestou.Rozdělení:- podle řídících znaků• textové soubory• netextové soubory typové a netypové- podle druhu práce• ke čtení• pro zápis• ke čtení i k zápisu
![Page 68: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/68.jpg)
68
Práce se souborem
• otevření souboru operační systém pak umožní další práci s obsahem souboru podle jeho typu:- soubor otevřený pro čtení umožňuje získávání dat. - soubor otevřený pro zápis umožní uložení dat.- zoubor otevřený pro obě činnosti umožňuje data získávat i ukládat.
• deklarace souborůvar jmeno:file of typ
var db:file of char; zn:file of integer; bmi:file of real; jmena:text;
![Page 69: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/69.jpg)
69
Práce se souborem
• propojení skutečného názvu s identifikátoremassign(identifikátor, jméno souboru na disku)musí opředcházet před dalším použitím souboru
• otevření souboru- pro čtení reset(identifikátor)- pro zápis rewrite(identifikátor)- pro zápis na konec, pro přidávání (jen u textových souborů append(identifikátor)
• uzavření souboru close(identifikátor)• čtení ze souboru read(identifikátor, proměnné)• psaní do souboru write(identifikátor, proměnné)
![Page 70: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/70.jpg)
70
Textový soubor text
• je organizován do řádků, konec řádku je ukončen znakem #13 (enter), detekce funkcí eoln (true na konci řásku)
• na konci je znak konce souboru #26, detekce funkcí eof (true na konci souboru)
• příklad: kopie obsahu souboru data.txt po řádcích na obrazovkuprogram kopie;var f:text; s:string;begin assign(f,3‘data.txt‘); reset(f); repeat readln(f,s); writeln(s) until eof(f); close(f);end.
![Page 71: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/71.jpg)
71
Podprogram
Podprogram je pojmenovaná posloupnost příkazů,která řeší ucelenou dílčí úlohu.Rozdělení:• procedury• funkce – navíc vrací výslednou hodnotuKaždý podprogram musí být deklarování.Použití podprogramu říkáme volání podprogramu.
![Page 72: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/72.jpg)
72
Příklady
program pokus1;var a,b:integer;procedure cara;begin writeln(‘-----------‘)end;begin readln(a,b);
cara; writeln(‘soucet je:‘,a+b); cara
end.
program pokus2;var x:integer;procedure vynech(n:integer);var i:integer;begin for i:=1 to n do writelnend;begin readln(x);writeln( ‘ahoj‘) vynech(x); writeln( ‘konec‘) end.
![Page 73: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/73.jpg)
73
Parametry a proměnné
• parametry se uvádí za identifikátorem, ovlivňují chování podprogramu, představují vstupní nebo výstupní hodnoty
• volání parametrů:- hodnotou: vstupní parametr- odkazem: výstupní, použije se slůvko var
• proměnné lze dělit na- lokální, místní (v deklaraci procedury) jsou použitelné pouze v místě deklarace- globální (v deklaraci hlavního programu), jsou použitelné v celém programu i ve všech podprogramech
![Page 74: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/74.jpg)
74
Příklady
program soucet1;var x,y,z:integer;procedure soucet (a,b:integer; var c:integer);begin c:=a+bend;begin write('zadej dve cisla '); readln(x,y); soucet(x,y,z); write( ' soucet je ' ‚z);end.
parametry program soucet2;var x,y:integer;function soucet(a,b:integer):integer;begin soucet:=a+bend;begin write('zadej dve cisla '); readln(x,y); write( ' soucet je ' ‚soucet(x,y));end.
parametry
![Page 75: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/75.jpg)
75
GrafikaGrafika umožňuje ovládat jednotlivé pixely. Počátek souřadného systému je v levém horním rohu, standardní rozlišení je 640x480 pixelů.Pro práci v grafickém režimu je nutné ho inicializovat. Automaticky se smaže celá obrazovka. Celočíselné proměnné gd, gm (driver a mód) musíte uvést v deklaraci. Pro spuštění potřebuje některé soubory, zejména graph.tpu a egavga.bgi (na disku f: nebo na sdíleném disku).Pro výpis hodnot nelze použít write, writeln, k dispozici je speciální procedura outtextxy(x,y,text), která vypíše textovou informaci na dané souřadnice.Inicializace:gd:=detect; InitGraph(gd,gm,cesta k driverům);Ukončení práce v grafice:CloseGraph;Automaticky se při návratu do textového módu smaže obrazovka.
![Page 76: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/76.jpg)
76
Základní tvary• bod putpixel(x,y,color)• úsečka line(x1,y1,x2,y2)• obdélník rectangle(x1,y1,x2,y2)• kruh circle(x1,y1,radius)• oblouk arc(x,y,u1,u2,radius)• elipsa ellipse(x,y,u1,u2,a,b)Nastavení čáry• SetLineStyle(styl,vzorek,šířka)Nastavení barev• pera setcolor(barva)• pozadí setbkcolor(barva)
![Page 77: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/77.jpg)
77
Vyplňování ploch
Lze nastavit barvu i vzorek 0-11 (nebo vlastní)• SetFillStyle(vzorek, barva)• SetFillPattern nastaví vlastní vzorek• Pieslice(x,y,u1,u2,r) vyplněný oblouk• Bar (x1,y1,x2,y2) vyplněný obdélník• Bar3D(x1,y1,x2,y2,n,topon) vyplněný obdélník 3D, n je
zkreslení, topon/topof udává viditelnost horní stěny• FloodFill(x,y,color) vyplní obecně plochu určenou
bodem (x,y) až po hranici barvy color • FillPoly vyplní plochu danou body
![Page 78: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/78.jpg)
78
Práce s textem
Fonty jsou uloženy v souborech typu .chrnelze použít write, writeln• OutTextxy(x,y,text) výstup textu na souřadnice• x:=GetMaxx, y:=GetMaxy aktuální rozměry obrazovky• x:=Getx; y:=Gety aktuální pozice pera• SetTextStyle(font,směr,velikost) aktuální font, směr písma (0=horizdir,1=vertdir) a velikost. Fonty lze zadat číselně nebo identifikátory, TriplexFont = 1; SmallFont = 2; SansSerifFont = 3; GothicFont = 4 • SetTextJustify(hor,vert) zarovnání horiz. i vertikálně (0-2)Pro čtení se používá funkce ReadKey (čte 1 znak)
![Page 79: Programování v Pascalu](https://reader036.vdocuments.pub/reader036/viewer/2022081502/5681472a550346895db461e7/html5/thumbnails/79.jpg)
79
Příklad
program grafika;uses graph,crt;var gd,gm,r:integer;begin gd:=detect; initgraph(gd,gm,'h:\BGI'); outtextxy(250,50,'Osm kruznic'); for i:=1 to 8 do begin setcolor(i); circle(320,240,i*20) end; readkey; closegraph;end.