Programovn v Pascalu pro zatenky 1 Algoritmus program

  • Slides: 79
Download presentation
Programování v Pascalu pro začátečníky 1

Programování v Pascalu pro začátečníky 1

Algoritmus, program • algoritmus je přesný postup řešení problému jeho vlastnosti jsou: - jednoznačnost,

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 • 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 2

Programovací jazyky Rozdělení: • vyšší programovací jazyky (Pascal, Fortran, Delphi) nezávislé na typu procesoru

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 3

Programování • strukturované (Pascal) redukce problému na podproblémy základ tvoří příkazy, akce • objektové

Programování • strukturované (Pascal) redukce problému na podproblémy základ tvoří příkazy, akce • objektové (Delphi) reakce na události základ tvoří data, objekty • funkcionální (Lisp) matematický popis funkcí, abstrakce 4

Základní informace • zdrojový kód je posloupnost příkazů daného programovacího jazyka (. PAS) •

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) 5

Z Příklad : A = 15 B=8 A>B Vypiš A+B K J. S. A.

Z Příklad : A = 15 B=8 A>B Vypiš A+B K J. S. A. (assembler 8086) 10101111 00100101 00010010 10100000 10111000 START: MOV B, 15 MOV 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 A 0 B 8 zdrojový kód v jazyce Pascal: Překlad do strojového kódu (8086) A: =15: B: =8 IF A > B THEN BEGIN X: =A+B; WRITE(X); END; 6

Syntax a sémantika Pojmy: • syntax - pravidla tvorby příkazů, vět jazyka (gramatika) •

Syntax a sémantika Pojmy: • 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? 7

Úvod k Pascalu • autorem je Švýcar Niclaus Wirth • Pascal učí metody strukturovaného

Ú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 8

Prvky Pascalu • množina symbolů, abeceda: anglická abeceda, číslice zvláštní symboly : + -

Prvky Pascalu • množina symbolů, abeceda: anglická abeceda, číslice zvláš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 9

Proměnná (variable) Proměnná je • objekt (pro uložení dat), jeho hodnota se mění •

Proměnná (variable) Proměnná je • objekt (pro uložení dat), jeho hodnota se mění • pojmenovaný úsek operační paměti Kaž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. 10

Konstanta (constant) Konstanta je také • objekt, úsek operační paměti Má přiděleno • jméno,

Konstanta (constant) Konstanta je také • objekt, úsek operační paměti Má 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. . . 11

Základní datové typy Rozdělení: • ordinální: integer, char, boolean • neordinální: real Ordinální typy

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. 12

Integer - celé číslo Datový typ integer nabízí operace • + - * -

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í hodnota Příklady: rozdil: =x-y; obvod: =2*(a+b); klad: =abs(a); stovky: =cislo div 100; zb: =x mod y; 13

Real - reálné číslo Datový typ real nabízí operace • + - * /

Real - reálné číslo Datový typ real nabízí operace • + - * / sčítání, odečítání, násobení, dělení • 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 14

Boolean - logická hodnota Datový typ boolean obsahuje pouze hodnoty true, false, tj. pravda,

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 negace Příklady: nalezeno: =false; ok: =p and q; opak: =not ok; konec: =(i=10)or(n>100); 15

Char - znak Datový typ char nabízí operace • succ následovník znaku • pred

Char - znak Datový typ char nabízí operace • succ následovník znaku • pred předchůdce znaku • ordinální hodnota znaku, ASCII kód • chr znak s daným ASCII kódem Příklady: kod: =ord(ch); p: =pred(ch); znak: =chr(kod+3); 16

Stavba programu obecně program název programu; label seznam návěští; uses seznam používaných knihoven; const

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 hlavička deklarační část příkazová část 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 { }. 17

Hlavička a deklarační část • program Název programu; - název splňuje konvence DOSu, bez

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

Příkazy • jednoduchý příkaz přiřazení, příkazy vstupu a výstupu • složený příkaz • větvení,

Příkazy • jednoduchý příkaz př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 19

Jednoduché příkazy • přiřazovací příkaz : = syntaxe: proměnná: =výraz sémantika: vyhodnotí se výraz

Jednoduché příkazy • přiřazovací příkaz : = syntaxe: proměnná: =výraz sé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 20

Složený příkaz • • • je to sekvence, posloupnost příkazů začíná klíčovým slovem begin

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ík Středník ; je v Pascalu oddělovač příkazů. 21

Jednoduchý program (* Součet dvou daných celých čísel *) poznámka program soucet; var a,

