Programování v Pascalu Přednáška 3
RNDr. Hana Havelková
Výrazy
tvořeny kombinací operátorů, operandů (a oddělovačů) většina operátorů je binárních, některé jsou unární pořadí vyhodnocení složitých výrazů je dáno prioritou
operátorů
Pravidla: operand mezi dvěma operátory s různou prioritou se
váže k operátoru s vyšší prioritou
operand mezi dvěma operátory se stejnou prioritou se váže k tomu vlevo – vyhodnocování operací zleva
výrazy uvnitř závorek jsou vyhodnoceny přednostně
Priorita operátorů
1. @ , not2. *, /, div, mod, and, shl, shr3. +, - , or, xor4. =, <>, <, > , <= , >=, in
Aritmetické operátory
+, - unární*, /, mod, div binární+, - binární
Relační operátory
= , <>< , ><= , >=
Bitové operátory
dají se aplikovat na celočíselné typy
not bitová negaceand bitový součinor bitový součetxor bitová nonekvivalenceshl posun vlevoshr posun vpravo
Logické operátory
dají se aplikovat na boolean typnot negaceand logický součin (konjunkce)or logický součet (alternativa)xor nonekvivalence
Tabulka pravdivostních hodnot
a ba and
ba or b
a xor b
not a
true true true true false false
true false false true true false
false true false true true true
false false false false false true
jednoduché strukturované pointer
ordinální reálné
▫ char▫ boolean▫ celočíselné▫ interval▫ výčet
▫ pole▫ záznam▫ množina▫ soubor▫ řetězec
Datové typy
Ordinální datové typy
popisují konečnou uspořádanou množinu hodnot mají vždy minimální a maximální hodnotu každé hodnotě z oboru hodnot tohoto typu je přiřazeno
ordinální číslo udávající v podstatě pořadí hodnot(celá čísla jsou zobrazena sama na sebe)
funkce pracující s ordinálními hodnotami Ord – vrací ordinální hodnotu Pred – vrací předchozí hodnotu Succ – vrací následnou hodnotu
Ord('A') vrací 65Pred ('C') vrací 'B'Succ(10) vrací 11
je-li x < y, platí Ord(x) < Ord(y)
Celočíselné typy
typ rozsahvelikost
byte 0 255 1Bshortint -128 +127 1B integer -32 768 +32 767 2Bword 0 +65 535 2Blongint -2 147 483 648 +2 147 483 647 4B
Specielní operátory:div celočíselné dělenímod zbytek po celočíselné dělení
Funkce pracující s celočíselnými typy
abs(n) absolutní hodnota dec(n) dekrement – snížení hodnoty n o 1 dec(n, i) dekrement – snížení hodnoty n o i inc(n) inkrement o 1 inc(n, i) inkrement o i sqr(n) druhá mocnina n
Převedení reálných čísel na celá int(x) celá část x round(x) zaokrouhlení x trunc(x) useknutí desetinné části
Typ boolean
pouze hodnoty true a false logické operátory
and or xor not
relační operátory < , >, = , <> <=, >=
succ (false) = truepred (true) = false
ord (false) = 0ord (true) = 1
false < trueOrd(false)<Ord(true)
Typ char
hodnotou je znak (kódování dle ASCII) znak zapisujeme mezi apostrofy 'A', 'B' , '@', '0', 'č'platí: '0' < '1' < '2' < .. < '9' succ('0') = '1', succ('1') = 2 … 'A' < 'B' < … < 'Z' < … < 'a' < 'b' < … < 'z' ord('0') = 48, ord('A') = 65, ord('Z') = 90, ord('a') = 97
Funkce související s typem char
ord(c) ordinalita – vlastně ASCII kód chr(n) znak odpovídající ASCII kódu n succ(c) pred(c)
Platí:ord(chr(ASCII_kod)) = ASCII_kodchr(ord(znak)) = znak
Výčtový typ
je uživatelsky definovaný definuje se seznamem identifikátorů reprezentujících
hodnoty tohoto typu jde o seznam pojmenovaných konstant první konstanta má hodnotu 0, druhá 1 , …
výskyt identifikátoru představuje jeho zavedení jako identifikátoru konstanty příslušného typu
výčtový typ je ordinální – na operandy (téhož) výčtového typu mohou být aplikovány relační operátory
standardní funkce ord (x), succ (x) , pred(x) výčtový typ nelze přímo použít na vstupu ani výstupu
Příklad výčtového typu
typeDny = (po, ut, st, ct, pa, so, ne);Barvy = (modra, cervena, zelena, bila, cerna) ;Karty = (zelena, cervena, kule, zaludy);Hodnoceni = (vyborne, velmi_dobre, dobre, nedostatecne) ;
varden : Dny;karta : Karty;
beginden := st;karta := zaludy;……
end.
Typ interval
představuje souvislou podmnožinu nějakého ordinálního typu
dolní i horní mez podmnožiny udávají dvě konstanty (konstantní výrazy) ordinálního typu
horní mez musí být větší nebo rovna dolní mezi interval, který specifikuje nějakou podmnožinu ordinálního
typu T nazýváme intervalem z T a typ T hostitelským typem tohoto intervalu
..konstanta konstanta
Příklady typu interval
typevelka_pismena = 'A' .. 'Z' ;mala_pismena = 'a' .. 'z' ;
varv_znak : velka_pismena ;m_znak : mala_pismena ;cislo_do_100 : 1 .. 99 ;rocnik : 1 .. 6 ;znamka : 0 .. 5 ;teplota : -10 .. 25 ;
Typ real
konečná podmnožina reálných čísel – tj. čísla z jistého intervalu v jisté přesnosti (počet desetinných míst)
číslo v pohyblivé řádové čárce, tj. jako dvojice čísel (a, b), kde:
a je mantisa b je exponent zápis aEb 1.268E13 1,268 .
1013
Reálné typy
Typ Rozsah Platné Velikostcifry
real 2.9*10-39 .. 1.7*1038 11 – 12 6 Bsingle 1.5*10-45 .. 3.4*1038 7 – 8 4 Bdouble 5.0*10-324 .. 1.7*10308 15 – 16 8 Bextended 3.4*10-4932 .. 1.1*104932 19 – 20 10 Bcomp -9.2*1018 .. 9.2*1018 19 – 20 8 B
Použití jiných typů než real
zapnout numerický koprocesor – direktiva {$N+} (event. zapnout jeho emulaci pomocí {$E+} )
typ comp zobrazuje vlastně celá čísla, ale s vyšší přesností
Strukturované příkazy
složený příkaz podmíněné příkazy
příkaz if příkaz case
příkazy cyklu for while repeat .. until
příkaz with
Složený příkaz
posloupnost příkazů uzavřených mezi symboly begin a end
chová se jako jediný nedělitelný příkaz tj. kde může být jediný příkaz, může být složený příkaz
symboly begin a end bývají nazývány jako příkazové závorky
středník není součástí příkazů, slouží pouze k jejich oddělení
za posledním příkazem (před end) se neuvádí středník (je-li použit, chová se jako prázdný příkaz)
Podmíněný příkaz IF (neúplný)
vyhodnotí se podmínka za klíčovým slovem if je-li podmínka splněna (true), provede se příkaz uvedený
za then, v opačném případě program pokračuje dalším příkazem
neúplnýif podmínka then příkaz
podmínka
příkaz
+
-
Podmíněný příkaz IF (úplný)
úplnýif podmínka then příkaz1 else příkaz2
podmínka
příkaz1
+
-
příkaz2
vyhodnotí se podmínka za klíčovým slovem if je-li podmínka splněna (true), provede se příkaz1
uvedený za then, v opačném případě se provede příkaz2 uvedený za else
If příklad
vara, b : real;
beginWrite('Zadej dvě čísla: ');ReadLn(a, b);if a < b then WriteLn('První je menší než druhé')else
if a = b then WriteLn('Čísla jsou stejná')else WriteLn('První je větší než druhé');
…end.
If příklad
varhod, min, sec : byte;OK : boolean;
beginOK := true;Write('Zadej čas (hod min sec): ');ReadLn(hod, min, sec);if hod > 23 then OK := falseelse
if min > 59 then OK := falseelse
if sec > 59 then OK := false;if OK then WriteLn('Korektní čas') else WriteLn('Chybný čas');
end.
Podmíněný příkaz CASE
případ
case výraz případof end
else příkaz
;
konstanta konstanta.. : příkaz
vyhodnotí se ordinální výraz uvedený za case, porovnává se postupně s uvedenými případy, dojde-li ke shodě, provede se příkaz odpovídající případu, jinak se provede příkaz uvedený za else, nebo se neprovede nic, pokud klauzule else není použita
Case - příklad
typeoperator = (Plus, Minus, Krat, Deleno);
varop : operator;x, y, z : real;
begin…case op of
Plus : z := x + y ;Minus : z := x – y;Krat : z := x * y;Deleno : z := x / y;
elseWriteLn('Chybný operátor')
end;…
Case - příklad
varn : word;
beginWriteLn('Zadej celé číslo: ');ReadLn(n);case n of
0 .. 9 : WriteLn('Jednociferné číslo');10 .. 99 : WriteLn('Dvojciferné číslo');100 .. 999 : WriteLn('Trojciferné číslo');1000 .. 9999 : WriteLn('Čtyřciferné číslo');
elseWriteLn('Pěticiferné číslo???');
end;ReadLn;
end.