20
Programovací jazyk PASCAL Programovací jazyk PASCAL

Programovací jazyk PASCAL

  • Upload
    hisa

  • View
    75

  • Download
    0

Embed Size (px)

DESCRIPTION

Programovací jazyk PASCAL. 1. Úvod. Př. Vypočtěte součet s(n)=1 + 1/2 + 1/3 + ... + 1/n program soucet(input,output); var n:integer; s:real; begin read(input,n); s:=0; repeat s:=s+1/n; n:=n-1; until n=0; write(output,s); end. 1.1 Lexikální elementy. - PowerPoint PPT Presentation

Citation preview

Page 1: Programovací jazyk PASCAL

Programovací jazyk PASCALProgramovací jazyk PASCAL

Page 2: Programovací jazyk PASCAL

1. 1. Úvod Úvod

Př. Vypočtěte součet s(n)=1 + 1/2 + 1/3 + ... + 1/n Př. Vypočtěte součet s(n)=1 + 1/2 + 1/3 + ... + 1/n program soucet(input,output);program soucet(input,output);varvar n:integer;n:integer; s:real;s:real;beginbegin read(input,n);read(input,n); s:=0;s:=0; repeatrepeat s:=s+1/n;s:=s+1/n; n:=n-1;n:=n-1; until n=0;until n=0; write(output,s);write(output,s);end.end.

Tisk: s

Stop

Čti: n

Start

s = 0

s = s + 1 / nn = n - 1

n = 0-

+

Page 3: Programovací jazyk PASCAL

1.1 Lexikální elementy 1.1 Lexikální elementy Jsou to nejmenší smysluplné jednotky pascalského Jsou to nejmenší smysluplné jednotky pascalského

programu. Jsou představovány programu. Jsou představovány speciálními symboly, speciálními symboly, identifikátory, rezervovanými slovy, návěštími, čísly a identifikátory, rezervovanými slovy, návěštími, čísly a řetězcovými konstantamiřetězcovými konstantami. .

Program je tvořen Program je tvořen lexikálními elementy lexikálními elementy a a separatoryseparatory. . Separátory jsou Separátory jsou mezeramezera, , tabelátortabelátor a a komentářkomentář. V. V případě, že dva sousední lexikální elementy jsou případě, že dva sousední lexikální elementy jsou rezervované slovo, identifikátor, návěští nebo číslo, musí rezervované slovo, identifikátor, návěští nebo číslo, musí být odděleny jedním nebo více separátory. Separátory být odděleny jedním nebo více separátory. Separátory nesmějí být částí lexikálních elementů, vyjma nesmějí být částí lexikálních elementů, vyjma řetězcových konstant.řetězcových konstant.

Page 4: Programovací jazyk PASCAL

Speciální symboly:Speciální symboly:- znaky, které mají jeden nebo více stálých významů: - znaky, které mají jeden nebo více stálých významů:

+,-,*,/,=,<,>,{,},.,(,),:,;,^,@,[,], $,# - v TP+,-,*,/,=,<,>,{,},.,(,),:,;,^,@,[,], $,# - v TP- také páry znaků jsou speciální symboly: <=,>=,:=,..,- také páry znaků jsou speciální symboly: <=,>=,:=,..,

(*,*),(.,.)(*,*),(.,.) Identifikátory:Identifikátory: Označují konstanty, typy, proměnné, procedury aOznačují konstanty, typy, proměnné, procedury a

funkce, unity, programy. Mají libovolnou délku, v funkce, unity, programy. Mají libovolnou délku, v TP je prvních 63 znaků významných.Identifikátor je TP je prvních 63 znaků významných.Identifikátor je posloupnost písmen a číslic začínající písmenem, posloupnost písmen a číslic začínající písmenem, nesmí obsahovat mezeru. V TP muže obsahovat nesmí obsahovat mezeru. V TP muže obsahovat podtržítko pro zvýšení čitelnosti. Stejně jako u podtržítko pro zvýšení čitelnosti. Stejně jako u rezervovaných slov se nerozlišují malá a velká rezervovaných slov se nerozlišují malá a velká písmena.písmena.

