18. Pascal

Pascal je název programovacího jazyka, původně určeného hlavně k výuce programování. Jeho různé varianty a odvozeniny se však používají i k programování reálných aplikací. Jeho název byl zvolen na počest francouzského filosofa, matematika a fyzika Blaise Pascala.

Návrh programovacího jazyka Pascal pochází ze začátku 70. let od profesora Niklause Wirtha z Vysoké školy technické v Curychu. Autor sledoval návrhem jazyka tyto cíle:

  • vytvořit jazyk vhodný pro výuku programování, který by byl založen na omezeném počtu srozumitelných konstrukcí,
  • navrhnout strukturu jazyka tak, aby bylo snadné implementovat Pascal na většině tehdejších počítačů.

První verze Pascalu byla publikována r. 1971, o 3 roky později (1974) byla uveřejněna opravená definice jazyka. V roce 1981 byla vydána norma ISO. Vedle toho vznikla řada komerčních implementací Pascalu, které se od Pascalu dle normy ISO více či méně odchylovaly, zejména zavedením dalších konstrukcí zjednodušujících praktické programování. V oblasti PC dosáhla patrně největšího úspěchu implementace Turbo Pascal firmy Borland. Objektové rozšíření Pascalu se pak stalo i základem systému Delphi téže firmy.

  • Vlastnosti
    • vznik v 70. letech na technická univerzitě Curychu
    • pro výuku programování strukturovaného programování
    • přesná deklarace dat, přehledný zápis
  • Struktura programu
    • příkazy odděleny středníkem na samostatných řádcích
    • odsazení (indentace) příkazů podle zanoření v programové struktuře
    • Deklarační část
      • hlavička, deklarace typů, konstant, proměnných, procedur a funkcí
    • Hlavní program
      • programové struktury – seskupení příkazů, větvení, cykly …

  • Typy dat
  • Způsob deklarace
type evidence = record
                 begin
                  jmeno  : string[20];
                  vek    : integer;
                  vydelek: real;
                 end;
var zamestnanci: array[1..200] of evidence;
    k,n,i      : integer
    soubor     : text;

Programové struktury

  • Vstup a výstup dat
    • využití systémových procedur pro čtení read() a pro výpis write()
    • načtení hodnoty do proměnné cislo
      • write('Zadej hodnotu cisla : ') ;readln('cislo')
    • výpis výsledku součtu čísel v proměnných a,b
      • writeln('Soucet cisel ',a,' + ',b,' = ',a+b)
  • Syntaxe podmínek
  • Jednoduchá podmínka
if cislo < 0
  then write('Chyba!');
  • Úplná podmínka
if cislo < 0
  then write('Chyba!')
  else write(cislo);
  • Kombinovaná podmínka
if (a > 5) and (a < 10)
  then write('Spravne zadani')
  • Syntaxe cyklů
  • cyklus FOR
s počítadlem
    for i:=1 to 100 do
     begin
       příkaz_cyklu;
       příkaz_cyklu;
     end;
  • cyklus WHILE
se vstupní podmínkou
    while i > 0 do
      begin
        příkaz_cyklu;
        příkaz_cyklu;
      end;
  • cyklus REPEAT – UNTIL
s výstupní podmínkou
    repeat;
      příkaz_cyklu;
      příkaz_cyklu;
    until konec = 'k';

Práce se soubory

  • Deklarace a připojení
    • var <Název proměnné> : File of Integer ; {ciselny soubor}
      • var <Název proměnné> : Text ; {textovy soubor}
    • assign (<Jméno proměnné> , <Jméno souboru> );
      • assign (Soubor , 'C:\Text.txt');
  • Vytvoření/přepis souboru
    • rewrite ( <Jméno proměnné> );
  • Čtení souboru
    • reset ( <Jméno proměnné> );
  • Připojení na konec souboru
    • append ( <Jméno proměnné> );
  • Uzavření souboru
    • close ( <Jméno proměnné> ); 

