790 likes | 987 Views
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
E N D
Programování v Pascalu pro začátečníky
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
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
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
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)
Z A = 15 B = 8 Příklad : 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 A0 B8 zdrojový kód v jazyce Pascal: A:=15: B:=8 IF A > B THEN BEGIN X:=A+B; WRITE(X); END; Překlad do strojového kódu (8086)
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?
Ú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
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
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.
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...
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.
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;
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
Boolean - logická hodnota Datový typ boolean obsahuje pouze hodnoty true, false, tj. pravda, nepravdaanabí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);
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ódem Příklady: kod:=ord(ch); p:=pred(ch);znak:=chr(kod+3);
Stavba programu obecně hlavička 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 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.
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
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
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ů.
Jednoduchý program poznámka (* 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. hlavička deklarační část příkazová část
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
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čujeve 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.
Diagram úplného příkazu IF if podmínka then příkaz1 else příkaz2; podmínka - + příkaz2 příkaz1
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čujeve 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.
Diagram neúplného příkazu IF if podmínka then příkaz1; podmínka - + příkaz1
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) elsewriteln(b); readln; end.
Je číslo kladné, záporné nebo nula? (*je číslo kladné,záporné nebo nula? *) program stav; varn:integer; begin write('Zadej cislo: '); readln(n); ifn>0 then writeln('je kladne') elseifn=0 then writeln('je nula') else writeln('je zaporne'); readln end. Složený podmíněný příkaz - podmínka v podmínce.
start čti n - - - + + + n >0 piš je kladné n =0 piš je nula n <0 piš je záporné stop Je číslo kladné, záporné nebo nula? (*je číslo kladné,záporné nebo nula? *) program stav; varn:integer; begin write('Zadej cislo: '); readln(n); ifn>0 then writeln('je kladne'); ifn=0 then writeln('je nula'); ifn<0 then writeln('je zaporne'); readln end. Tři neúplné podmíněné příkazy s jednoduchými podmínkami.
Příklady podmínek v příkazu IF • zjištění sudosti/lichosti celého číslaif (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…
Příkaz CASE vícenásobné větvení • Syntaxe příkazu case: case proměnná of konstanta1: příkaz1; konstanta2: příkaz2; ……konstantan: příkaznelse 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!!
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 beginend.
Diagram úplného příkazu CASE - + příkaz příkaz 1 příkaz 2 příkaz n
Pozdrav podle zadaných hodin program p24;var h:integer; beginwriteln('Zadej cas'); readln(h);case h of1..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í
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 číselprocedura 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));
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;
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í
tělo cyklu tělo cyklu - + podmínka Cyklus Repeat cyklus s podmínkou na konci Syntaxe: 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 - + - tělo cyklu podmínka Cyklus While cyklus s podmínkou na začátku Syntaxe: while podmínka dopří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í.
tělo cyklu I=1,N 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ří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. tělo cyklu
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;
START i:=0 ČTI n - i<n i:=i+1 + STOP PIŠ i 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. • 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
START i:=0 ČTI n i:=i+1 - i=n + STOP PIŠ i Vytisknětečísla 1,2,3…n - repeat program repeat1; var i,n:integer; begin i:=0; readln(n); repeat i:=i+1; writeln(i) until i=n; end. • 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
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)
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)
START i:=0 ČTI n Čti a Piš prumer Zpracování n čísel program cislafor; var a,i,n,soucet:integer; prumer:real; begin i:=0; readln(n); soucet:=0; for i:=1 to n dobegin 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; inicializace soucet:=0 čti číslo i:=i+1 zpracuj číslo soucet:=soucet+a je konec? - i=n + spočítej a vypiš výsledek prumer:=soucet/n STOP
Chyby v programu • syntaktické chyby - syntax errorsodhalí 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.
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
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é)