Pascal – przykłady, zadania

Twórca Pascala:  Niklaus Wirth

 

Wersje Pascala: Turbo Pascal, Borland Pascal, Delphi Pascal

 

IDE -  Integrated Development Environment) -  zintegrowane środowisko robocze Turbo Pascala

 

Uruchomienie – Turbo.exe

 

User Screen – Alt F5

 

Kompilacja : Build, Compile – z opcją zapisu na dysk

 

Skierowanie wyników pliku wykonywalnego  zamiast na ekran:
>   (kasowanie istniejącego) lub   >>   (dopisanie)

Np. THeron.exe >> w1.txtTHeron.exe >> w1.txt

 

 

Rozszerzenie plików źródłowych – PAS, wykonywalnych - EXE

 

Instrukcje rozdzielamy: średnikiem

 

Schemat programu

Program nazwa;

(*moduły

Uses {np. Crt}

*)

{Stałe, zmienne

Const

Var

}

/* Funkcje, procedury

{

Function

Procedure

}

*/

{Program głowny}

Begin

End.

 

Program zaczyna się słowem BEGIN a kończy …... END.  (z kropką).

Opcjonalny tytuł: Program nazwa;

 

Słowa kluczowe – 3 przykłady: Begin, end, procedure, write, read;

 

Instrukcja – zapis operacji do wykonania przez komputer – wyrażenia, wywołania funkcji i procedur.

Wyrażenia składają się ze stałych, operatorów i identyfikatorów

 

Identyfikatory – nazwy obiektów np. zmiennych.
Mogą one zawierać litery, cyfry i znaki podkreślenia, nie mogą jednak zaczynać się od cyf,  nie mogą zawierać spacji ani polskich liter.

Duże litery nie są odróżniane od małych.

 

Separatorem w programie (deklaracji, procedur, funkcji) jest znak średnika.

 

Komentarzem w Pascalu jest dowolny ciąg znaków ujęty w nawiasy klamrowe {  }   lub   (*  *)

 

Zmienna – jako pojemnik na dane, każda zmienna musi być określonego typu.

Zmienne służą so przechowywania wartości..

 

Typy zmiennych określa się przy pomocy słowa kluczowego var,
var zmienna: typ;
np. var liczba1, liczba2: redl;

 

Typy całkowite:
Porządkowy (wyliczeniowy), np. type figury-(kwadrat, prostokat, trojkat, okrag); kolory_kart=(trefl, karo, kier, piki);

Okrojony – podajemy 2 skrajne wartości,  np. type literkim=’a..’k’; wielokaty-keadrat..trojkat; dzien_roku=1..365;

Przykłady:

Type oceny=(ndst., dop, dst, db, bdb, cel); oceny_poz=(dst..cel);

Var stopien_prom: oceny_poz; stopien_ogolnie: oceny;

logiczny Boolean – wartość logiczna true lub false,

znakowy Char - pojedynczy znak ASCII

Typ całkowity

Integer -32768, 32767 – 2 bajty

ShortInt -128, 127

Byte 0,255 – 1 bajt

Word 0,65535 – 2 bajty

Longint  - 2147483648 do 2147483647   4 bajty

Typy rzeczywiste

Single 1.5e-45 do 3.4e38

Double 5.0e-324 do 1.7e308 – 8 bajtów

Extended 3.4e-4932 do 1.1e4932

Comp –9.2e18 do 9.2e18  bardzo długa liczba rzeczywista

string - napis (łańcuch, ciąg znaków)  -  ciąg do 255 znaków, np.  'Napis'

 

Inne typy

File – plik,  np. var file1: file of byte; {plik o elementach typu byte};  var file_txt: text;

Array – tablica, np.   var t1, t2: array[1..30] of integer;

 

Do wprowadzania wartości zmiennych z klawiatury służą procedury read i readln, które powinny być uzupełniane procedurami write i writeln.

Chcąc wstrzymać działanie programu, można użyć procedury readln.

 

Instrukcja – zapis operacji do wykonania przez komputer – wyrażenia, wywołania funkcji i procedur.

Wyrażenia składają się ze stałych, operatorów i identyfikatorów

W skład wyrażeń wchodzą stałe i zmienne (reprezentujące dane) oraz operatory (znaki, np. dodawania, mnożenia) i funkcje

Do budowania wyrażeń potrzebne są operatory (tzw. znaki np. dodawanie, mnożenie itp.):

 

Operatory arytmetyczne, bitowe, logiczne oraz relacyjne (operatory porównania).

Do zmiany kolejności działań służą nawiasy.

 

Operatory arytmetyczne:  *, /, div (dzielenie całkowite), mod (reszta z dzielenia) , +, -

Pierwszeństwo mają:  operatory mnożenia i dzielenia (*, /, div i mod),  wykonywane zawsze przed dodawaniem i odejmowaniem.

 