Jednoduchý program (* Součet dvou daných celých čísel *) poznámka 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. hlavička deklarační část příkazová část 22

Podmíněné příkazy • Umožňují větvení programu, řízení se předává na základě platnosti podmínky •

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 23

Podmíněný příkaz IF - úplný • Syntaxe: if podmínka then příkaz 1 else příkaz

Podmíněný příkaz IF - úplný • Syntaxe: if podmínka then příkaz 1 else příkaz 2; • Sémantika: vyhodnotí se podmínka. Pokud podmínka platí, provede se příkaz 1, jinak se provede příkaz 2. 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ávorky Podmínka může být jednoduchá nebo složená pomocí logických spojek and, or, not. 24

Diagram úplného příkazu IF if podmínka then příkaz 1 else příkaz 2; příkaz 2

Diagram úplného příkazu IF if podmínka then příkaz 1 else příkaz 2; příkaz 2 podmínka + příkaz 1 25

Podmíněný příkaz IF - neúplný • Syntaxe: if podmínka then příkaz 1; • Sémantika:

Podmíněný příkaz IF - neúplný • Syntaxe: if podmínka then příkaz 1; • Sémantika: vyhodnotí se podmínka. Pokud podmínka platí, provede se příkaz 1, 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. 26

Diagram neúplného příkazu IF if podmínka then příkaz 1; - podmínka + příkaz 1

Diagram neúplného příkazu IF if podmínka then příkaz 1; - podmínka + příkaz 1 27

Maximum ze dvou čísel (* Maximum ze dvou celých čísel *) program p 14;

Maximum ze dvou čísel (* Maximum ze dvou celých čísel *) program p 14; var a, b: integer; begin write('Zadej dve cisla: '); readln(a, b); if a>b then writeln(a) else writeln(b); readln; end. 28

Je číslo kladné, záporné nebo nula? (* je číslo kladné, záporné nebo nula? *)

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. 29

Je číslo kladné, záporné nebo nula? start čti n (* je číslo kladné, záporné

Je číslo kladné, záporné nebo nula? start čti n (* 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říkazy s jednoduchými podmínkami. - n >0 + piš je kladné - n =0 + piš je nula - n <0 + piš je záporné stop 30

Příklady podmínek v příkazu IF • zjištění sudosti/lichosti celého čísla if (n mod 2)=0

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… 31

Příkaz CASE • Syntaxe příkazu case: case proměnná of konstanta 1: příkaz 1; konstanta

Příkaz CASE • Syntaxe příkazu case: case proměnná of konstanta 1: příkaz 1; konstanta 2: příkaz 2; …… konstantan: příkazn else příkaz end; • Sémantika příkazu case: vícenásobné větvení Vyhodnocují podmínky proměnná=konstanta 1, proměnná=konstanta 2. . . 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!! 32

Poznámky k příkazu CASE • hodnoty, podle kterých se uvnitř příkazu rozhoduje, bývají konstanty

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. 33

Diagram úplného příkazu CASE + příkaz 1 příkaz 2 příkaz n 34

Diagram úplného příkazu CASE + příkaz 1 příkaz 2 příkaz n 34

Pozdrav podle zadaných hodin program p 24; var h: integer; begin writeln('Zadej cas'); readln(h);

Pozdrav podle zadaných hodin program p 24; 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í 35

Random - generátor náhodných čísel Umožňuje získat náhodné číslo typu word (0. . 65535).

Random - generátor náhodných čísel Umožň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 rozsahu funkce 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)); 36

Random – příklady použití • náhodná známka 1 -5 x: =random(5)+1; • náhodné celé

Random – příklady použití • náhodná známka 1 -5 x: =random(5)+1; • náhodné celé číslo 10 -100 x: =random(91)+10; • náhodné kladné sudé číslo menší než 1000 x: =random(500)*2; • náhodné jednociferné číslo, tj. od -9 do 9 x: =random(19)-9; 37

Cykly • • • slouží k zachycení opakování příkazů ve vývojovém diagramu se projeví

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čátku for - to - do s pevným počtem opakování 38

Cyklus Repeat Syntaxe: repeat příkaz until podmínka; repeat příkaz 1; příkaz 2; tělo cyklu

Cyklus Repeat Syntaxe: repeat příkaz until podmínka; repeat příkaz 1; příkaz 2; tělo cyklu …; příkazn until podmínka; Sémantika: Opakuj příkazy tak dlouho, dokud nebude platit podmínka cyklus s podmínkou na konci tělo cyklu - podmínka + Cyklus končí, když podmínka platí. Vykoná se vždy alespoň 1 x. Tělo cyklu nemusí být ohraničeno závorkami begin. . end. 39

