Pascal - dawniej jeden z najpopularniejszych języków programowania, uniwersalny wysokiego poziomu, ogólnego zastosowania, oparty na języku Algol. Został opracowany przez Niklausa Wirtha w 1971 roku. Nazwa języka pochodzi od nazwiska francuskiego fizyka, matematyka i filozofa Blaise Pascala.
Pierwszy opis języka Wirth zawarł w The programming language Pascal, Acta Informatica 1/1971, a kolejny, poprawiony w The programming language Pascal (Revised Report), Bericht der Fachrgruppe Computer – Wissenschaften 5/1972. Pierwszym podręcznikiem języka Pascal była pozycja Jensen, Wirth, Pascal, User Manual and Report 1974.
Pierwotnie służył celom edukacyjnym do nauki programowania strukturalnego. Popularność Pascala w Polsce była większa niż w innych krajach ze względu na dostępność kompilatorów w pirackich wersjach (zanim pojawiło się prawo ochrony własności intelektualnej), prostotę języka oraz jego popularyzację przez wyższe uczelnie. Szczyt popularności tego języka przypadł na lata 80. i początek 90 XX wieku. Wraz ze zniesieniem ograniczeń COCOM, upowszechnieniem się sieci oraz systemu Unix (następnie Linuksa) stopniowo został wyparty przez C i C++.
Jedną z popularniejszych implementacji kompilatorów tego języka był produkt firmy Borland International – Turbo Pascal. W chwili obecnej dość mocno rozpowszechnionym obiektowym dialektem języka Pascal jest Object Pascal osadzony w Delphi oraz Kyliksie (również wyprodukowanych przez Borland International).
Istnieją wolne kompilatory Pascala, na przykład Free Pascal, a także wolne środowisko IDE jak Lazarus.
Dla niektórych programistów niektóre cechy Pascala wykluczają jego zastosowanie w poważnych projektach i są powodem krytyki tego języka. Według nich powinien zostać jedynie narzędziem do nauki programowania. Natomiast nie potwierdzają tego tysiące aplikacji (również komercyjnych) stworzonych w Pascalu w latach 80. i 90..
Zalety Pascala - czytelność kodu, rygorystyczna kontrola typów danych, wraz z pojawieniem się C stały się dla programistów wadami. Wypromowanym przez C standardem stała się zwięzłość kodu:
Pascal: C++:
****************** Blok ***********************
begin {
end; }
*********** Działania arytmetyczne ************
a:=a+5; a+=5;
Inc(a); a++;
Dec(a); a--;
c := 5;
b := 5; a=b=c=5;
a := 5;
************ Pętla z licznikiem ***************
for i:=10 downto 1 do for(i=10;i;--i)
begin {
end; }
************ Pętla z warunkiem ****************
while(W > 0) do while(W)
begin {
end; }
**************Pętla nieskończona***************
while (true) do for(;;)
begin {
end; }
while(true)
{
}
Pascal bardzo rygorystycznie podchodzi do kontroli typów, tj. sprawdza czy do zmiennej typu A nie próbuje się przypisać wartości typu B. Jest to dobra cecha języka dydaktycznego, ale dla doświadczonego programisty może być uciążliwa. Zabiegi w rodzaju rzutowania zmiennej typu całkowitego na typ Bool są częstą praktyką - w Pascalu kompilator się na to nie zgodzi.
Popularność Pascala wzrosła z pojawieniem się Delphi - środowiska programistycznego, opartego na obiektowym Pascalu, pozwalającego na błyskawiczne tworzenie atrakcyjnych wizualnie aplikacji pod Windows. Wraz z pojawieniem się biblioteki windows dla C++ oraz narzędzi do automatycznego tworzenia GUI, Pascal znów stracił na znaczeniu.
Najprostszy formalnie poprawny program (oczywiście niewykonujący żadnego działania):
begin
end.
Obliczanie n–tego wyrazu ciągu Fibonacciego:
program fibonacci;
var a, b, c, i, liczba : integer;
begin
writeln('Podaj ktora liczbe z ciagu Fibonacciego chcesz zobaczyc: ');
readln(liczba);
a:=1;
b:=1;
if liczba<=2 then writeln('Wynik: ', a) else
begin
for i:=3 to liczba do
begin
c:=a+b;
a:=b;
b:=c;
end;
writeln('Wynik: ', c);
end;
end.
Funkcja obliczająca liczbę w ciągu Fibonacciego metodą rekurencyjną.
function fibonacci(nr:integer):integer;
begin
if (nr =1) or (nr = 2) then
fibonacci :=1
else
fibonacci := fibonacci(nr-1) + fibonacci(nr-2);
end;
Oto przykład innego programu napisanego w Pascalu. Wylicza on miejsca zerowe funkcji kwadratowej.
program funkcja;
var delta , x1 , x2 : real;
var a, b, c : real;
begin
writeln ('Podaj wspolczynniki a, b, c trojmianu kwadratowego: ');
readln (a, b, c);
delta := (b * b) - (4 * a * c);
writeln ('Delta = ', delta);
if delta < 0 then
writeln('BRAK MIEJSC ZEROWYCH FUNKCJI !')
else if delta > 0 then
begin
x1 := ((- b) - sqrt(delta)) / (2 * a);
x2 := ((- b) + sqrt(delta)) / (2 * a);
writeln('X1 = ' , x1);
writeln('X2 = ' , x2);
end
else
begin
x1 := (- b) / (2 * a);
writeln('X1 = ' , x1);
end;
end.
Program oblicza silnię dowolnej liczby n.
program silnia;
var
n:integer;
function silnia(n:integer):integer;
begin
if n=0 then silnia:=1
else silnia:=n*silnia(n-1);
end;
begin
writeln('Program oblicza silnie z dowolnej liczby');
write('Podaj liczbe: ');
readln(n);
writeln(n,'!=',silnia(n));
end.
Program sortujący tablicę liczb metodą bąbelkową.
program sortowanie;
const zakres = 99;
var
Liczby:array [1..zakres] of integer;
i,j,k,n:integer;
procedure czytaj;
begin
writeln('Program sortuje dane metoda babelkowa');
write('Podaj ilosc liczb: '); read(n);
for i:=1 to n do
begin
write('Liczba ',i,' = '); read (Liczby[i]);
end;
end;
procedure pisz;
begin
writeln('Oto posegregowane elementy:');
for i:=1 to n do
begin
write(liczby[i],' ');
end;
readln
end;
begin
czytaj;
for i:=2 to n do
for j:=n downto i do
begin
if Liczby[j-1] > Liczby[j] then
begin
k:=liczby[j-1];
Liczby[j-1]:=Liczby[j];
Liczby[j]:=k;
end;
end;
pisz;
readln
end.