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.txt; THeron.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.