Jazykové konstrukce

Pascal je ve své původní formě čistým procedurálním jazykem, obsahující skupinu řídicích konstrukcí jako je forwhileifthenelse, převzaté z ALGOLu. Obsahuje však také mnoho konstrukcí pro strukturování dat, jako jsou definice datových typůzáznamy (také struktury, record)ukazatele (pointer)výčty a množiny (set).

Programy v Pascalu začínají klíčovým slovem program, v původních variantách se seznamem standardních vstupů a výstupů ve formě parametrů. Následuje hlavní blok příkazů, uvozený klíčovými slovy begin a end. Jednotlivé příkazy jsou odděleny středníkem, tečka ukončuje program nebo jeho jednotku (unit). Jazyk nerozlišuje velká a malá písmena.

Hello world

Standardní program Hello world vypadá v jazyce Pascal takto:

program HelloWorld(output);
begin
  WriteLn('Hello, World!');
end.

Datové typy

Datový typ definuje strukturu proměnné a způsob nakládání s ní. Jazyk obsahuje několik předdefinovaných typů, přičemž programátor může odvozením tvořit typy další. Mezi předdefinované typy patří:

Datový typTyp hodnot, které lze do typu uložit
integerCelé číslo
realČíslo s plovoucí řádovou čárkou
booleanHodnota true nebo false
charJeden znak znakové sady
stringŘetězec znaků, indexovaný od 1

Rozsah povolených hodnot, které je možno uložit do proměnných těchto typů, je dán implementací. Mezi některými typy existují konverzní funkce, například Round (zaokrouhlení real nainteger).

Řídicí struktury

Pascal je strukturovaný jazyk, to znamená, že běh programu je strukturován ve standardních konstrukcích, a to ideálně bez použití příkazu goto:

Základní řídicí strukturou je struktura if..then..else, která řídí průběh programu v závislosti na určené podmínce:

if a > b then
  writeln('Condition met')
else
  writeln('Condition not met');

Cykly

Cykly slouží pro opakované provádění příkazu nebo bloku příkazů:

while a < 10 do begin
                a:= a+1;
                end; 

for i := 1 to 10 do
  writeln('Iteration: ', i:1);

repeat
  a := a + 1
until a = 10;

case i of
  0: write('zero');
  1: write('one');
  2: write('two')
end;

Cykly lze okamžitě ukončit příkazem break; příkaz continue znamená přechod na začátek další iterace cyklu.

Procedury a funkce

Pascal umožňuje členit programy na procedury a funkce, které lze navíc libovolně zanořovat. Konstrukce program je vždy logicky nejzazší blok. Funkce se od procedury liší tím, že umožňuje vrátit volajícímu příkazu návratovou hodnotu příslušného typu. Nastavení návratové hodnoty se provádí přiřazením do názvu funkce nebo u novějších variant do pseudoproměnné result.

program muj(output);

procedure vypis(var i: integer);

  function dalsi(i: integer): integer;
  begin
    dalsi := i + 1;
  end;

begin
  WriteLn('Celkem: ', i);
  i := dalsi(i);
end;

begin
  i := 1;
  while i <= 10 do
    vypis(i);
end.

Pro okamžité opuštění procedury nebo funkce slouží příkaz exit.

Operátory

Pascal podporuje tyto operátory:

OperátorVýznam
 :=přiřazení
=rovnost
<>nerovnost
>větší než
<menší než
>=větší nebo rovno
<=menší nebo rovno
+součet, spojení řetězců, sjednocení množin
rozdíl, rozdíl množin
*násobení, průnik množin
/dělení, výsledkem je reálné číslo
divceločíselné dělení
modzbytek po celočíselném dělení, modulo
andlogické AND
orlogické OR
notlogická negace
inpřítomnost prvku v množině (set)
@adresa proměnné nebo podprogramu
^dereference ukazatele