Základom pre Pascal bol jazyk ALGOL 60, ktorého nedostatkom bol úzky obor údajových štruktúr a ich vlastností.
Pascal:
- novší programovací jazyk,
- vznikol v roku 1971,
- zakladateľ – švajčiarsky matematik z zürišskej univerzity – Nicolas Wirth, ktorý ho vytvoril z potreby:
- vyučovania nejakého programovacieho jazyka,
- z vhodnosti z hľadiska efektívnej implementácie a tým jeho dostupnosti pre počítače.
Od roku 1971 prešiel Pascal viacerými úpravami. Najviac publikácií o jazyku vyšlo r. 1971, kedy vyšiel aj publikovaný v rámci ISO normy, odkedy túto podobu nazývame referenčným jazykom – štandardným.
Dnes sa používajú skôr odvodeniny Pascalu, ako Turbo Pascal, Borland Pascal, Delphi, GNU Pascal, HP Pascal, Free Pascal, …
Prevod referenčného jazyka do niektorej z jeho podôb pre určitý druh počítača s istým operačným systémom nazývame implementácia programovacieho jazyka. Napríklad Turbo Pascal 7.0 je implementáciou pre IBM PC pod operačným systémom MS-DOS. U nás najrozšírenejší Turbo Pascal od firmy Borland prešiel verziami 3, 4, 5, 6. Verzia 7 nesie v sebe plne prvky objektového programovania a je predchodcom Delphi.
Konštrukcia jazyka Pascal
Je odvodená z myšlienky štruktúrovaného programovania, ktorého princípom je systematický prístup umožňujúci postup rozoberaním problému na jednoduchšie časti pre zostavenie prehľadného programu. Ale i naopak, z jednotlivých modelov vytvoriť väčší celok, projekt.
File – práca so súborom a adresármi, ukončenie programu. Menu File ponúka možnosť otvorenia a zavedenia existujúceho súboru, vytvorenie nového, skok do systému, uloženie súboru, a ukončenie práce v TP.
Edit – vyvolá sa integrovaný (spolupracujúci) editor. Menu Edit poskytuje príkazy pre vystrihovanie, kopírovanie a vlepovanie
textu v editovanom okne. Tu môžete tiež otvoriť pracovné okno (Clipboard), prezerať a editovať jeho obsah.
Search – hľadanie textu, chýb, nahradzovanie. Menu Search obsahuje príkazy pre hľadanie textu, deklarácii procedúr a zistenie chýb vo vašom súbore.
Run – spúšťanie programu, nastavenie parametrov prg. Menu Run ponúka príkazy pre spustenie programu a pre ladenie za behu.
Compile – spustenie prekladu, výpis informácií o preklade programu so samospúšťaním v tvare .exe. V menu Compile sú príkazy pre preklad a zostavenie programu.
Debug – nastavenie premenných pri ladení programu. Príkazy v menu Debug riadia všetky vlastnosti integrovaného ladenia. Implicitné nastavenie týchto príkazov možno zmeniť dialógovým oknom Options-Debugger.
Option – nastavenie konfigurácie Turbo Pascalu. Menu Options obsahuje príkazy, ktoré dovoľujú prezerať a meniť rôzne implicitné nastavenia Turbo Pascalu. Väčšina týchto príkazov vedie pri vyvolaní do dialógových okien.
Window – práca s oknami. Menu Window obsahuje príkazy pre riadenie práce s oknami. Tu môžete tiež okna zatvárať, meniť ich veľkosť, pohybovať s oknami atd. Tieto elementárne príkazy možno robiť myšou i v samotnom okne.
Help – pomoc. Menu Help poskytuje prístup k on-line helpu, ktorý je zobrazovaný v špeciálnom okne helpu. Textu v okne helpu hovoríme obrazovka helpu. Systém helpu efektívne ponúka informácie o integrovanom prostredí a Turbo Pascalu. Medzi kľúčovými slovami sa pohybujeme pomocou klávesy TAB. Po stlačení klávesy ENTER sa zobrazí informácia o kľúčovom slove. Ak sa chceme vrátiť o obrazovku späť, stlačíme klávesy ALT+F1. (Tiež, pokiaľ nerozumiete krátkym pokynom, ktoré sa zobrazujú v stavových riadkoch pre menu alebo položky dialógových okien.)
F1 – vyvolá sa okno s helpom (pomoc)
F2 – uloží sa súbor na pevný disk alebo iné určené miesto
Alt-F9 – preklad programu (Compile/Compile)
F3 – Open – otvorenie súboru
Alt + X – ukončenie Pascalu
File -> New – otvorí nový súbor
Ctrl + F9 – spustenie programu (Run)
Alt + F5 – prepnutie na obrazovku výpisu
Prvky jazyka Pascal – abeceda jazyka Pascal
Písmená – A..Z, a..z
Číslice – 0..9
Špeciálne symboly / ( ) * + – = := < > <> . ; [ ] { } ‚ ‚ , # $ @ ^ : _
Kľúčové (vyhradené) slová – dohovorené slová používané v programe, zvyčajne sú anglické a nemožno ich používať ako premenné (AND, ARRAY, BEGIN, CASE, CONST, DIV, DOWNTO, DO, ELSE, END, FILE, FOR, FUNCTION, GOTO, IN, IF, INHERITED, INTERFACE, LABEL, MOD, UNTIL, NOT, OF, OR, PROCEDURE, PROGRAM, RECORD, REPEAT, SET, STRING, THEN, TO, TYPE, USES, VAR, WHILE, WITH, XOR).
Direktívy – nie je ich možné používať ako premenné (ABSOLUTE, ASSEMBLER, EXTERNAL, FAR, FORWARD, INTERRUPT, NEAR, VIRTUAL).
Identifikátor – označuje objekty v Pascale (premenné, konštanty, názov programu). Je to postupnosť písmen a číslic, začínajúca písmenom (medzi písmenami a číslicami nesmie byť medzera). Nesmie sa zhodovať s vyhradenými slovami. Napr.: x, X, x1, Meno, Pocet, StranaA
Poznámky – vlastný komentár autora slúžiaci na sprehľadnenie a okomentovanie programu. Forma ich zápisu v Pascal-e je (možno ich do seba vnárať):
{ komentár }
(* komentár *)
{ ...
(* ... *)
(* ... *)
}
Návestia – slúžia na predznačenie príkazov t.j. odvolanie sa na daný príkaz na inom mieste v programe a vyzvať ho k činnosti tým, že mu odovzdáme riadenie príkazom skoku GOTO.
Znakové reťazce – špecifikum jazyka Pascal. Sú to postupnosti ľubovoľných znakov z tabuľky ASCII ohraničených znakom apostrof – ‚.
Oddeľovače – medzera, poznámka, end of line, end of file. Oddeľovače majú hlavne vplyv na čitateľnosť programu. Vhodným členením programu možno zvýrazniť navzájom si prislúchajúce časti, a tým zvýrazniť aj vlastnú štruktúru programu.
Pravidlá pre tvorbu identifikátorov:
- identifikátor sa skladá z písmen, číslic a podčiarkovníka (na začiatku môže byť len písmeno),
- nie je rozdiel medzi malými a VEĽKÝMI písmenami (v Pascale) – insenzitívny jazyk,
- identifikátor nesmie byť totožný s vyhradeným slovom,
- identifikátor musí byť jednoznačný v rámci programu alebo jeho časti (procedúra, funkcia, …) t.j. nemožno označiť rovnakým identifikátorom viacero funkcií, premenných, typov, tried,
- dĺžka postupnosti znakov identifikátora môže byť neobmedzená, avšak Turbo Pascal rozlišuje iba prvých 64 znakov.
Premenná – veličina v programe, ktorá počas realizácie môže meniť svoju hodnotu.
Konštanta – veličina v programe, ktorá počas realizácie nemení svoju hodnotu.
Typy konštánt:
- logické – hodnoty TRUE, FALSE
- znakové – postupnosť znakov napísaná v apostrofoch
- číselné
- celočíselné
- reálne
- v desatinnom tvare (používa sa desatinná bodka 10.5)
- v semilogaritmickom tvare (0.1050000E+002 = 10.5)
Výraz – predpis pre výpočet hodnoty. Obsahuje:
- operandy – konštanty a premenné
- operátory – matematické znamienka +, -, *, /
- zátvorky ( )
Priorita operácií:
- zátvorky ( )
- násobenie, delenie *, /
- sčitovanie, odčitovanie +, –
Programovací jazyk Pascal nerozlišuje veľké a malé písmená!
Každá premenná, výraz alebo funkcia môže v Pascale nadobúdať hodnoty len jedného typu.
Príklad:
Určite poradie operácií a vypočítajte:
2 * a + 3 * b – 5 + 4 * a / 2 – ( 3 + 7 * c ) * 2 = ?
Jazyk Turbo Pascal umožňuje využívanie bežnej sady aritmetických operátorov:
* násobenie
/ delenie
div celočíselné delenie
mod zvyšok po celočíselnom delení
+ sčítanie
– odčítanie
Údajové typy jazyka Pascal
Je to prípustná množina hodnôt, ktoré môže premenná nadobúdať.
Rozdelenie:
- jednoduché
- ordinálne
- štandardné – Boolean, Char, Integer
- neštandardné – vymenovaný typ, interval
- neordinálne – Real
- štruktúrované – pole (array), množina (set), záznam (record), súbor (file)
- ukazovateľ (smerník, pointer)
Real – množina hodnôt sú reálne čísla, závislá na prekladači s rozsahom [10-38, 1038].
Operácie: +, -, *, /
Funkcie použiteľné pre typ real:
abs();
sqr();
sqrt();
exp(); { umocnenie }
sin();
cos();
tan();
arctan();
round(); { zaokruhluje vsetko nahor }
trunc(); { skrati hodnotu real na integer so zaokruhlenim na najblizsie cele cislo smerom nadol }
Abstraktný príklad použitia typov v Pascale (platí pre typy premenných v príslušných výrazoch):
real + integer = real
real * integer = real
integer / integer = real
Integer – celočíselný typ, množina hodnôt sú celé čísla od -32768 do +32767.
V pamäti zaberá 2 B (2 bajty).
Odvodené typy od typu integer sú:
- byte – [0, 255] – 1 B
- word – [0, 65535] – 2 B
- shortint – [-128, 127] – 1 B
- longint – [-2147438346, 2147438347] – 4 B
Operácie: +, -, *, div, mod, <, >, =
Funkcie použiteľné na tento typ:
abs();
pred();
succ();
odd(); { zistuje parnost alebo neparnost cisla }
sqr();
Char – množina hodnôt sú všetky znaky z klávesnice, priraďujeme len jeden znak, je to množina znakov, ktoré sa vyjadrujú zobraziteľnou reprezentáciou ohraničenou apostrofmi (‚a‘, ‚.‘, ‚A‘, …).
Druhou, menej častou variantou je vyjadrenie znaku pomocou ASCII kódu, ktorému predchádza znak mriežky – #. Znaky sú uložené v ASCII (American Standard Code for Information Interchange) tabuľke. Pôvodne obsahovala 128 znakov anglickej abecedy, po pridaní národných symbolov má 255 znakov.
Prvých 31 znakov ASCII tabuľky je riadiacich, pretože sa pôvodne používali na riadenie niektorých funkcií telegrafných operácií výstupného zariadenia. Riadiace znaky nemožno priamo generovať z klávesnice. Sú to napríklad:
- #7 – zvonček,
- #8 – vymazanie jedného predošlého znaku podľa umiestnenia kurzora (BACKSPACE),
- #9 – tabulátor (TAB),
- #10 – posun na začiatok riadku (LINE FEED),
- #13 – skok na nový riadok (ENTER),
- #27 – ESC.
Všetky znaky ASCII tabuľky (tej základnej) sú v rozsahu [0, 127]. Na transformáciu znaku na číslo je možné použiť štandardnú funkciu ord() a opačne, na transformáciu čísla na ASCII znak funkciu chr().
Príklady použitia funkcií a hodnoty, ktoré vrátia:
ord('A'); { vrati hodnotu 65 }
ord('M'); { vrati hodnotu 77 }
ord('O'); { vrati hodnotu 48 }
chr(65); { vrati znak 'A' }
chr(52); { vrati znak '4' }
S údajovým typom char je možné vykonávať porovnávanie (podľa ordinálnych čísel v ASCII).
Boolean – logický typ, priraďujeme len hodnoty True alebo False
V pamäti zaberá 1 B (1 bajt) a deklaruje sa:
var x:boolean;
Množina hodnôt: {TRUE, FALSE}.
Operácie: and, or, xor, not
Operátory: <, >, =, <=, >=, <>
Tabuľka logických operácií:
A B A and B A or B not A A xor B
True True True True False False
True False False True False True
False True False True True True
False False False False True False
Vymenovaný typ
Definícia vymenovaného typu je založená na explicitnom určení hodnôt typu. Umožňuje programátorovi definovať lineárne usporiadanie hodnôt, ktoré sú usporiadané pomocou identifikátorov.
Použité identifikátory sú pre daný program chápané ako konštanty vymenovaného typu, ktorému náležia. Každá použitá konštanta má v identifikácii priradené číslo, ktoré zodpovedá jej poradiu pri definícii typu.
Prvý identifikátor má hodnotu nula – 0 -, druhý jedna – 1 -, atď. Pri deklarácii premenných vymenovaného typu je nutné použiť klauzulu type.
Príklad deklarácie vymenovaného typu:
type dni=(pon,uto,str);
karty=(cerven,zelen,zalud,gula);
...
succ(cerven); { vrati hodnotu 'zelen' }
Typ interval
Definovanie typu pomocou intervalu je založené na využití už definovaného ordinálneho typu s tým, že množinu hodnôt obmedzíme len na hodnoty určitého intervalu, ktorého hranice udáme v definícii.
Príklad deklarácie intervalu [1, 100]:
max = 1..100;
Ďalší príklad deklarácie intervalu pomocou vymenovaného typu:
type dni=(pon,uto,str,stv,pia,sob,ned);
var pracdni=pon..pia; { vyuzili sme vymenovany typ 'dni' }
vikend=pia..ned; { vyuzili sme vymenovany typ 'dni' }
Pri definovaní typu pomocou intervalu môžeme použiť aj štandardné ordinálne typy, napr.:
index = 1..100; { udajovy typ INTEGER }
male_pismena='a'..'z'; { udajovy typ CHAR }
Výhodou definovania vlastných údajových typov je použitie hodnôt typu, ktoré objekt nadobúda v reálnom prostredí. Tiež získavame výhody spojené s kontrolou, či objekt nadobúda hodnoty daného typu, teda prípustné hodnoty, napríklad v slovných úlohách.
Ordinálny typ – je to usporiadaná množina hodnôt a vieme určiť hodnotu predchádzajúcu a nasledujúcu.
Pripúšťa pevne danú konečnú množinu hodnôt s prirodzeným očíslovaním všetkých týchto hodnôt celými číslami. Týmto číslam sa potom hovorí aj ordinálne (poradové) čísla jednotlivých hodnôt. Ordinálne čísla definujú poradie medzi hodnotami príslušného typu.
Z nemčiny Ordnung = poriadok.
Štruktúra programu:
- hlavička programu: program meno;
- blok:
- deklaračná časť
- príkazová časť:
- begin
- príkaz 1;
- príkaz 2;
- …
- príkaz n;
- end.
Deklaračná časť:
V obecnom prípade môže byť pred vlastným programom až 6 deklaračných úsekov:
Program (meno súboru )
Uses (zoznam jednotiek )
Label (zoznam návestí )
Const (deklarácia konštánt )
Type (definovanie dátových typov )
Var (deklarácia premenných)
(deklarácia užívateľských procedúr a funkcií)
Begin
(telo programu)
End.
Všetky úseky však nemusia byť použité.
Deklarácia jednotiek (knižníc) : USES
Pod slovom USES budeme rozumieť zoznam jednotiek, ktoré má prekladač spojiť s prekladaným programom. K najpoužívanejším patria:
System – štandardné procedúry a funkcie
Crt – jednotka pre prácu s obrazovkou
Printer – jednotka pre prácu s tlačiarňou
Dos – komunikácia s operačným systémom
Graph – jednotka pre prácu s grafickou procedúrou a funkciou
Príklad:
Uses Crt, Dos;
Deklarácia konštánt
CONST (medzera) IDENTIFIKÁTOR=hodnota;
Príklad:
CONST PI=3.14;
CONST MENO=`Jozef`;
Deklarácia premenných
VAR (medzera) IDENTIFIKÁTOR:údajový typ;
Príklad:
VAR A:INTEGER;
VAR X:REAL;
VAR C:CHAR;
VAR A,B: INTEGER;
X,Z:REAL;
C:CHAR;
Príklad: Napíš deklaráciu premenných A, B, C, ktoré sú celočíselné, X je logický typ, K, L sú reálne, konštanta E má hodnotu 10, konštanta Z má hodnotu -125, konštanta H má hodnotu Fero.
Procedúry vstupu a výstupu READ, READLN, WRITE, WRITELN
Procedúra read(x) číta zo vstupného súboru, t.j. klávesnice jednu lexikálnu jednotku a jej hodnotu priradí premennej x.
Počet znakov, ktoré sa príkazom read prečítajú zo vstupného súboru, závisí od typu premennej. Ak x je typu char, prečíta sa jeden znak, ak je typu integer, prečíta sa postupnosť znakov zodpovedajúca dekadickému zápisu čísla s prípadným znamienkom podľa definície celého čísla.
Číslu môže predchádzať ľubovoľný počet medzier a oddeľovačov, ktoré sa pri čítaní ignorujú.
Ak je premenná typu real, prečíta sa postupnosť znakov, ktorá zodpovedá zápisu reálneho čísla.
Príkaz readln pracuje podobne ako read s tým rozdielom, že zvyšok riadku, z ktorého čítame sa vynechá a nasledujúcim príkazom read sa začne čítať od začiatku nového riadku.
Príklad:
VAR CISLO : INTEGER; {Deklarácia premennej cislo }
BEGIN {Začiatok programu }
READ(CISLO); {Prečíta číslo typu Integer z klávesnice a uloži ho do premennej cislo }
END. {Koniec programu }
Ak zadáme z klávesnice hodnotu napr. 54, do premennejcislo sa uloží hodnota 54.
Príklad:
VAR A,B,C : INTEGER;
BEGIN {Začiatok programu }
READ(A,B,C); {alebo načíta tri čísla oddelené od seba oddeľovačom }
READ(A); {Prečíta číslo }
READ(B);
READ(C);
END. {Koniec programu }
Vstupujúce čísla, ktoré sa ukladajú do premenných A,B,C musia byť oddelené od ostatných (pri zadávaní z klávesnice) hodnôt medzerou (oddeľovačom) alebo stlačením klávesy ENTER.
Príkaz ReadLn sa vykonáva tak, že zvyšok riadka, z ktorého čítame, sa vynechá a nasledujúcim príkazom Read sa začne čítať od začiatku nového riadku. Môžeme ho použiť aj s parametrom.
Príkaz ReadLn(A) má rovnaký účinok ako dvojica príkazov Read(A); ReadLn; ktoré sa vykonávajú za sebou.
Príklad:
var pocet,poradie,stupen:integer;
suma,koren:real;
op1,op2:char;
begin
read(pocet);
read(koren);
read(poradie);
read(op1);
read(op2);
read(stupen);
read(suma);
...
end.
Vyššie uvedený príklad na vstupe spracuje napríklad toto:
645 +42.75 -141+ +2↵
2485↵
Procedúra write vypisuje parameter na štandardný výstup – obrazovku monitora.
Pod pojmom výstup budeme rozumieť výpis informácie na určité periférne zariadenie, najčastejšie na obrazovku. Formát zápisu vyvolania výpisu na obrazovku je Write alebo WriteLn.
Príklad:
VAR CISLO : INTEGER; {Deklarácia premennej cislo }
BEGIN {Začiatok programu }
READ(CISLO); {Prečíta číslo typu Integer z klávesnice a uloží ho do premennej cislo }
WRITE(‚Číslo=‘,CISLO); {Vypíše hodnotu, ktorá je uložená v premennej cislo }
END. {Koniec programu }
Príkazy Write a WriteLn sa odlišujú takto:
Write vypíše údaje za sebou a kurzor ostane za posledným znakom.
WriteLn tiež vypíše údaje, ale kurzor sa za posledným znakom posunie na nový riadok.
Príkaz WriteLn možno použiť aj s parametrami. Zápis WriteLn(A,B,C); je ekvivalentný so zápisomWrite(A,B,C);WriteLn; kde rozsah je celočíselný výraz daný konštantou, premennou alebo funkciou, určujúci celkovú šírku poľa, do ktorého bude položka zapísaná, či zobrazená.
Príklad:
CONST A = 4; {Deklarovanie konštánt }
B = 3;
meno = ‚JANO‘;
BEGIN {Začiatok programu }
WRITE(A,B); {Vypíše 43 }
WRITELN(A,‘ ‚,B); {Vypíše 4 3 }
WRITE(A,‘ ‚,meno); {Vypíše 4 JANO }
END. {Koniec programu }
Príklad:
CONST a = 4; b = 50; {Priradenie hodnôt }
c = 3.14159;
d = ‚C‘;
VAR a,b : INTEGER; {Deklarovanie konštánt }
c : REAL;
d : CHAR;
BEGIN {Začiatok programu }
WRITE(a:2); {Výstup .2 }
WRITE(b:4); {Výstup ..50 }
WRITE(c:10:5); {Výstup …3.14159 }
WRITE(d:3); {Výstup ..C }
READLN; {Čaká na znak s klávesnice }
END.
Okrem vlastného výpisu výstupnej hodnoty možno prepísať aj formát výstupu – šírku výpisu a v prípade reálneho čísla aj počet desatinných miest:
write(x:pz); { pz - pocet znakov, na kolko sa ma vypisat x }
write(x:pz:pd); { pd - pocet desatinnych miest realneho cisla }
Ak sa pre výstupnú premennú neudáva formát výpisu, vypíše sa toľko znakov, koľko ich má premenná. Ak je počet znakov (pz) väčší, ako je potrebné, doplní sa zľava medzerami. Ak je počet znakov (pz) menší, zapíše sa v prípade integer a real minimálny potrebný počet znakov z hodnôt iných typov len daný počet znakov zľava.
Pokiaľ sa real neformátuje počtom znakov (pz) a počtom desatinných miest (pd), vypíše sa v semilogaritmickom tvare – 0.00100E10.
Príklad:
var i,j:integer;
a:real;
b:boolean;
c:char;
begin
i:=132;
j:=-17;
a:=3.14159;
b:=true;
c:='C';
write(i:5); { 132}
write(j:4); { -17}
write(a:10:5); { 3.14159}
write(a:4:3); {3.14}
write(not b:6); { false}
write(c:4); { C}
write(j:2); {-17}
end.
Napíšte program na sčítanie a vynásobanie dvoch čísel.
program pocty;
var a,b,sucet,sucin:real;
begin
writeln('Zadaj dve cisla za sebou pomocou ENTER');
readln(a);
readln(b);
sucet:=a+b;
sucin:=a*b;
writeln('Sucet ',a:5:2,'+',b:5:2,'=',sucet:5:2);
writeln('Sucin ',a:5:2,'+',b:5:2,'=',sucin:5:2);
readln;
end.
Napíšte program na výmenu dvoch čísel medzi sebou.
program vymena_cisel;
var a,b,vymena:integer;
begin
readln(a);
readln(b);
{ tu prebehne teraz vymena hodnot medzi premennymi 'a' a 'b' }
vymena:=a;
a:=b;
b:=vymena;
end.
Príkaz priradenia
Priraďovacím príkazom priraďujeme premennej na ľavej strane príkazu hodnotu, ktorú dostaneme vyhodnotením výrazu na pravej strane príkazu.
Príklad:
VAR x,y:INTEGER; {Deklarácia premenných}
BEGIN {Začiatok programu }
x:=54; {Do premennej x uloží 54 }
y:=x+11; {Do premennej y uloží 65 }
END. {Koniec programu }
Úloha: Napíšte program, ktorý vypočíta obsah a obvod štvorca.