Cyklus While cyklus s podmínkou na začátku Syntaxe: while podmínka do příkaz; while podmínka

Cyklus While cyklus s podmínkou na začátku Syntaxe: while podmínka do příkaz; while podmínka do podmínka begin příkaz 1; příkaz 2; tělo cyklu + …. . příkazn end; Sémantika: Dokud platí podmínka, opakuj příkazy v těle cyklu. - - tělo 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ů. 40 Cyklus se nemusí provést ani 1 x, pokud hned poprvé podmínka neplatí.

Cyklus For cyklus s pevným počtem opakování Syntaxe: for proměnná: =dolní mez to horní

Cyklus For cyklus s pevným počtem opakování Syntaxe: for proměnná: =dolní mez to horní mez do příkaz; for proměnná: =dolní mez to horní mez do begin příkaz 1; tělo cykl příkaz 2; tělo cyklu u …. . I=1, N 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). 41 Cyklus končí, když řídící proměnná dosáhne hodnoty horní mez.

Cyklus for • pro počítadlo cyklu se používá proměnná i (integer, ne real) •

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 1 x je-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; 42

Vytiskněte čísla 1, 2, 3…n - while START i: =0 ČTI n i<n +

Vytiskněte čísla 1, 2, 3…n - while START i: =0 ČTI n i<n + program while 1; var i, n: integer; begin i: =0; readln(n); while i<n do begin i: =i+1; writeln(i) end; end. 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 STOP PIŠ i 43

Vytiskněte čísla 1, 2, 3…n - repeat program repeat 1; var i, n: integer;

Vytiskněte čísla 1, 2, 3…n - repeat program repeat 1; var i, n: integer; begin i: =0; readln(n); repeat i: =i+1; writeln(i) until i=n; end. START i: =0 ČTI 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 + STOP 44

Vytiskněte čísla 1, 2, 3…n - for program for 1; var i, n: integer;

Vytiskněte čísla 1, 2, 3…n - for program for 1; 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) 45

Zpracování posloupnosti čísel • klasický programátorský úkol, použití cyklu • typy: - známe počet

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) 46

Zpracování n čísel i: =0 inicializace ČTI n soucet: =0 čti číslo i: =i+1

Zpracování n čísel i: =0 inicializace ČTI n soucet: =0 čti číslo i: =i+1 Čti a zpracuj číslo soucet: =soucet+a i=n je konec? + 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+a until i=n; START spočítej a vypiš výsledek prumer: =soucet/n Piš prumer STOP 47

Chyby v programu • syntaktické chyby - syntax errors odhalí překladač, zaobrazí jako červený

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 errors program 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 errors program se zhroutí z důvodu špatného vstupu dat, např. zadáte místo čísla písmeno, není nalezen vstupní soubor atd. 48

Jednotka CRT (unit) • slouží k ovládání obrazovky a klávesnice v textovém režimu, umožňuje

Jednotka CRT (unit) • slouží k ovládání obrazovky a klávesnice v 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 49

Základní informace • pracujete vždy v textovém módu, který určuje rozlišení obrazovky. To je

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 Windows 2000 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 Text. Mode s příslušným parametrem. • Tabulka konstant pro nastavení textového módu: 0: BW 40 40 x 25 B/W 1: CO 40 40 x 25 Color 2: BW 80 80 x 25 B/W 3: CO 80 80 x 25 Color 256: Font 8 x 8 80 x 50 EGA/VGA (módy B/W jsou černobílé)50

Globální proměnné • můžete využívat ve svém programu - Last. Mode předchozí textový mód

Globální proměnné • můžete využívat ve svém programu - Last. Mode předchozí textový mód - Text. Attr atributy textu: barva textu a pozadí - Wind. Min souřadnice aktuálního okna, levý - Wind. Max horní a pravý dolní roh 51

Práce s barvami a mazání • barvy se označují čísly 0 -15 nebo konstantami

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) • Text. Color barva textu (0 -15) • Text. Background barva pozadí (0 -7) • Clr. Scr smaže obrazovku (okno) danou barvou pozadí • Clr. Eol smaže řádek od kurzoru do konce • Del. Line smaže celý řádek obsahující kurzor 52

Práce s kurzorem • • Gotoxy nastaví kurzor na danou pozici Wherex vrací x-ovou

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ř. Text. Background(cyan); Clr. Scr; Gotoxy(40, 25); Text. Color(blue); writeln(‘ahoj‘); Gotoxy(40, Wherey+5); writeln(‘hi‘); for i: =1 to 10 do begin Gotoxy(i, 8); writeln (‘*‘); end; 53