Operatory relacyjne: =, <>, <. <=, >, >=

Operatory logiczne: not - negacja,  and - iloczyn logiczny or – suma logiczna – alternatywa  

 

Priorytet wszystkich operatorów:

not                                        1 (najwyższy)

*     /    div   mod and     2 (niższy)

+  -  Or                                  3 (jeszcze niższy)

= <> < <= > >=                   4 (najniższy)  - relacyjne

 

Stałe (const)

Stałe to komórki pamięci, które mają takie same wartości przez cały czas działania programu.

Definiujemy przy pomocy słowa const, np.  const ROS = 200.0/Pi;

 

Decyzje

 

if then else lub case

 

If warunek then instrukcja;

Np. if (warunek<min) or (warunek>max) then warunek:=0;

read(liczba); IF liczba=100 THEN writeln('Podałeś liczbę równą 100');

if warunek then instrukcja-1 else instrukcja-2;

 

Instrukcję case stosujemy gdy zachodzi konieczność podjęcia kilku decyzji.

case przełącznik of     wartość-1 : akcja-1;     wartość-2 : akcja-2;     ...     else akcja-domyślna   end;

Np.

case liczba_interesantow of    

  0 : mozna_wyjsc_do_fryzjera;   

  1, 2 : niech_czekaja;    

 3..6 : trzeba_obsluzyc;   

 else wypisz('INWENTARYZACJA')  

end;

 

case ch of

‘A’..’Z’, ‘a’..’z’: writeln(‘litera’);

‘0’..’9’: writeln(‘cyfra’);

‘+’,’-‘,’*’,’/’: writeln(‘operator’);

else writeln(‘znak specjalny’);

end;

 

Obliczenia cykliczne (iteracyjne)

Do cyklicznego (iteracyjnego) wykonywania instrukcji służą w Pascalu pętle.

 

Instrukcje pętli mogą być sterowane warunkiem (while-do, repeat-until) lub licznikiem (for-to/downto).

Pętle while i repeat używane są wówczas, gdy nie znamy z góry liczby przebiegów pętli, możemy natomiast określić warunek jej zakończenia.

 

Pętla while wykonuje się tak długo, jak długo warunek jest spełniony, repeat - tak długo, jak długo jest niespełniony

 

Pętla z warunkiem na początku

while warunek do lista-polecen

Instrukcja while – do pozwala na zapętlenie wykonywania instrukcji tak długo, jak długo jest spełniony warunek.

while warunek do instrukcja;   Przykład:  while ch=’ ‘ do ch:=getchar;

 

Pętla z warunkiem sprawdzanym po wykonaniu poleceń (repeat..until)

repeat lista_polecen until warunek

Wykonywane są wszystkie instrukcje między słowami kluczowymi  repeat i until.

Wykonywanie instrukcji kończy się, jeśli wartość warunku jest true, w przeciwnym przypadku powtarzane jest ponownie.

Przykłady:

Repeat   readln(liczba);  dług:=dług+1; until liczba=0;

repeat ch:=getchar until ch <> ‘ ‘;

repeat  write(‘Wprowadź cyfrę 0..9 ‘); readln(i); until (i>=0) and (i<=9);

 

 Instrukcje tworzące zawartość pętli repeat muszą wykonać się co najmniej raz,

zaś w przypadku pętli while mogą nie wykonać się ani razu.

 

Instrukcja for

Umożliwia wykonanie określonej liczby przebiegów – jest kontrolowana licznikiem

for zmienna:= wart_poczatkowa to wart_koncowa  do instrukcja;

for zmienna:= wart_poczatkowa downto wart_koncowa  do instrukcja;

Zmienna musi być typu całkowitego, znakowego lub logicznego.

Przykłady:

for i:=1 to 5 do writeln(i);

for i:=5 downto 1 do writeln(i);

 

Tablice w Pascalu

Tablica jest to struktura danych zawierająca uporządkowany zbiór obiektów tego samego typu.

Odpowiada matematycznemu pojęciu wektora – tablica jednowymiarowa lub macierzy – tablica dwuwymiarowa.

Elementy tablicy wskazujemy za pomocą indeksów

Tablicę tworzymy przy pomocy słowa kluczowego array

var zmienna_tabl:=array[zakresy_indeksow] of typ_elementu;  {zmienna tablicowa}

Np.  var t1, t2: array[1..30] of integer;

Typ tablicowy:

Type identyfikator_tabl = array [zakresy_indeksow] of typ_ellementu;

Np.  type wektor = array[1..30] of integer;

var t1, t2: wektor;

 

Do obsługi tablic wykorzystuje się często pętle for.

Np. for i:=1 to i do writeln(t1[i]); 

 

 

Podprogramy: procedury I funkcje

Podprogram jest to wyróżniona część programu, komunikująca się z pozostałą częścią w ściśle określony sposób.

