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á
deklarace
- 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;
tělo
- zápis algoritmu (posloupnost příkazů) begin read(A); read(B); write(A+B) end.
program Soucet;
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 integer 2B se znaménkem longint 4B se znaménkem byte 1B bez znaménka word 2B bez znaménka
-128..127 -32768..32767 -2147483648..2147483647 0..255 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 double 8B 15-16 platných cifer extended 10B 19-20 platných cifer
rozsah hodnot E-48..E38 rozsah E-324..E308 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 . 1011 m 1 l.y. (světelný rok) 9,46 . 1015 m vzdálenost hvězd – cca 10-15 l.y. (Proxima Centauri 4,27 l.y.) hmotnost Slunce 1,993 . 1020 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.ν) Avogadrova konstanta (počet částic v 1 molu)
h = 6,625 . 10-34 Js NA = 6,022 . 1023 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; var R, P: real; begin read(R); P := Pi * R * R; write(P) end. Pavel Töpfer, 2016
{DEFINICE KONSTANTY} {poloměr, výsledná plocha}
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; A := A+1; A := B;
{proměnná A nabude hodnoty 5} {hodnota proměnné A se zvýší o 1} {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