Čtení znaku • Read. Key vrací přečtený znak, ale nezobrazuje ho lze použít i

Čtení znaku • Read. Key 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) • Key. Pressed 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 Key. Pressed; ch: =Read. Key; if ch=#27 then writeln('bylo stisknuto Escape'); 54

Přehled důležitých kódů znaků • • Znak mřížka má Alt kód 35 Enter #13,

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 • F 1 #059, F 2 #060, F 3 #061… 55

Další podprogramy • Delay • Sound čeká daný počet milisekund zapne speaker na dané

Další podprogramy • Delay • Sound čeká daný počet milisekund zapne speaker na dané frekvenci, slyšitelné jsou zvuky od 50 do 15000 Hz, frekvence not je pevně daná (C 1=256 Hz, C 2=512 Hz, komorní A=440 Hz) • No. Sound vypne speaker • Window vytvoří nové textové 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]) 56

Příklad Program vypisuje v okně po půlvteřině pozdrav, pokaždé náhodnou barvou, končí jen stiskem

Příklad Program vypisuje v okně po půlvteřině pozdrav, pokaždé náhodnou barvou, končí jen stiskem klávesy Escape. Program crtdemo; uses crt; begin Randomize; Window(10, 5, 70, 20); Text. Background(blue); Clr. Scr; repeat Text. Color(random(16); write('ahoj '); delay(500); if Key. Pressed then ch: =Read. Key until ch=#27; end. 57

Strukturované datové typy jedná se o složitější struktury, popisují více hodnot, sdružují řadu jednoduchých

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) 58

Pole array Sdružuje více položek stejného typu, je to řada hodnot popsaná jedním identifikátorem,

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 59