Do komunikacji wykorzystywane są parametry, w definicji podprogramu nazywane formalnymi, a przy wywoływaniu podprogramu parametrami aktualnymi.

Podprogram może być wielokrotnie wywoływany z części głównej programu lub z innych podprogramów.

Funkcje pod swoją nazwą zwracają obliczoną wartość, a procedury nie.

Wszystkie obiekty zdefiniowane wewnątrz procedur są lokalne, tj. widoczne tylko dla nich i ewentualnie procedur wewnętrznych..

Wszystkie obiekty zdefiniowane w blokach nadrzędnych wobec procedur są dla nich dostępne, łącznie ze strukturami globalnymi, zdefiniowanymi w programie głównym..

Zdefiniowanie obiektu lokalnego o tej samej nazwie co obiekt z bloku nadrzędnego, powoduje jego przesłonięcie (odwołania odnoszą się do obiektu lokalnego).

Definicje funkcji (procedur) muszą być umieszczone w programie przed częścią operacyjną i muszą występować w odpowiedniej kolejności.

Stosowanie funkcji i procedur jest korzystne ze względu na poprawę czytelności i efektywności programu, zmniejszenie podatności na błędy i skrócenie czasu potrzebnego na jego pisanie.

 

Procedury

 

Procedure nazwa (lista_parametrow_formalnych);

{deklaracje stałych, zmiennych, typów}

begin  {treść procedury}   end;

 

Przykład:

Procedura do wyświetlenia na ekranie trójkąta złożonego z gwiazdek, czyli czegoś takiego:

*

**

***

****

….

 

                program Szlaczki;

                                var

                                i : integer;           { licznik wierszy }

                 

                procedure Szlaczek(Znak : char; Ile : integer);

                                begin

                                for i := 1 to Ile do             { wypisz szlaczek }

                                                write(Znak);      { złożony z iluś znaków }

                                writeln

                end;

                 

                begin    {Program główny}

                                for i := 1 to 20 do             { wypisz 20 szlaczków }

                                Szlaczek('*', i); 

                end.

 

 

program Trygonometria;   { demonstracja przekazywania parametrów }      

 var     i : integer;     s, c : real;    

procedure SinCos(x : real; var SinX, CosX : real);   { oblicza jednocześnie sinus i cosinus argumentu – przekazywanie przez nazwę - var}      

begin    

 SinX := sin(x);     CosX := cos(x);  

end;      

 

begin     SinCos(Pi/3,s,c); { oblicz wartości }    

writeln(s:8:3, c:8:3); { i wypisz je na ekranie }  

end.

 

 

 

 

Funkcje

 

Function nazwa_funkcji (lista_parametrow_formalnych): typ_wyniku;

{deklaracje stałych, zmiennych, typów}

 begin 

 {treść funkcji}  

  nazwa_funkcji:=wynik;  { w treści funkcji musi być umieszczone przypisanie: nazwa_funkcji:=wynik}

 end;

 

W treści funkcji musi być umieszczone przypisanie: nazwa_funkcji:=wynik

Wywołanie funkcji:

Zmienna:=nazwa_funkcji(lista_parametrow_aktualnych);

 

Przykłady:

 

(* Function declaration *)

function UpCaseStr(S: string): string;

var

  I: Integer;

begin

  for I := 1 to Length(S) do

  if (S[I] >= 'a') and (S[I] <= 'z') then

  Dec(S[I], 32);

  UpCaseStr := S;

end;

 

Function kwadrat(bok: real): real;

Begin

 Kwadrat:=bok*bok;

End;

 

Zapamiętywanie danych  na dysku i odczyt danych

Wiąże się ze strukturalnym typem danych - typem plikowym.

 

Definicja typu plikowego rozpoczyna się od słowa kluczowego FILE.

np.

TYPE wyniki = FILE of integer;

 

Pliki tekstowe (file of char)  mają zwykle rozszerzenie TXT, są predefiniowane w Pascalu i mają identyfikator TEXT.

 

 

Przykłady:

program p1;

USES CRT;

VAR

f :text;  { f - zmianna plikowa - plik tekstowy}

BEGIN

 assign(f, 'C:\plik1.txt');   {przydzielenie do zmiennej pliku plik1.txt}

 rewrite(f);  {otwarcie pliku do zapisu}

 writeln(f, 'Jakieś zdanie numer 1');

 writeln(f, 'Jakieś zdanie numer 2');

 Close(f);  {zamkniecie pliku}

END.

 

program p2;

USES CRT;

VAR

t: text;

a:char;

BEGIN

clrscr;

assign(t, 'c:\plik1.txt');  {przydzielenie do zmiennej pliku plik1.txt}

reset(t);   {otwarcie pliku do czytania}

REPEAT

 read(t, a);  {czytanie z pliku}

 write(a);

UNTIL EOF(t);

close(t);

readln;

END.