Programovací jazyk - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi) Odlišnosti implementace od normy - odchylky např.: nepovinná hlavička programu odlišná práce se soubory parametr for-cyklu, příkaz case - rozšíření např.: standardní procedury a funkce znakové řetězce (typ string) modularita (unity) objekty Syntaxe jazyka = pravidla zápisu korektních programů ( gramatika ) Sémantika jazyka = význam syntakticky správných konstrukcí, resp. programů ( co zápis znamená ) Pavel Töpfer, 2016 Programování 1-2 1
Struktura programu v Pascalu hlavička - v TP nepovinná program Soucet; deklarace tělo - popis a pojmenování všech prostředků používaných dále v programu proměnné, konstanty, typy, návěstí, procedury a funkce var A, B: integer; - zápis algoritmu (posloupnost příkazů) begin read(a); read(b); write(a+b) end. Hlavička, jednotlivé deklarace i příkazy se oddělují středníkem (znakem ; ). Klíčová slova (v tisku zpravidla tučně, v rukopisu podtržená) = speciální víceznakové symboly s vyhrazeným významem. Pavel Töpfer, 2016 Programování 1-2 2
Proměnná = paměťové místo pro uložení hodnoty - jméno jednoznačné pojmenování pomocí identifikátoru - typ jaké hodnoty může uchovávat (určuje velikost přidělené paměti) Deklarace proměnných v Pascalu povinná (v některých jazycích ne nebezpečné!) syntaxe: var Jméno: Typ; Jm1, Jm2, Jm3: Typ; více proměnných téhož typu Při deklaraci více proměnných v programu se nemusí (ale může) klíčové slovo var opakovat, jdou-li deklarace proměnných hned po sobě. Pokud je mezi nimi deklarován nějaký jiný prostředek (např. typ, konstanta, procedura), musí se var znovu uvést na začátku každého úseku deklarací proměnných. Pavel Töpfer, 2016 Programování 1-2 3
Identifikátor = způsob pojmenování jakýchkoliv objektů používaných v programu (název programu, jména proměnných i jiných deklarovaných prostředků) - tvořen písmeny anglické abecedy a číslicemi - nesmí začínat číslicí např.: Soucet, x1, alfa - v TP navíc znak _ ( podtržítko ) umožňuje používat víceslovné názvy, např.: Pocet_Prvku - nerozlišuje malá a velká písmena (tzn. v identifikátoru a = A, na rozdíl od jazyků C, Java apod., kde to jsou různé znaky) tedy alfa = ALFA = Alfa (lze i střídat nepřehledné!) lze používat velbloudí notaci PocetKamenuNaSachovnici - implementací omezena maximální délka (je dostatečně velká). Doporučení: - používat mnemotechnické identifikátory název proměnné napovídá o jejím významu a účelu - zavést si pevný styl používání malých/velkých písmen. Pavel Töpfer, 2016 Programování 1-2 4
Typ určuje, kolik se pro proměnnou vyhradí místa v paměti a jakým způsobem se proměnná může používat v programu - jednoduchý uložení jedné hodnoty v Pascalu (resp. TP) připraveny standardní datové typy celé číslo integer (byte, word, shortint, longint) desetinné číslo real (single, double, extended) logická hodnota boolean znak char - strukturovaný sestaven z více složek nutno předem specifikovat počet a typ složek pomocí definice typu s využitím vyhrazených klíčových slov pole array záznam record znakový řetězec string množina set Pavel Töpfer, 2016 Programování 1-2 5
Celočíselné typy v TP shortint 1B se znaménkem -128..127 integer 2B se znaménkem -32768..32767 longint 4B se znaménkem -2147483648..2147483647 byte 1B bez znaménka 0..255 word 2B bez znaménka 0..65535 Základní reálný typ v Pascalu real 6B 11-12 platných cifer rozsah hodnot E-39..E38 Dodatečné reálné typy v TP single 4B 7-8 platných cifer rozsah hodnot E-48..E38 double 8B 15-16 platných cifer rozsah E-324..E308 extended 10B 19-20 platných cifer rozsah E-4932..E4932 Pavel Töpfer, 2016 Programování 1-2 6
Čísla ve světě 1 AU (astronomická jednotka) = střední vzdálenost Země Slunce 1,495. 10 11 m 1 l.y. (světelný rok) 9,46. 10 15 m vzdálenost hvězd cca 10-15 l.y. (Proxima Centauri 4,27 l.y.) hmotnost Slunce 1,993. 10 20 kg velikost atomu hmotnost protonu hmotnost elektronu elementární náboj řádově 10-10 m 1,672. 10-27 kg 9,109. 10-31 kg 1,602. 10-19 C Planckova konstanta (E=h.ν) h = 6,625. 10-34 Js Avogadrova konstanta (počet částic v 1 molu) N A = 6,022. 10 23 mol -1 Rozsah hodnot standardního datového typu real plně postačuje. Pavel Töpfer, 2016 Programování 1-2 7
Zápis programu v Pascalu Fyzicky: textový soubor = posloupnost znaků (píšeme v textovém editoru) Logicky: posloupnost lexikálních atomů (logických elementů, dále nedělitelných) - konstanty 15-2.97 3.456E-4 Praha - identifikátory A Soucet PocetCisel x1 - klíčová slova var begin program array - speciální znaky + : < ; - dvojznaky := <= <>.. - komentáře {libovolný text} (*případně takto*) Oddělení sousedních lexikálních atomů: mezera, nový řádek (Enter) - musí oddělit sousedící konstanty, identifikátory a klíčová slova - nesmí být uvnitř lexikálního atomu (v komentáři ovšem ano) - jinde být může a nemusí (lze psát A+1 i A + 1 ) - kde smí být, může jich být libovolný počet (v libovolné kombinaci) - kde smí být, může být komentář - není pevná řádková struktura (neplatí princip co příkaz, to řádek ). Pavel Töpfer, 2016 Programování 1-2 8
Doporučení: - jednotlivé deklarace a příkazy psát na samostatné řádky - používat indentaci (odsazování řádků od levého okraje podle logického zanoření příkazových struktur) - používat komentáře (význam jednotlivých proměnných, co dělá která procedura a funkce, co dělá která část programu). Je dobré zavést si vlastní styl zápisu programu a dodržovat ho. Nic z toho není povinné, překladač to ignoruje. Významné zvýšení čitelnosti zdrojového kódu pro programátora (pro autora samotného i pro případné další čtenáře ). program PlochaKruhu; var R, P: real; {poloměr, výsledná plocha} begin read(r); P := 3.14159265 * R * R; write(p) end. Pavel Töpfer, 2016 Programování 1-2 9
Definice konstanty - pojmenování konstanty identifikátorem - uvádí se v oblasti deklarací - syntaxe: const Jméno = Hodnota; - typ konstanty je automaticky odvozen z uvedené hodnoty - hodnotu konstanty nelze při výpočtu měnit (nelze do ní dosazovat) - důvody: opakovaný výskyt téže ošklivé hodnoty v programu možnost snadné změny na jediném místě v programu program PlochaKruhu; const Pi = 3.14159265; {DEFINICE KONSTANTY} var R, P: real; {poloměr, výsledná plocha} begin read(r); P := Pi * R * R; write(p) end. Pavel Töpfer, 2016 Programování 1-2 10
Předdefinované číselné konstanty maxint = nejvyšší možná hodnota proměnné typu integer (v TP na PC 32767, jinde může být jiná) Pi = Ludolfovo číslo =3.14159265358979 (není v normě Pascalu, má TP) Pavel Töpfer, 2016 Programování 1-2 11
Příkazy v Pascalu - jednoduché - dosazovací příkaz (přiřazovací) - volání procedury - příkaz skoku (goto) používá se jen výjimečně - strukturované - složený příkaz (begin end) - podmíněný příkaz (if, case) - cyklus (while, repeat, for) - vnoření do záznamu (with) specialita Pascalu, příliš se nepoužívá Strukturovaný příkaz je konstrukce, která v sobě obsahuje jeden nebo více dalších příkazů, z nichž každý je buď jednoduchý, nebo opět strukturovaný strukturované programování. Pavel Töpfer, 2016 Programování 1-2 12
Dosazovací příkaz Syntaxe: Sémantika: Proměnná := Výraz vyhodnotí se výraz, hodnota se vloží do proměnné (dosavadní hodnota proměnné se tím ztratí) Použití: A := 5; {proměnná A nabude hodnoty 5} A := A+1; {hodnota proměnné A se zvýší o 1} A := B; {do A se zkopíruje hodnota proměnné B} Příklad: výměna hodnot dvou proměnných A, B - nutno použít třetí pomocnou proměnnou C C := A; A := B; B := C - pozor na pořadí příkazů Pavel Töpfer, 2016 Programování 1-2 13
Volání procedury - má postavení jednoduchého příkazu - lze volat standardní proceduru jazyka Pascal nebo proceduru vlastní deklarovanou v programu Syntaxe: Sémantika: JménoProcedury(Parametry) vykoná se algoritmus popsaný v proceduře Průběh výpočtu: v místě volání procedury se v přeloženém kódu programu vykoná odskok do kódu procedury a po ukončení procedury návrat do programu za místo volání (návratová adresa je vhodným způsobem uschována). Prozatím známe standardní procedury pro vstup a výstup dat v podobě: read(a); přečte ze standardního vstupu (tj. z klávesnice) jednu hodnotu a uloží ji do proměnné A write(a); vypíše na standardní výstup (tj. na obrazovku) hodnotu výrazu A Pavel Töpfer, 2016 Programování 1-2 14
Procedury pro zvýšení / snížení hodnoty proměnné (není v normě Pascalu, má TP) Nechť A je proměnná typu integer, X je výraz typu integer: inc(a) A:=A+1 dec(a) A:=A-1 inc(a, X) A:=A+X dec(a, X) A:=A-X Pavel Töpfer, 2016 Programování 1-2 15
Podmíněný příkaz if Podmínka then Příkaz if Podmínka then Příkaz1 else Příkaz2 Jednoduchá podmínka = relace: Výraz1 relační operátor Výraz2 = < > <= >= <> Příklad: if A > 0 then A := A-1 if A > 0 then A := A-1 else A := A+1 Volba z více možností: if A=1 then else if A=2 then else if A=3 then else Pavel Töpfer, 2016 Programování 1-2 16
Sémantika vnořených if if A > 0 then if B = C then A := A-1 else A := 0 else A := 1 sémantika: if A > 0 then (if B = C then A := A-1 else A := 0) else A := 1 if A > 0 then if B = C then A := A-1 else A := 0 sémantika: if A > 0 then (if B = C then A := A-1 else A := 0) if A > 0 then (if B = C then A := A-1) else A := 0 SPRÁVNĚ ŠPATNĚ znaky ( ) do příkazů nepíšeme, jenom zde znázorňují chápání sémantiky Co když potřebujeme dosáhnout toho druhého významu? Co když v podmínce potřebujeme provést více příkazů? Pavel Töpfer, 2016 Programování 1-2 17
Složený příkaz = příkazové závorky begin Příkaz1; Příkaz2; ; PříkazN end if A > 0 then begin A := A-1; B := 100 end else begin A := A+1; B := 200 end Poznámka k syntaxi: před else není středník! if A > 0 then (if B = C then A := A-1) else A := 0 if A > 0 then begin if B = C then A := A-1 end else A := 0 Pavel Töpfer, 2016 Programování 1-2 18