Programování v Pascalu Přednáška 3

Post on 02-Jan-2016

39 views 3 download

description

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: - PowerPoint PPT Presentation

transcript

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.