Page 5: Programovací jazyk PASCAL

Rezervovaná slova:Rezervovaná slova: Jsou to identifikátory se speciálním významem - if, Jsou to identifikátory se speciálním významem - if,

else begin, end, for, in, nil, to,... .else begin, end, for, in, nil, to,... . Návěští:Návěští: Je to číslo z intervalu 0..9999 - používa se spolu s Je to číslo z intervalu 0..9999 - používa se spolu s

příkazem goto. TP umožňuje použít jako návěští příkazem goto. TP umožňuje použít jako návěští identifikátor odpovídajícího typu.identifikátor odpovídajícího typu.

Čísla:Čísla:- typu integer - posloupnost číslic- typu integer - posloupnost číslic- typu real - číslo s desetinnou tečkou, případně v - typu real - číslo s desetinnou tečkou, případně v

exponenciálním tvaru - 1e32exponenciálním tvaru - 1e32- hexadecimální konstanta - v TP číslo typu integer - - hexadecimální konstanta - v TP číslo typu integer -

$afb$afb

Page 6: Programovací jazyk PASCAL

Řetězce:Řetězce: Je to posloupnost znaků uzavřená apostrofy, Je to posloupnost znaků uzavřená apostrofy,

musí ležet na jednom řádku - 'abc'. Prázdný musí ležet na jednom řádku - 'abc'. Prázdný řetězec - řetězec - '' '' . Nezobrazitelné znaky je možno . Nezobrazitelné znaky je možno vkládat pomocí jejich kódu - 'abc'#14'xyz '.vkládat pomocí jejich kódu - 'abc'#14'xyz '.

Komentáře:Komentáře: Je to text uzavřený ve složených závorkách, Je to text uzavřený ve složených závorkách,

kompilátor tento text ignoruje. Složené kompilátor tento text ignoruje. Složené závorky je možno nahradit dvojicemi znaků závorky je možno nahradit dvojicemi znaků (*,*). Komentář, obsahující znak dolar $ (*,*). Komentář, obsahující znak dolar $ bezprostředně za otevírací závorkou je v P bezprostředně za otevírací závorkou je v P direktiva kompilátoru.direktiva kompilátoru.

Page 7: Programovací jazyk PASCAL

1.2 Syntaxe a sémantika jazyka 1.2 Syntaxe a sémantika jazyka SyntaxeSyntaxe je souhrn pravidel, udávajících je souhrn pravidel, udávajících

přípustné tvary dílčích konstrukcí a celého přípustné tvary dílčích konstrukcí a celého programu.programu.

SémantikaSémantika je souhrn pravidel, udávajících je souhrn pravidel, udávajících význam jednotlivých konstrukcí.význam jednotlivých konstrukcí.

Syntaktický diagram Syntaktický diagram se používá pro zápis se používá pro zápis

syntaxe, definuje všechny přípustné tvary syntaxe, definuje všechny přípustné tvary konstrukce, jejíž název je uveden v nadpise. konstrukce, jejíž název je uveden v nadpise. Přípustný tvar získáme tak, že projdeme nějakou Přípustný tvar získáme tak, že projdeme nějakou cestou vedoucí od začátku diagramu do konce.cestou vedoucí od začátku diagramu do konce.

Page 8: Programovací jazyk PASCAL

Syntaktický diagram:Syntaktický diagram:

identifikátor

písmeno

písmeno

číslice

písmeno

A B Z

číslice

1 2 9

Page 9: Programovací jazyk PASCAL

2. Základní pojmy2. Základní pojmy 2.1 Konstanta 2.1 Konstanta Deklaruje se v deklarační části za klíčovým slovem Deklaruje se v deklarační části za klíčovým slovem CONST. CONST. Hodnota Hodnota

konstanty je známa již při psaní programu, během provádění programu se konstanty je známa již při psaní programu, během provádění programu se nemění. Použití konstant zvyšuje čitelnost a srozumitelnost programu. nemění. Použití konstant zvyšuje čitelnost a srozumitelnost programu. Umožňuje také jeho snadnou modifikovatelnost - změna na jednom místě Umožňuje také jeho snadnou modifikovatelnost - změna na jednom místě změní hodnoty v clem programu.změní hodnoty v clem programu.