Jednorozměrné pole • deklarace: var identifikátor pole: array[rozsah indexů]of typ var a: array[1. .

Jednorozměrné pole • deklarace: var identifikátor pole: array[rozsah indexů]of typ var 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; 60

Dvourozměrné pole • deklarace: var identifikátor pole: array[rozsah indexů]of typ var a: array[1. .

Dvourozměrné pole • deklarace: var identifikátor pole: array[rozsah indexů]of typ var a: array[1. . 10, 1. . 10]of integer; pole 10 x 10 čísel b: array[1. . 5, 1. . 20]of char; pole 5 x 20 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 pole 2; (* načte matici čísel 10 x 10 *) 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. 61

String, řetězec • Jedná se o pole znaků dvojího typu - s udáním délky

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'= 'Jan. Vlk', 'Jan'+' '+'Vlk'= 'Jan Vlk' 62

Podprogramy pro práci se stringy • concat spojení stringů (jako +); • copy kopie

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) • upcase převod znaku na velká písmena Pří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 63

Záznam record Je pevně dán seznam jeho položek položky záznamu mohou být různého typu

Záznam record Je pevně dán seznam jeho položek položky záznamu mohou být různého typu k položkám se přistupuje přes tečku a jméno • deklarace: var osoba: record var jm: record jmeno: string; roknar: integer; pol 1: typ 1; bmi: real pol 2: typ 2; end; poln: typn …… end; readln(osoba. jmeno); osoba. roknar: =1989; readln(vaha, vyska); osoba. bmi: =vaha/(vyska*vyska); writeln(osoba. jmeno, osoba. roknar, osoba. bmi); 64

Konverze často potřebujeme převést text na číslo a opačně, proto jsou k dispozici obecné

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 text str(vstupnbí číslo, výstupní string) 65

Příklad • Program umožní vstup pouze čísel 1, 2, 3, všechno ostatní ignoruje, ale

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 cislo 1, 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. 66

Soubor file Soubor je část diskového prostoru s daty. Je jednoznačně určen názvem a

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 67

Práce se souborem • otevření souboru operační systém pak umožní další práci s obsahem

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 db: file of char; var jmeno: file of typ zn: file of integer; bmi: file of real; jmena: text; 68

Práce se souborem • propojení skutečného názvu s identifikátorem assign(identifikátor, jméno souboru na disku)

Práce se souborem • propojení skutečného názvu s identifikátorem assign(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é) 69

Textový soubor text • je organizován do řádků, konec řádku je ukončen znakem #13

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 obrazovku program 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. 70

Podprogram je pojmenovaná posloupnost příkazů, která řeší ucelenou dílčí úlohu. Rozdělení: • procedury •

Podprogram je pojmenovaná posloupnost příkazů, která řeší ucelenou dílčí úlohu. Rozdělení: • procedury • funkce – navíc vrací výslednou hodnotu Každý podprogram musí být deklarování. Použití podprogramu říkáme volání podprogramu. 71

Příklady program pokus 1; var a, b: integer; procedure cara; begin writeln(‘------‘) end; begin

Příklady program pokus 1; var a, b: integer; procedure cara; begin writeln(‘------‘) end; begin readln(a, b); cara; writeln(‘soucet je: ‘, a+b); cara end. program pokus 2; var x: integer; procedure vynech(n: integer); var i: integer; begin for i: =1 to n do writeln end; begin readln(x); writeln( ‘ahoj‘) vynech(x); writeln( ‘konec‘) end. 72

Parametry a proměnné • parametry se uvádí za identifikátorem, ovlivňují chování podprogramu, představují vstupní

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 73

Příklady parametry program soucet 1; var x, y, z: integer; procedure soucet (a, b:

Příklady parametry program soucet 1; var x, y, z: integer; procedure soucet (a, b: integer; var c: integer); begin c: =a+b end; begin write('zadej dve cisla '); readln(x, y); soucet(x, y, z); write( ' soucet je ' ‚z); end. parametry program soucet 2; var x, y: integer; function soucet(a, b: integer): integer; begin soucet: =a+b end; begin write('zadej dve cisla '); readln(x, y); write( ' soucet je ' ‚soucet(x, y)); end. 74

Grafika umožňuje ovládat jednotlivé pixely. Počátek souřadného systému je v levém horním rohu, standardní

Grafika umožňuje ovládat jednotlivé pixely. Počátek souřadného systému je v levém horním rohu, standardní rozlišení je 640 x 480 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; Init. Graph(gd, gm, cesta k driverům); Ukončení práce v grafice: Close. Graph; Automaticky se při návratu do textového módu smaže obrazovka. 75

Základní tvary • bod putpixel(x, y, color) • úsečka line(x 1, y 1, x

Základní tvary • bod putpixel(x, y, color) • úsečka line(x 1, y 1, x 2, y 2) • obdélník rectangle(x 1, y 1, x 2, y 2) • kruh circle(x 1, y 1, radius) • oblouk arc(x, y, u 1, u 2, radius) • elipsa ellipse(x, y, u 1, u 2, a, b) Nastavení čáry • Set. Line. Style(styl, vzorek, šířka) Nastavení barev • pera setcolor(barva) • pozadí setbkcolor(barva) 76

Vyplňování ploch Lze nastavit barvu i vzorek 0 -11 (nebo vlastní) • Set. Fill.

Vyplňování ploch Lze nastavit barvu i vzorek 0 -11 (nebo vlastní) • Set. Fill. Style(vzorek, barva) • Set. Fill. Pattern nastaví vlastní vzorek • Pieslice(x, y, u 1, u 2, r) vyplněný oblouk • Bar (x 1, y 1, x 2, y 2) vyplněný obdélník • Bar 3 D(x 1, y 1, x 2, y 2, n, topon) vyplněný obdélník 3 D, n je zkreslení, topon/topof udává viditelnost horní stěny • Flood. Fill(x, y, color) vyplní obecně plochu určenou bodem (x, y) až po hranici barvy color • Fill. Poly vyplní plochu danou body 77

Práce s textem Fonty jsou uloženy v souborech typu. chr nelze použít write, writeln

Práce s textem Fonty jsou uloženy v souborech typu. chr nelze použít write, writeln • Out. Textxy(x, y, text) výstup textu na souřadnice • x: =Get. Maxx, y: =Get. Maxy aktuální rozměry obrazovky • x: =Getx; y: =Gety aktuální pozice pera • Set. Text. Style(font, směr, velikost) aktuální font, směr písma (0=horizdir, 1=vertdir) a velikost. Fonty lze zadat číselně nebo identifikátory, Triplex. Font = 1; Small. Font = 2; Sans. Serif. Font = 3; Gothic. Font = 4 • Set. Text. Justify(hor, vert) zarovnání horiz. i vertikálně (0 -2) Pro čtení se používá funkce Read. Key (čte 1 znak) 78

Příklad program grafika; uses graph, crt; var gd, gm, r: integer; begin gd: =detect;

Příklad program grafika; uses graph, crt; var gd, gm, r: integer; begin gd: =detect; initgraph(gd, gm, 'h: BGI'); outtextxy(250, 'Osm kruznic'); for i: =1 to 8 do begin setcolor(i); circle(320, 240, i*20) end; readkey; closegraph; end. 79