Syntaktický diagram:Syntaktický diagram:

Př.:Př.: constconst maxpocet = 100;maxpocet = 100; pi = 3.1415926pi = 3.1415926 koncznak = koncznak = ''$$''

konstanta

CONST identifikátor konstanta = ;

Page 10: Programovací jazyk PASCAL

2.2 Proměnná2.2 Proměnná Deklaruje se v deklarační části za klíčovým slovem Deklaruje se v deklarační části za klíčovým slovem VAR. VAR. Deklarací se Deklarací se

definuje identifikátor proměnné, pomocí kterého k ní přistupujeme, typ definuje identifikátor proměnné, pomocí kterého k ní přistupujeme, typ proměnné, který specifikuje množinu přípostných hodnot a množinu proměnné, který specifikuje množinu přípostných hodnot a množinu přípustných operací. Deklarací je také určena velikost paměti, kterou přípustných operací. Deklarací je také určena velikost paměti, kterou bude proměnná zabírat. Hodnota proměnné se mění v průběhu bude proměnná zabírat. Hodnota proměnné se mění v průběhu výpočtu, na začátku programu neni hodnota proměnné definována výpočtu, na začátku programu neni hodnota proměnné definována (neni 0!). Hodnota se proměnné přiřadí přiřazovacím příkazem nebo (neni 0!). Hodnota se proměnné přiřadí přiřazovacím příkazem nebo příkazempříkazem čtení.čtení.

Př.: Př.: varvar i,j,k : integer;i,j,k : integer; p,q,r : real;p,q,r : real; zn1,zn2 : char;zn1,zn2 : char; test : boolean;test : boolean;

proměnná

identifikátor identifikátor typu : ; VAR

,

Page 11: Programovací jazyk PASCAL

2.3 Základní typy2.3 Základní typy Typ integerTyp integer Specifikuje konečnou souvislou množinu hodnot. Specifikuje konečnou souvislou množinu hodnot.

Rozsah typu neni dán jazykem ale konkrétní Rozsah typu neni dán jazykem ale konkrétní implementací. MAXINT je standardní identifikátor implementací. MAXINT je standardní identifikátor konstanty, která obsahuje největší číselnou konstanty, která obsahuje největší číselnou hodnotu typu integer. Rozsah typu integer je -hodnotu typu integer. Rozsah typu integer je -maxint..maxint. V TP zabírá 2 byty, maxint=2maxint..maxint. V TP zabírá 2 byty, maxint=2^̂1515 -- 1 = 32767. Typ longint zabírá 4 byty, největší 1 = 32767. Typ longint zabírá 4 byty, největší hodnota je 2hodnota je 2^̂31 - 1 = 2.147.483.647.31 - 1 = 2.147.483.647.

Operace: +,-,*,div - celočíselné dělení, mod - Operace: +,-,*,div - celočíselné dělení, mod - zbytek po celočíselném dělenízbytek po celočíselném dělení

Výsledek operace je roven matematickému, je-li z Výsledek operace je roven matematickému, je-li z intervalu -maxint..maxint, jinak dochází k chybě.intervalu -maxint..maxint, jinak dochází k chybě.

Př.: k:= i mod j; l:= 25 div 7;Př.: k:= i mod j; l:= 25 div 7;

Page 12: Programovací jazyk PASCAL

Relační operaceRelační operace: =, <>, <, >, <=, >= - výsledek je : =, <>, <, >, <=, >= - výsledek je logická hodnota true nebo false.logická hodnota true nebo false.

Standardní funkceStandardní funkce: abs(i) ... | i |, sqr(i) ... i: abs(i) ... | i |, sqr(i) ... i^̂2, 2, odd(i) ... logická fce, je true, je-li i liché, jinak falseodd(i) ... logická fce, je true, je-li i liché, jinak false

inc(i) ... i:=i+1, inc(i,j) ... i:=i+j, dec(i) ... i:=i-1, inc(i) ... i:=i+1, inc(i,j) ... i:=i+j, dec(i) ... i:=i-1, dec(i,j) ... i:=i-jdec(i,j) ... i:=i-j

Př.:Př.:if i mod 2 = 0 then sude := sude + 1 if i mod 2 = 0 then sude := sude + 1 else liche := liche + 1else liche := liche + 1

if odd(i) then inc(liche) else inc(sude);if odd(i) then inc(liche) else inc(sude);

Page 13: Programovací jazyk PASCAL

Typ realTyp real

Specifikuje konečnou podmnožinu reálných čísel, rozsah je Specifikuje konečnou podmnožinu reálných čísel, rozsah je definován implementací. Čísla se zobrazují v pohyblivé definován implementací. Čísla se zobrazují v pohyblivé řádové čárce - řádové čárce - mantisamantisa + + exponentexponent. Rozsah je definován . Rozsah je definován třemi charakteristikami: - největší absolutní hodnota, - třemi charakteristikami: - největší absolutní hodnota, - nejmenší absolutní hodnota nenulového čísla, - počet míst nejmenší absolutní hodnota nenulového čísla, - počet míst mantisy.mantisy.

real - 6 byte, rozsah 2.9e-39 ..1.7e38, 11-12 číslicreal - 6 byte, rozsah 2.9e-39 ..1.7e38, 11-12 číslic Další reálné typy: Další reálné typy: singlesingle, , doubledouble, , extendedextended, , compcomp..

OperaceOperace: +,-,*,/ - výsledek neni definován, jestliže : +,-,*,/ - výsledek neni definován, jestliže matematický výsledek neleží v rozsahu zobrazitelných čísel. matematický výsledek neleží v rozsahu zobrazitelných čísel. Relační operátory jsou stejné jako u typu integer. Relační operátory jsou stejné jako u typu integer.

Standardní funkceStandardní funkce: abs(r) ... |r|, sqr(r) ... r2, sin(r), cos(r), : abs(r) ... |r|, sqr(r) ... r2, sin(r), cos(r), arctan(r), ln(r), exp(r) ... earctan(r), ln(r), exp(r) ... e^̂r, sqrt(r) ... . r, sqrt(r) ... .

Page 14: Programovací jazyk PASCAL

V pascalu nejsou funkce yV pascalu nejsou funkce y^̂x, arcsin(r), arccos(r). Lze pro ně x, arcsin(r), arccos(r). Lze pro ně použít vzorcepoužít vzorce::

KonverzeKonverze - převod jednoho typu na druhý: - převod jednoho typu na druhý:

- integer na real je implicitní - integer na real je implicitní - standardní fce je možno volat s celočíselnými argumenty, - standardní fce je možno volat s celočíselnými argumenty,

které se před vyvoláním fce převedou na reálné,které se před vyvoláním fce převedou na reálné,- v aritmetických a relačních výrazech je-li jedna proměnná - v aritmetických a relačních výrazech je-li jedna proměnná typu real pak proměné typutypu real pak proměné typu integer se převedou na realinteger se převedou na real

- real na integer- real na integer - - trunc(r)trunc(r) - odseknutí desetinné části - odseknutí desetinné části

- - round(r)round(r) - zaokrouhlení : - zaokrouhlení :

round(r)=trunc(r+0.5) x>=0, round(r)=trunc(x-0.5) x<0round(r)=trunc(r+0.5) x>=0, round(r)=trunc(x-0.5) x<0

x ln( )

2

1arcsin( ) x 1, arccos(x)= arcsin( ), y21

x yxx arctg x ex

Page 15: Programovací jazyk PASCAL

Typ booleanTyp boolean Specifikuje množinu logických hodnot {false, true}, je definováno Specifikuje množinu logických hodnot {false, true}, je definováno

uspořádání false<true. Jsou definovány relační operace - unární not a uspořádání false<true. Jsou definovány relační operace - unární not a binární and, or, xor (negace ekvivalence), implikace (<=), ekvivalence binární and, or, xor (negace ekvivalence), implikace (<=), ekvivalence (=). Proměnné a výrazy typu boolean se používají v příkazech cyklu a (=). Proměnné a výrazy typu boolean se používají v příkazech cyklu a větvení.větvení.

Typ charTyp char Hodnotami typu char jsou znaky. Množina používaných znaků neni dána Hodnotami typu char jsou znaky. Množina používaných znaků neni dána

jazykem, ale implementací. Dnes se používá množina znaků - kód jazykem, ale implementací. Dnes se používá množina znaků - kód ASCII (American Standard Code for Information Interchange), dříve ASCII (American Standard Code for Information Interchange), dříve také kód EBCDIC (Extended Binary Coded Decimal Information Code). také kód EBCDIC (Extended Binary Coded Decimal Information Code). Je definováno zobrazení, které každému znaku přiřadí celé číslo - Je definováno zobrazení, které každému znaku přiřadí celé číslo - ordinální číslo znaku. Znakovou konstantu můžeme zapsat jako znak v ordinální číslo znaku. Znakovou konstantu můžeme zapsat jako znak v uvozovkách - 'a','b'.Hodnotami typu char mohou být znaky, které nemají uvozovkách - 'a','b'.Hodnotami typu char mohou být znaky, které nemají lexikografickou reprezentaci - tzv. řídící znaky (např. #12 - znak konce lexikografickou reprezentaci - tzv. řídící znaky (např. #12 - znak konce stránky).stránky).

Jsou definovány relační operace: =,<>,<,>,<=,>=, uspořádání je dáno Jsou definovány relační operace: =,<>,<,>,<=,>=, uspořádání je dáno

ASCII kódem - '0'<'1', 'a'<'b'. Funkce ord přiřazuje znaku jeho ordinální ASCII kódem - '0'<'1', 'a'<'b'. Funkce ord přiřazuje znaku jeho ordinální číslo - ord('0')=48, ord('1')=49. K ní inverzní funce přiřazuje číslu znak - číslo - ord('0')=48, ord('1')=49. K ní inverzní funce přiřazuje číslu znak - chr(65)='A', chr(ord(zn))=zn.chr(65)='A', chr(ord(zn))=zn.

Page 16: Programovací jazyk PASCAL

Př.: Sestavte algoritmus, který ze vstupních dat přečte Př.: Sestavte algoritmus, který ze vstupních dat přečte posloupnost znaků, reprezentující zápis celého čísla bez posloupnost znaků, reprezentující zápis celého čísla bez znaménka a vytvoří odpovídající hodnotu typu integer. Před znaménka a vytvoří odpovídající hodnotu typu integer. Před první číslicí mohou být mezery, zápis čísla bude správný a první číslicí mohou být mezery, zápis čísla bude správný a zobrazitelný.zobrazitelný.

program vstup_cislaprogram vstup_cisla;;varvar zn:charzn:char;; hodn:integerhodn:integer;;beginbegin hodn:=0; read(zn);hodn:=0; read(zn); while zn=' ' do read(zn);while zn=' ' do read(zn); while ('0'<=zn)and(zn<='9') do beginwhile ('0'<=zn)and(zn<='9') do begin hodn:=10*hodn + ord(zn) - ord('0');hodn:=10*hodn + ord(zn) - ord('0'); read(zn);read(zn); end;end;end.end.

Page 17: Programovací jazyk PASCAL

Ordinální typyOrdinální typy

Typy Typy integerinteger, , booleanboolean a a charchar patří spolu s patří spolu s výčtovým typem výčtovým typem a a typem interval typem interval do skupiny jednoduchých typů, které se do skupiny jednoduchých typů, které se nazývají ordinální typy. Jsou pro ně definovány funkce nazývají ordinální typy. Jsou pro ně definovány funkce

ordord - vrací ordinální (pořadové) číslo, - vrací ordinální (pořadové) číslo, succsucc - následovník, - následovník, predpred - předchůdce: ord(succ(x)=ord(x)+1, - předchůdce: ord(succ(x)=ord(x)+1,

ord(pred(x)=ord(x)-1.ord(pred(x)=ord(x)-1.

Page 18: Programovací jazyk PASCAL

2.4 Výrazy2.4 Výrazy

Předepisují posloupnost operací, skládají se z Předepisují posloupnost operací, skládají se z operandů - konstant a proměnných, operátorů a operandů - konstant a proměnných, operátorů a příp. kulatých závorek. Provedení všech operací se příp. kulatých závorek. Provedení všech operací se nazývá nazývá vyhodnocení výrazuvyhodnocení výrazu, výsledkem je , výsledkem je hodnota výrazuhodnota výrazu. . Operace se provádějí zleva Operace se provádějí zleva doprava, s ohledem na prioritu operátorů a na doprava, s ohledem na prioritu operátorů a na závorky.závorky.

Priority operátorů: Priority operátorů:

1. not ... nejvyšší priorita1. not ... nejvyšší priorita2. *, /, div, mod, and2. *, /, div, mod, and3. +, -, or3. +, -, or4. =, <>, <, >, <=, >=4. =, <>, <, >, <=, >=

Page 19: Programovací jazyk PASCAL

Př.:Př.:z*4 + y mod 2 - z div 5z*4 + y mod 2 - z div 5 ((z*4) + (y mod 2) - (z div 5)((z*4) + (y mod 2) - (z div 5)

x + a*y/zx + a*y/z x + ((a*y)/z)x + ((a*y)/z)a + b > u*va + b > u*v (a + b) > (u*v)(a + b) > (u*v)p or not q and rp or not q and r p or ((not q) and r)p or ((not q) and r)

Operandy každého operátoru musí být přípustného Operandy každého operátoru musí být přípustného typu. Správnost výrazu ověříme zleva doprava s typu. Správnost výrazu ověříme zleva doprava s ohledem na prioritu a závorky.ohledem na prioritu a závorky.

0 <= i <= 10 ... ne 0 <= i <= 10 ... ne 0 <= i and i <= 10 ... ne 0 <= i and i <= 10 ... ne (0 <= i) and (i<= 10) ano ...(0 <= i) and (i<= 10) ano ...

Page 20: Programovací jazyk PASCAL

2.5 Struktura a zápis programu2.5 Struktura a zápis programu Program se skládá z Program se skládá z hlavičkyhlavičky, , deklarační částideklarační části a a příkazové částipříkazové části.. HlavičkaHlavička - obsahuje identifikátor - jméno programu, který se v - obsahuje identifikátor - jméno programu, který se v

programu nezmí znovu vyskytnout. V TP je hlavička nepovinná.programu nezmí znovu vyskytnout. V TP je hlavička nepovinná. Deklarační částDeklarační část - obsahuje úseky deklarací: návěští, konstant, typů, - obsahuje úseky deklarací: návěští, konstant, typů,

proměnných, procedur a funkcí. V TP nezaleží na jejich pořadí.proměnných, procedur a funkcí. V TP nezaleží na jejich pořadí. Příkazová částPříkazová část - popisuje vlastní výpočetní proces, skládá se z - popisuje vlastní výpočetní proces, skládá se z

příkazů ukončených středníkem a je uzavřena v závorkách begin příkazů ukončených středníkem a je uzavřena v závorkách begin end. Příkaz za kterým následuje závorka end nemusí být ukončen end. Příkaz za kterým následuje závorka end nemusí být ukončen středníkem.středníkem.

Program se zapisuje v tzv. Program se zapisuje v tzv. volném formátuvolném formátu - příkaz může začínat v - příkaz může začínat v libovolném místě řádku a může jich být na řádku více. Pro zvýšení libovolném místě řádku a může jich být na řádku více. Pro zvýšení čitelnosti se každá logická úroveň v programu odsazuje o dva čitelnosti se každá logická úroveň v programu odsazuje o dva znaky. Na vhodných místech se program doplňuje komentáři, které znaky. Na vhodných místech se program doplňuje komentáři, které je možno vložit všude tam, kde je povoleno psát mezeru.je možno vložit všude tam, kde je povoleno psát mezeru.