background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 1 

__________________________________________ 

 

 

Ćwiczenie 1 

1.

 

Napisz program wydruku napisów PASCAL:  

a.

 

poziomo  

b.

 

pionowo.  

2.

 

Napisz program wyświetlający Twoją wizytówkę.  
 
Do narysowania ramki wykorzystaj kody ASCII:  
 

 

Procedury standardowe Write, Writeln 

Do wyprowadzania wyników na standardowe urządzenia wyjścia słuŜą procedury 
standardowe Write, Writeln, których wywołania mają odpowiednio postać: 

Write (lista_argumentów_wyjściowych)  
Writeln (lista_argumentów_wyjściowych)  
 
RóŜnica między tymi procedurami polega na tym, Ŝe procedura Writeln, po wykonaniu tych 
samych czynności co Write, powoduje dodatkowo przejście do następnego wiersza.  
Poszczególne elementy listy argumentów wyjściowych oddzielane są przecinkami. KaŜdy z 
tych elementów powinien mieć jedną z następujących postaci:  
wyraŜenie  
wyraŜenie : długość  
wyraŜenie : długość : miejsca dziesiętne 

 

Kody ASCII 

Znaki z rozszerzonej klawiatury uzyskujemy wpisując kod znaku z klawiatury numerycznej 
przy wciśniętym ALT. 

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 2 

__________________________________________ 

 

 

 

Ćwiczenie 2 

1.

 

Napisz program wyświetlający na ekranie planszę znakową przedstawiającą konkretny 
program oraz jego autora i instytucję.  

2.

 

Napisz program wyświetlający na ekranie planszę zakończenia programu, np. napis na 
wyczyszczonym ekranie:  
(C) IMIĘ NAZWISKO 2002  

Procedury Read, Readln 

Do wprowadzania danych ze standardowego urządzenia wejścia systemu 
mikrokomputerowego słuŜą standardowe procedury Read i Readln, których wywołania mają 
postać:  
Read (lista_zmiennych)  
Readln (lista_zmiennych)  
Poszczególne elementy z listy oddziela się przecinkami. Elementy listy zmiennych mogą być 
dowolnymi zmiennymi typu całkowitego, rzeczywistego, znakowego lub łańcuchowego.  

 

Ćwiczenie 3 

Napisać program, który wczytuje dane o osobie:  
nazwisko, imię, płeć, data urodzenia (dzień, miesiąc, rok), adres (kod, miasto, ulica, numer 
domu, mieszkanie) a następnie drukuje wczytane dane (na wyczyszczonym ekranie) w 
postaci:  
 
Imię Nazwisko  
ul. ulica numer / mieszkanie  
kod miasto  
 
ur. dzień/miesiąc/rok 
 

Deklaracja zmiennych 

Deklaracja zmiennych ma postać:  
lista_zmiennych : opis_typu; 

 

Instrukcja przypisania 

Instrukcja przypisania ma postać:  
zmienna := wyraŜenie 

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 3 

__________________________________________ 

 

 

Ćwiczenie 4 

1.

 

Napisz program, który wydrukuje tekst: S = 1 + 2 + 3 + 4 + 5 oraz (w następnym 
wierszu) wartość sumy S.  

2.

 

Napisz program, który wydrukuje tekst: S = a + b oraz (w następnym wierszu) wartość 
sumy S, gdzie zmienne a, b: Integer; S: Real. Przypisz zmiennym a, b wartości 5 i 7.  

3.

 

Napisz program, który przypisuje zmiennym I1, I2 typu Integer wartości 7 i 128, a 
następnie zamienia miejscami zawartość I1 z zawartością I2 i drukuje je.  

Operatory arytmetyczne 



 

+ dodawanie  



 

- odejmowanie  



 

* mnoŜenie  



 

/ dzielenie  

 

Funkcje arytmetyczne 



 

sinx - Sin (x),  



 

kwadrat x - Sqr (x),  



 

pierwiastek kwadratowy z x - Sqrt (x),  



 

liczba 

- Pi,  



 

e

x

 - Exp (x),  



 

log

e

x - Ln (x)  

 

 

Ćwiczenie 5 

Napisać program obliczania i wyświetlania na ekranie monitora wartości następujących 
wyraŜeń:  

a.

 

 

 

 
= 3.74135066182217E-0006 

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 4 

__________________________________________ 

 

b.

 

 

 

 
= 7.70309024759882E+0000 
UWAGA. Argument funkcji sin musi być podany w radianach:  
 

 

 

Wartość 

daje funkcja bezargumentowa Pi.  

c.

 

 

 

 
= 1.29735380625554E+0000 

d.

 

 

 

 
= -2,88991457859972E-0001 
UWAGA  
 

 

Ćwiczenie 6 

Napisać program obliczania pola S oraz obwodu L:  

a.

 

trójkąta równobocznego o danym boku a  

b.

 

trójkąta o danych bokach a, b, c  

c.

 

trójkąta prostokątnego o danych przyprostokątnych a, b  

d.

 

trójkąta prostokątnego, gdy dane są: przyprostokątna a oraz kąt do niej przyległy b  

e.

 

prostokąta o bokach a, b  

f.

 

kwadratu o danym boku a  

g.

 

koła o danym promieniu r  

h.

 

sześciokąta foremnego o danym boku a  

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 5 

__________________________________________ 

 

 
Dla kaŜdej figury zaprojektuj osobny ekran, np.  
I ekran  
OBLICZANIE POLA S ORAZ OBWODU L FIGUR PŁASKICH  
 
OPRACOWAŁ JAN KOWALSKI 
SEMESTR Iac 
<ENTER>  
 
II ekran  
OBLICZANIE POLA S ORAZ OBWODU L TRÓJKĄTA RÓWNOBOCZNEGO O BOKU 

a =  
Pole S =  
Obwód L =  
<ENTER> 
 

Instrukcja warunkowa IF ... THEN ... ELSE 

Instrukcje warunkowe uzaleŜniają wykonanie innych instrukcji od spełnienia określonego 
warunku.  
 
Ogólna postać instrukcji "jeŜeli" jest następująca:  

IF wyraŜenie THEN instrukcja  
 
albo 

IF wyraŜenie THEN instrukcja1 ELSE instrukcja2  
 
przy czym wartością wyraŜenia powinna być wartość logiczna TRUE lub FALSE. Instrukcja 
występująca po słowie THEN lub ELSE moŜe być dowolną instrukcją prostą lub 
strukturalną. JeŜeli wartością wyspecyfikowanego wyraŜenia jest TRUE, to zostanie 
wykonana instrukcja po słowie THEN. W przeciwnym przypadku będzie wykonana następna 
instrukcja po instrukcji "jeŜeli" (gdy brak ELSE) lub instrukcja2 podana po słowie ELSE.  

 

Ćwiczenie 7 

Obliczyć i wyświetlić na ekranie monitora wartość funkcji f(x) dla danej liczby rzeczywistej x 
(czytanej z klawiatury):  
 

 

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 6 

__________________________________________ 

 

 
Algorytm:  

1.

 

wczytaj x  

2.

 

jeŜeli |x|>=1 , to oblicz f(x) według pierwszego wzoru, w przeciwnym razie oblicz f(x) 
według drugiego wzoru  

3.

 

wydrukuj f(x)  

Ćwiczenie 8 

Napisz program, który dla zadanych wartości a, b, c rzeczywistych, oblicza pierwiastki 
rzeczywiste równania kwadratowego  
ax

2

 + bx + c=0, a <> 0 

i drukuje ich wartości z odpowiednimi objaśnieniami.  
 
WE: a, b, c - rzeczywiste  
WY: 
a = 0 - informacja, Ŝe nie jest to równanie kwadratowe  
a <> 0 - rozwiązania równania.  
Dane do testowania  

a.

 

a=0 b=1 c=2  
To nie jest równanie kwadratowe.  

b.

 

a=2 b=4 c=2  
Rozwiązanie: x0 = -1.  

c.

 

a=1 b=-5 c=6  
Rozwiązanie: x1 = 2, x2 = 3.  

d.

 

a=1 b=1 c=1  
Brak rozwiązań rzeczywistych.  

 
ALGORYTM  
Wczytaj a, b, c.  
JeŜeli a = 0, to wydrukuj komunikat, Ŝe nie jest to równanie kwadratowe,  
w przeciwnym razie: 

  Oblicz D 
  JeŜeli D < 0, to wydrukuj komunikat o braku rozwiązań rzeczywistych  
  w przeciwnym razie  
      jeŜeli D = 0 to oblicz i wydrukuj x0  
      w przeciwnym razie oblicz i wydrukuj x1, x2.  

 
 
 
 
 
 
 

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 7 

__________________________________________ 

 

Ćwiczenie 9 

Dla wczytanych z klawiatury:  
a

1

 - pierwszy wyraz ciągu  

r - róŜnica ciągu  
n - numer wyrazu ciągu do obliczenia  
obliczyć n-ty wyraz ciągu arytmetycznego oraz n-tą sumę częściową:  
a

n

 = a

1

 + (n-1) r  

sn = (a

1

 + a

n

) n / 2  

 
Wydrukuj otrzymane wartości poprzedzone odpowiednimi komunikatami. Program bada 
poprawność n (n > 0). Dla n < 1 - wydruk komunikatu o błędzie.  
 
ALGORYTM:  

1.

 

wczytaj a

1

, r, n  

2.

 

jeŜeli n<1 to wydrukuj komunikat o błędzie, w przeciwnym razie oblicz i wydrukuj a

n

 

i s

n

.  

Instrukcja wyboru CASE 

Instrukcja CASE jest instrukcją wyboru (selekcji) sterującą wyborem jednej z instrukcji do 
wykonania. Składnia instrukcji CASE jest następująca:  

CASE selektor OF  
sekwencja_instrukcji_wyboru  
END  
 
lub  

CASE selektor OF  
sekwencja_instrukcji_wyboru  
ELSE instrukcja  
END  
 
Wartość selektora musi być typu porządkowego. Sekwencja instrukcji wyboru składa się z 
instrukcji, przy czym kaŜda instrukcja poprzedzona jest jedną lub kilkoma stałymi (zwanymi 
stałymi wyboru), które od instrukcji oddzielone są dwukropkiem.  
Stałe wyboru oddzielane są przecinkami i mogą mieć postać:  

stała  
 
albo  

stała..stała  
 
KaŜda z instrukcji sekwencji instrukcji wyboru oraz instrukcja po słowie ELSE mogą być 
dowolnymi instrukcjami prostymi lub strukturalnymi.  

 

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 8 

__________________________________________ 

 

Ćwiczenie 10 

Napisać program, który dla podanych wielkości: rok i miesiąc podaje liczbę dni miesiąca. 
Uwzględnić lata przestępne. Rok i miesiąc wczytać z kontrolą poprawności (rok > 1, 0 < 
miesiąc < 13).  
WE:  
rok = 2005  
miesiąc = 10  
WY:  
2005 PAŹDZIERNIK: 31 DNI. 
 

Ćwiczenie 11 

Napisać program obliczający sumę liczb naturalnych od 1 do n, sumę ich kwadratów oraz 
sumę ich sześcianów. Program ma umoŜliwiać wybór jednego z trzech wariantów obliczeń. 
Wykorzystać w programie następujące wzory:  
 

 

Ćwiczenie 11 

Napisać program przeliczający podaną wartość w jednej z trzech walut (dolary amerykańskie, 
euro i złote) na jedną z dwóch pozostałych. 
 

Instrukcja iteracyjna FOR 

Instrukcja "dla" - wykorzystywana zwykle w celu wykonania pewnej grupy instrukcji w 
przypadku, gdy liczba powtórzeń jest znana w danym miejscu programu. Instrukcja "dla" 
moŜe mieć jedną z dwóch postaci:  

FOR zs := wp TO wk DO Instrukcja  
FOR zs := wp DOWNTO wk DO Instrukcja 
 
Zmienna zs (nazywana zmienną sterującą), musi być identyfikatorem zmiennej typu 
porządkowego i powinna być lokalna w bloku zawierającym daną instrukcję "dla", tzn. w 
czasie wykonywania Instrukcji wartość zmiennej sterującej nie moŜe być zmieniana. Wartość 
wp (wartość początkowa) i wk (wartość końcowa) musi być zgodna w sensie przypisania z 

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 9 

__________________________________________ 

 

typem zmiennej sterującej. Instrukcja po słowie DO moŜe być instrukcją prostą lub 
strukturalną. Instrukcja podana po DO nie zostanie wykonana ani razu, gdy  
- wartość wp jest większa od wartości wk (w TO)  
- wartość wp jest mniejsza od wartości wk (w DownTo). 
W przypadku próby zmiany wartości zmiennej sterującej w instrukcji wchodzącej w skład 
instrukcji "dla" wystąpi błąd.  
Realizacja pętli FOR: 
 

 
 
 

 

 

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 10 

__________________________________________ 

 

Ćwiczenie 12 

1.

 

Wyprowadź znaki ze zbioru znaków o numerach z zakresu 32-255 (zastosuj pętlę ze 
zmienną sterującą i: Integer i funkcję Chr(i)).  

2.

 

Wprowadź n liczb rzeczywistych, oblicz dla kaŜdej z nich kwadrat i sześcian oraz 
wyprowadź numer liczby, liczbę oraz jej kwadrat i sześcian. Program powinien 
zapraszać uŜytkownika do podania kolejnej liczby i wyprowadzać dane oraz wyniki 
związane z jedną liczbą w jednym wierszu.  

Ćwiczenie 13 

Napisz program wydruku tabliczki mnoŜenia. 
 

Instrukcja iteracyjna REPEAT 

Instrukcja "powtarzaj" - słuŜy do opisywania iteracji ze sprawdzeniem warunku na końcu i 
ma postać:  

REPEAT  
 I1;  
 I2;  
 {...} 
 In  
UNTIL warunek 
 
Warunek jest wyraŜeniem logicznym a kaŜda instrukcja moŜe być dowolną instrukcją prostą 
lub strukturalną. Nie jest konieczne stosowanie instrukcji złoŜonej, zakres instrukcji 
"powtarzaj" jest ograniczony słowami kluczowymi "REPEAT" i "UNTIL". Ostatnia 
instrukcja przed UNTIL nie musi być zakończona średnikiem. 
 
Realizacja pętli REPEAT: 
 

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 11 

__________________________________________ 

 

 

 
 

 

Ćwiczenie 14 

Wprowadź ciąg znaków zakończony '*'. Policz i wyprowadź ilość znaków w ciągu. Policz i 
wyprowadź ilość cyfr, ilość duŜych liter, ilość małych liter i ilość innych znaków. 
 

Ćwiczenie 15 

Na wejściu dany jest ciąg współrzędnych punktów na płaszczyźnie (x,y). Napisz program 
sprawdzania, które z tych punktów leŜą wewnątrz kwadratu o wierzchołkach w punktach (-1,-
1), (1,-1), (1,1), (-1,1). Zakończ sprawdzanie, gdy znajdziesz 10 takich punktów. 
 

Instrukcja iteracyjna WHILE 

Instrukcja "dopóki" słuŜy do opisywania iteracji ze sprawdzeniem warunku (wyraŜenie 
logiczne) na początku. Składnia:  

WHILE warunek DO Instrukcja  
 
Warunek jest wyraŜeniem logicznym a kaŜda instrukcja moŜe być dowolną instrukcją rostą 
lub strukturalną.  
 

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 12 

__________________________________________ 

 

UWAGA. JeŜeli przed wykonaniem pętli WHILE wartością wyraŜenia jest False - pętla nie 
wykona się ani razu. JeŜeli przed wykonaniem pętli WHILE wartością wyraŜenia jest True i 
wewnątrz pętli nie zmienimy wartości tego wyraŜenia, to otrzymana instrukcja nie zostanie 
nigdy zakończona. 
 
Realizacja pętli WHILE: 
 

 

 

Algorytm zamiany liczby dziesiętnej na binarną 

 

PRZYKŁAD  

13 = 8 + 4 + 1 = 1*2

3

 + 1*2

2

 + 0*2

1

 + 1*2

0

 = (1101)

2

  

ALGORYTM  

13 MOD 2 = 1    13 DIV 2 = 6     

  6 MOD 2 = 0      6 DIV 2 = 3     

  3 MOD 2 = 1      3 DIV 2 = 1     

  1 MOD 2 = 1      1 DIV 2 = 0    KONIEC 

 

 

 

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 13 

__________________________________________ 

 

Ćwiczenie 16 

Napisać program zamiany wczytanej liczby całkowitej zapisanej w systemie dziesiętnym na 
liczbę zapisaną w systemie binarnym. 
 

Ćwiczenie 17 

Napisz program drukowania tabelki wartościowań funkcji y(x) = ax

3

 + bx

2

 + cx + d dla 

dowolnych wartości parametrów a, b, c, d oraz argumentu x zmieniającego się od 0 do 10 ze 
stałym krokiem równym 0.1.  
Co 20 wartości x - zatrzymanie ekranu, po ENTER - wyczyszczenie i wydruk następnych 
wartości. 
 

Definicja procedury 

PROCEDURE NazwaProcedury (ListaParametrówFormalnych);  
BEGIN 
ciąg instrukcji 
END; {NazwaProcedury}  
 

 

Równanie prostej 

Równanie prostej przechodzącej przez dwa punkty A i B płaszczyzny:  



 

y- y

A

 = (y

B

 - y

A

)/(x

B

 - x

 A

) (x - x

A

), gdy x

B

 ≠ x

A

 

 

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 14 

__________________________________________ 

 



 

x = a, gdy x

B

 = x

A

 = a  

 

 

Zadanie 1 

Napisz program znajdowania równań dwu prostych (na płaszczyźnie XY), z których jedna 
przechodzi przez dwa punkty P

1

 i P

2

, zaś druga przechodzi przez dany punkt P

 3

 i przez punkt 

P

4

 , będący środkiem odcinka P

 1

 P

2

 . 

 
 

Definicja funkcji rzeczywistej 

FUNCTION NazwaFunkcji (ListaParametrówFormalnych) : Real;  
BEGIN 
ciąg instrukcji  
{w treści funkcji musi wystąpić instrukacja podstawienia pod nazwę funkcji:  
NazwaFunkcji := wyraŜenie; } 
END; {NazwaFunkcji}  
 

 

Algorytm wyznaczania potęgi liczby 

Potęgę liczby a 

b

 moŜemy wyznaczyć ze wzoru:  

 

b

 = e 

ln a

  

 

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 15 

__________________________________________ 

 

Zadanie 2 

Napisz funkcję obliczającą a 

b

. Napisz program wyznaczania potęg dla dowolnej ilości par 

liczb rzeczywistych a i b. Program powinien pytać uŜytkownika, czy chce obliczać potęgę 
kolejnej liczby. 
 

Definicja funkcji logicznych  

FUNCTION NazwaFunkcji (ListaParametrówFormalnych) : Boolean;  
BEGIN 
ciąg instrukcji  
{w treści funkcji musi wystąpić instrukacja podstawienia pod nazwę funkcji:  
NazwaFunkcji := wyraŜenie; }  
END; {NazwaFunkcji}  
 

 

Zadanie 3 

Napisz podprogram funkcji logicznej badającej przynaleŜność punktu do koła. Napisz 
program, który wczytuje parametry koła: współrzędne środka i promień (z badaniem 
poprawności) oraz ciąg współrzędnych punktów a drukuje informację, czy punkt naleŜy do 
koła czy nie, i liczbę punktów naleŜących do koła. Do wczytania współrzędnych punktów 
uŜyj dodatkowej procedury. 
 

Definicja funkcji znakowej 

FUNCTION NazwaFunkcji (ListaParametrówFormalnych) : Char;  
BEGIN 
ciąg instrukcji  
{w treści funkcji musi wystąpić instrukacja podstawienia pod nazwę funkcji:  
NazwaFunkcji := wyraŜenie; } 
END; {NazwaFunkcji}  

 

Algorytm zamiany duŜej litery na małą 

ZauwaŜmy, Ŝe w tabeli kodów ASCII odległość między duŜą literą a odpowiadającą jej małą 
literą jest stała i wynosi  

odleglosc = ord('a') - ord('A') 

Znalezienie dla danej duŜej litery odpowiadającej jej małej litery moŜemy uzyskać według 
wzoru:  

mala_litera := chr(ord(duŜa_litera) + odleglosc) 

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 16 

__________________________________________ 

 

 

Zadanie 4 

Napisać funkcję DownCase, która zamienia duŜą literę na małą.  
Nagłówek:  

FUNCTION DownCase (Zn: Char): Char; 

Funkcja zwraca zamienioną literę. JeŜeli Zn nie jest duŜą literą, to zwracany jest bez zmian.  
Napisać program, który  



 

wczytuje ciąg znaków zakończony Enterem,  



 

oddrukowuje ten ciąg z zamienionymi małymi literami na duŜe,  



 

oddrukowuje ten ciąg z zamienionymi duŜymi literami na małe,  



 

oddrukowuje ten ciąg z usuniętymi spacjami.  

Do wczytania ciągu i zmian zastosować oddzielne procedury. Ponadto zdefiniować procedurę 
kończącą program (wyczyszczenie ekranu, podpis programisty).  

UWAGA 

Dostęp do kolejnych znaków napisu s typu String uzyskujemy w następujący sposób:  
s[i], gdzie i = 1, 2, ... length(s)  

PRZYKŁAD 

Instrukcja:  

FOR i := 1 TO length(s) DO Write(s[i],' ') 

słuŜy do wydruku napisu s "rozstrzelonymi" literami. 
 
 

Definicja funkcji całkowitoliczbowej 

FUNCTION NazwaFunkcji (ListaParametrówFormalnych) : Numeryczny;  
BEGIN 
ciąg instrukcji  
{w treści funkcji musi wystąpić instrukacja podstawienia pod nazwę funkcji:  
NazwaFunkcji := wyraŜenie; } 
END; {NazwaFunkcji}  
 
gdzie Numeryczny jest dowolnym typem całkowitoliczbowym  

 

 

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 17 

__________________________________________ 

 

Algorytm wyznaczania liczb doskonałych 

Liczbą doskonałą jest kaŜda liczba, której suma dzielników równa się jej samej: 

6 = 1 + 2 + 3 (liczba doskonała)  
8 <> 1 + 2 + 4 (liczba nie jest doskonała)  
28 = 1 + 2 + 4 + 7 + 14 (liczba doskonała)  

ZauwaŜny, Ŝe największy dzielnik liczby jest mniejszy bądź równy połowie tej liczby.  

Aby sprawdzić, czy liczba jest doskonała, naleŜy wyznaczyć i zsumować wszystkie jej 
dzielniki: 

s := 0;  
FOR i := 1 TO n DIV 2 DO  
IF n MOD i = 0 THEN s := s + i; 
IF n = s  
THEN Writeln('Liczba jest doskonała')  
ELSE Writeln('Liczba nie jest doskonała') 
 

 

Zadanie 5 

Napisz funkcję obliczającą sumę wszystkich podzielników dowolnej liczby naturalnej. Napisz 
program wyznaczania liczb doskonałych z zakresu 1..10000 
 

Definicja funkcji całkowitoliczbowej 

FUNCTION NazwaFunkcji (ListaParametrówFormalnych) : Numeryczny;  
BEGIN 
ciąg instrukcji  
{w treści funkcji musi wystąpić instrukacja podstawienia pod nazwę funkcji:  
NazwaFunkcji := wyraŜenie; } 
END; {NazwaFunkcji}  
 
gdzie Numeryczny jest dowolnym typem całkowitoliczbowym  

 

Ćwiczenie 6 

1.

 

Napisz funkcję wyznaczania n-tego wyrazu ciągu Fibonacciego.  
Ciąg Fibbonacciego określamy w następujący sposób:  
f

0

 = 0,  

f

1

 = 1,  

f

n

 = f

n-1

 + f

n-2

, dla n > 1  

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 18 

__________________________________________ 

 

Napisz program wyznaczający wszystkie liczby Fibonacciego z przedziału 1..n, gdzie 
n - liczba dodatnia (wczytana z kontrola poprawności).  

2.

 

Napisz funkcję wyznaczającą minimum z n wczytanych liczb.  
Napisz funkcję wyznaczającą maksimum z n wczytanych liczb.  
Napisz program, który w zaleŜności od wyboru uŜytkownika wyznacza minimum albo 
maksimum z n wczytanych liczb, gdzie n - liczba dodatnia (wczytana z kontrolą 
poprawności).  

Definicja funkcji całkowitoliczbowej 

FUNCTION NazwaFunkcji (ListaParametrówFormalnych) : Numeryczny;  
BEGIN 
ciąg instrukcji  
{w treści funkcji musi wystąpić instrukacja podstawienia pod nazwę funkcji:  
NazwaFunkcji := wyraŜenie; } 
END; {NazwaFunkcji}  
 
gdzie Numeryczny jest dowolnym typem całkowitoliczbowym  

 

Algorytm Euklidesa 

Algorytm wyznaczania największego wspólnego podzielnika liczb opiera się on na fakcie, Ŝe 
jeśli od większej liczby odejmiemy mniejszą, to ta mniejsza liczba i otrzymana róŜnica będą 
miały taki sam największy wspólny dzielnik jak pierwotne liczby. Gdy przy kolejnym 
odejmowaniu otrzymamy parę takich samych liczb, to znaleźliśmy NWD.  
 
PoniŜej przedstawiam dwa algorytmy: pierwszy - oparty na odejmowaniu liczb, drugi - 
wykorzystujący dzielenie.  
 
Algorytm wykorzystujący odejmowanie liczb 

1.

 

dane są dwie liczby a i b  

2.

 

dopóki liczby a i b nie są sobie równe, powtarzaj krok trzeci w przeciwnym wypadku 
przejdź do kroku czwartego  

3.

 

od większej liczby odejmij mniejszą i tę większą zastąp otrzymaną róŜnicą  

4.

 

wyprowadź wynik NWD (NWD = a)  

 
Algorytm Euklidesa wykorzystujący dzielenie 

1.

 

dane są dwie liczby naturalne dodatnie a i b  

2.

 

oblicz c jako resztę z dzielenia a przez b  

3.

 

zastąp a przez b, zaś b przez c  

4.

 

jeŜeli b = 0, to szukane NWD = a, w przeciwnym wypadku przejdź do kroku drugiego  

5.

 

wyprowadź wynik NWD  

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 19 

__________________________________________ 

 

 

 

Zadanie 7 

Napisz funkcję obliczającą największy wspólny podzielnik liczb według pierwszego 
algorytmu a drugą - według drugiego.  
Napisz program wyznaczania największego wspólnego podzielnika dla dowolnej ilości par 
liczb naturalnych a i b. Program powinien pytać uŜytkownika, czy chce obliczać największy 
wspólny podzielnik kolejnych liczb. 
 

Funkcje rekurencyjne 

W części operacyjnej funkcji rekurencyjnej następuje wywołanie tej samej funkcji. Jest to 
analogia do znanego w matematyce rekurencyjnego definiowania pewnych wzorów.  

 

Algorytm wyznaczania największego wspólnego 
podzielnika liczb 

Rekurencyjna wersja algorytmu wyznaczania największego wspólnego podzielnika liczb 
oparta jest na następującej definicji rekurencyjnej  
 

 

 

Algorytm wyznaczania liczb Fibonacciego 

Rekurencyjna wersja algorytmu wyznaczania liczb Fibonacciego oparta jest na następującej 
definicji rekurencyjnej  
 

 

 

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 20 

__________________________________________ 

 

Zadanie 8 

1.

 

Napisz funkcję obliczającą największy wspólny podzielnik liczb. Napisz program 
wyznaczania największego wspólnego podzielnika dla dowolnej ilości par liczb 
naturalnych a i b. Program powinien pytać uŜytkownika, czy chce obliczać największy 
wspólny podzielnik kolejnych liczb.  

2.

 

Napisz funkcję wyznaczania n-tego wyrazu ciągu Fibonacciego. Napisz program 
wyznaczający wszystkie liczby Fibonacciego z przedziału 1..n, gdzie n - liczba 
dodatnia (wczytana z kontrolą poprawności).  

 

Ekran w trybie znakowym 

 

 

 
Znak w lewym górnym rogu ekranu ma współrzędne (1, 1).  
Znak w prawym dolnym rogu ekranu ma współrzędne (x

max

 , y

 max

).  

Wartości (x

max

, y

max

) zaleŜą od trybu ekranu. W trybie 80-kolumnowym te współrzędne mają 

wartość (80, 25)  

 

Procedury 



 

GoToXY (x, y)  
- ustawia kursor w bieŜącym oknie w punkcie o współrzędnych (x, y)  



 

Delay (czas)  
- zatrzymuje wykonanie programu na określoną liczbę milisekund  

 

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 21 

__________________________________________ 

 

Zadanie 9 

Napisz program symulujący w trybie znakowym ruch piłeczki odbijącej się pionowo od 
podłogi. Piłeczka w kolejnym odbiciu osiąga wysokość niŜszą o 1/4 od poprzedniej 
wysokosci. Początkowa wysokość jest równa wysokości ekranu. 
 

Zadanie 10 

Napisz program drukowania choinki złoŜonej z trapezów o wspólnej osi. KaŜdy trapez jest 
zdefiniowany przez swoją wysokość i długość krótszej (górnej) podstawy. Wszystkie trapezy 
są symetryczne i mają w podstawach nieparzystą liczbę gwiazdek.  
Trapez (4, 3):  
   ***  
  *****  
 *******  
*********  
Choinka jest opisana kompletem danych zawierającym liczbę trapezów i dane o kolejnych 
trapezach. Zdefiniuj podprogram drukowania trapezu we wskazanym miejscu. Zakładamy, ze 
w wierszu mieści się 80 znaków i Ŝe jest 25 wierszy. 
 

Procedura 



 

GoToXY (x, y)  
- ustawia kursor w bieŜącym oknie w punkcie o współrzędnych (x, y)  



 

Window (x1, y1, x2, y2)  
- definiuje okno znakowe, x1, y1, x2, y2: Byte  
(x1, y1) - lewy górny naroŜnik,  
(x2, y2) - prawy dolny naroŜnik),  

 

Zadanie 11 

Napisz procedurę rysowania okienka znakowego w współrzędnych wskazanych parametrami, 
otoczonego pojedynczą ramką, na górnej krawędzi której umieszczony zostanie napis, 
przekazywany jako kolejny parametr procedury. Kursor naleŜy ustawić w pierwszym wierszu 
i pierwszej kolumnie utworzonego okienka. Procedura powinna reagować na błędne dane 
wejściowe (np. przybierać minimalne wymiary lub nic nie wykonywać). Napisz program 
testujący działanie napisanej procedury.  

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 22 

__________________________________________ 

 

 

 

 

 

Moduł Crt 

Moduł Crt zawiera funkcje i procedury umoŜliwiające posługiwanie się kodami znaków z 
rozszerzonej klawiatury, kolorami, oknami i dźwiękami, sterowanie trybami ekranu.  

Deklaracja modułu Crt 

USES Crt; 

Stałe kolorów w module Crt 

Stałe te moŜna znaleźć w Helpie < Shift F1 > i np. Black  

Kolory tła i znaków:  

Kolory tła i znaków 0..7 

Stała 

wartość 

Blue 

Green 

Cyan 

Red 

Magenta 

Brown 

LightGray 

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 23 

__________________________________________ 

 

 

Kolory znaków 8..15 

Stała 

wartość 

DarkGray 

LightBlue 

LightGreen 

10 

LightCyan 

11 

LightRed 

12 

LightMagenta 

13 

Yellow 

14 

White 

15 

Procedury modułu Crt 



 

TextColor (kolor) - ustala kolor znaków pojawiających się na ekranie, kolor jest stałą 
koloru (typu Byte); migotający kolor uzyskujemy przez dodanie do koloru stałej Blink 
(np. Red+Blink)  



 

TextBackground (kolor) - ustala kolor tła znaków pojawiających się na ekranie, kolor 
jest stałą koloru (typu Byte) z zakresu [0..7]  



 

Window (x1,y1,x2,y2) - definiuje okno na ekranie; (x1,y1) - współrzędne lewego 
górnego rogu okna; (x2,y2) - współrzędne prawego dolnego rogu okna; x1 <= x2, y1 
<= y2; Standardowe okno w trybie 80 kolumnowym jest (1,1,80,25)  



 

ClrScr - wymazanie zawartości bieŜącego okna  



 

Delay (milisekundy) - zatrzymuje wykonanie programu na określoną liczbę 
milisekund  



 

Sound (częstotliwość) - włącza wewnętrzny głośnik i generuje dźwięk o podanej 
częstotliwości  



 

NoSound - wyłącza wewnętrzny głośnik  

Generowanie d

ź

wi

ę

ków w Turbo Pascalu 

PRZYKŁAD  
 
Wywołanie kolejno procedur: Sound, Delay, NoSound powoduje wygenerowanie dźwięku o 
podanej częstotliwości i długości.  

PROCEDURE Dzwiek (nuta, czas : Integer);  
BEGIN  
Sound (nuta);  
Delay (czas);  
NoSound 
END; {Dzwiek}  
 

 

 

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 24 

__________________________________________ 

 

Zadanie 12 

Napisz program wydruku nazw i wartości stałych kolorów znaków i tła w module Crt.  
 

 

 

Zadanie 13 

Zaimplementuj podprogram czytania napisów niepustych (bez moŜliwości przechodzenia 
Enterem do następnej linii ekranu). Napisz program wykorzystujący zdefiniowany 
podprogram do wczytania danych o osobie: imię, nazwisko, klasa. 
 

Tablice jednowymiarowe 

Tablica (zmienna typu tablicowego) jest ciągiem ustalonej długości elementów tego samego 
typu a dostęp do poszczególnych jej elementów następuje za pomocą tak zwanego indeksu, 
który w ogólności moŜe być wyraŜeniem. Wartości składowe mogą być zarówno typów 
prostych, łańcuchowych jak i typów strukturalnych. Dostęp do poszczególnych elementów 
tablicy uzyskuje się za pomocą indeksowania. Dopuszczalny zakres indeksów jest podany w 
definicji typu tablicowego.  

Definicja typu tablicowego 

TYPE  
identyfikator_typu = ARRAY [typy_indeksowe] OF typ_składowy;  
 
gdzie  
typy_indeksowe - opisy typu porządkowego (z wyjątkiem typu LongInt i okrojeń tego typu), 

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 25 

__________________________________________ 

 

przy czym poszczególne opisy oddziela się przecinkami.  
typ_składowy - dowolny typ.  

Przykład 

Tablica jednowymiarowa do przechowywania maksymalnie 42 napisów:  

TYPE  
Napisy = ARRAY [1..42] OF String[20];  
VAR  
imiona, nazwiska: Napisy;  
 
 
Odwołanie do i-tego imienia w tablicy imiona i i-tego nazwiska w tablicy nazwiska 
uzyskujemy w następujący sposób:  

imiona[i] := 'Janek';  
nazwiska[i] := 'Kowalski';  
 
 
Tablica dwuwymiarowa do przechowywania maksymalnie 84 napisów:  

TYPE  
indeks = (imie,nazwisko);  
Napisy = ARRAY [1..42, imie..nazwisko] OF String[20];  
VAR  
dane: Napisy;  
 
 
Odwołanie do i-tego imienia i nazwiska w tablicy dane uzyskujemy w nastepujący sposób:  

dane [i, imie] := 'Janek';  
dane [i, nazwisko] := 'Kowalski';  
 

 

Ćwiczenie 14 

Napisz program, który czyta imiona i nazwiska osób z Twojego semestru, umieszcza je w 
tablicy (tablicach) a następnie drukuje imię i nazwisko osoby o podanej liczbie porządkowej. 
 

Definicja typu tablicowego 

TYPE  
identyfikator_typu = ARRAY [typy_indeksowe] OF typ_składowy;  
 
gdzie  

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 26 

__________________________________________ 

 

typy_indeksowe - opisy typu porządkowego (z wyjątkiem typu LongInt i okrojeń tego typu), 
przy czym poszczególne opisy oddziela się przecinkami.  
typ_składowy - dowolny typ.  

 

Ćwiczenie 15 

1.

 

Napisz program, który czyta nazwiska osób z Twojego semestru, umieszcza je w 
tablicy a następnie drukuje informację czy osoba o podanym nazwisku jest zapisana w 
tablicy i pod którą wartością indeksu.  

2.

 

Napisz program, który czyta nazwiska osób z Twojego semestru, umieszcza je w 
tablicy a następnie drukuje informację, jakie nazwisko jest najwcześniejsze wg kodów 
ASCII a które najpóźniejsze i pod jakimi wartościami indeksów występują.  

Tablice jednowymiarowe 

Tablica (zmienna typu tablicowego) jest ciągiem ustalonej długości elementów tego samego 
typu a dostęp do poszczególnych jej elementów następuje za pomocą tak zwanego indeksu, 
który w ogólności moŜe być wyraŜeniem. Wartości składowe mogą być zarówno typów 
prostych, łańcuchowych jak i typów strukturalnych. Dostęp do poszczególnych elementów 
tablicy uzyskuje się za pomocą indeksowania. Dopuszczalny zakres indeksów jest podany w 
definicji typu tablicowego.  

Definicja typu tablicowego 

TYPE  
identyfikator_typu = ARRAY [typy_indeksowe] OF typ_składowy;  
 
gdzie  
typy_indeksowe - opisy typu porządkowego (z wyjątkiem typu LongInt i okrojeń tego typu), 
przy czym poszczególne opisy oddziela się przecinkami.  
typ_składowy - dowolny typ.  

Przykład 1 

Tablica dwuwymiarowa do przechowywania miesięcznych opadów z 30 lat:  

CONST  
maxRok = 30;  
TYPE  
miesiace = 1..12;  
zakresLat = 1..maxRok; 
opady = Real; 
opadyMiesieczne = ARRAY [miesiace] OF opady; 
tabliceOpadow = ARRAY [zakresLat] OF opadyMiesieczne;  
VAR  
tablicaOpadow: tabliceOpadow;  

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 27 

__________________________________________ 

 

 
Odwołanie do j-tego miesiąca w i-tym roku: 

tabliceOpadow [i, j] := 121;  

Przykład 2 

Tablica dwuwymiarowa do przechowywania trzech kolumn liczb:  

TYPE  
indeks = (uspr, nieuspr, spoz);  
Tablica = ARRAY [1..42, uspr..spoz] OF Byte;  
VAR  
dane: Tablica;  
 
 
Odwołanie do liczby, określającej ilość godzin usprawiedliwionych, nieusprawiedliwionych i 
spóźnień i-tej osoby w tablicy dane uzyskujemy w następujący sposób:  

dane [i, uspr] := 121;  
dane [i, nieuspr] := 7;  
dane [i, spoz] := 2;  
 

 

Ćwiczenie 16 

1.

 

Instytut Meteorologii Turbolandii przez 20 lat rejestrował miesięczne opady deszczu. 
Teraz meteorolodzy chcą obliczyć:  

o

 

ś

rednią opadów w kaŜdym miesiącu,  

o

 

odchylenie standardowe w kaŜdym miesiącu.  

 

 

 

2.

 

Napisz program, który czyta ilości opuszczonych godzin usprawiedliwionych i 
nieusprawiedliwionych oraz spóźnień dla wczytanej ilości osób z Twojego semestru i 
umieszcza je w tablicy. Po wczytaniu danych program drukuje zebrane informacje w 
postaci: 

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 28 

__________________________________________ 

 

lp.  usprawiedliwione  nieusprawiedliwione  spóźnienia 

1. 

2. 

67 

3. 

123 

3.

 

itd. 
 
Dane drukować dziesiątkami. Po oddrukowaniu kolejnej dziesiątki, zatrzymać 
program, wyczyścić ekran i wydrukować następną dziesiątkę. Wyznaczyć średnią 
ilość opuszczonych godzin w semestrze w poszczególnych kategoriach. Wydrukować 
listę numerów osób, których ilość godzin nieusprawiedliwionych jest większa od 
wczytanej liczby godzin (ilość >0). 

Ćwiczenie 17 

1.

 

Napisz program, który czyta nazwiska osób z Twojego semestru, umieszcza je w 
tablicy a następnie drukuje informację czy osoba o podanym nazwisku jest zapisana w 
tablicy i pod którą wartością indeksu.  

2.

 

Napisz program, który czyta nazwiska osób z Twojego semestru, umieszcza je w 
tablicy a następnie drukuje informację, jakie nazwisko jest najwcześniejsze wg kodów 
ASCII a które najpóźniejsze i pod jakimi wartościami indeksów występują.  

Typy rekordowe 

Definicja typu rekordowego  

TYPE 
nazwa_typu = RECORD 
pierwsza_lista_pól : typ_pól;  
druga_lista_pól : typ_pól;  
...  
n_ta_lista_pól : typ_pól; 
END; 
 

 

Zmienne rekordowe 

SłuŜą do przechowywania zmiennych strukturalnych niejednorodnych - typu rekordowego. 
Odwołanie do pól zmiennych typu rekordowego następuje za pomocą desygnatora pola: 
zmienna_rekordowa.nazwa_pola albo przy pomocy instrukcji wiąŜącej. Rekordów nie moŜna 
uŜywać w instrukcjach wejścia-wyjścia.  

PRZYKŁAD 

TYPE 
TData = RECORD 

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 29 

__________________________________________ 

 

dzien : 1..31;  
miesiac : 1..12;  
rok : 1900..3000 
END; 
VAR 
data: TData; 
BEGIN 
WITH data DO 
BEGIN 
dzien := 24;  
miesiac := 12;  
rok := 2001 
END 
END. 
 

 

Tablice rekordów 

Aby przechować kilka (np. 10) dat moŜna zdefiniować tablicę rekordów:  

TYPE 
Tablica = ARRAY [1..10] OF TData; 
 

 

Zadanie 18 

1.

 

Napisz program, w którym do zmiennej typu rekordowego wpiszesz dane osobowe, 
zamieszczane w dowodzie osobistym. Do wczytywania danych zdefiniuj procedurę.  

2.

 

Rozbuduj program z poprzedniego zadania o procedurę wydruku danych osobowych 
zapisanych w rekordzie.  

3.

 

Zdefiniuj tablicę potrzebną do przechowywania danych o słuchaczach z Twojego 
semestru. Napisz program, który wpisuje do tablicy dane wszystkich osób a następnie 
drukuje dane wybranej osoby.  

Rekordowa reprezentacja ułamków zwykłych 

Do reprezentacji ułamków zwykłych uŜywamy rekordów:  

TYPE 
Naturalna = 1..MaxInt; 
Wymierna = RECORD 
licznik : Integer;  
mianownik : Naturalna  
   END; 
 

 

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 30 

__________________________________________ 

 

Zadanie 19 

Napisz program wykonujący cztery działania na wczytanych ułamkach zwykłych: dodawanie, 
odejmowanie, mnoŜenie, dzielenie. Do wczytania i wydruku ułamków oraz działań zdefiniuj 
osobne procedury. 
 

Typy plikowe 

W Pascalu wyróŜniamy trzy typy plików:  



 

zdefiniowane  



 

tekstowe  



 

niezdefiniowane  

Definicja typu plikowego:  

a.

 

zdefiniowanego  

TYPE 

identyfikator_typu = FILE OF opis_typu_elementów_pliku; 

PRZYKŁADY  

TYPE 

TLiczby = FILE OF Integer;  

 

TYPE 

TWiersz = ARRAY [1..80] OF Char;  
TPlikWierszy = FILE OF TWiersz;  

 

TYPE 

TKsiazka = RECORD  

nazwisko : String [20];  
imię : String [12];  
tytul : String [50];  
nr_ksiazki: 1..1000;  
wydawca : String[30];  
wydanie : 1..100  

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 31 

__________________________________________ 

 

END;  

TKatalog = FILE OF TKsiazka;  

 

b.

 

tekstowego  
 
Plik tekstowy jest określany za pomocą predefiniowanego identyfikatora Text.  

PRZYKŁAD  

VAR 

plik: Text;  

 

c.

 

niezdefiniowanego  

TYPE 

identyfikator_typu = FILE;  

 

Typy plikowe 

W Pascalu wyróŜniamy trzy typy plików:  



 

zdefiniowane  



 

tekstowe  



 

niezdefiniowane  

Definicja typu plikowego:  

a.

 

zdefiniowanego  

TYPE 

identyfikator_typu = FILE OF opis_typu_elementów_pliku; 

PRZYKŁADY  

TYPE 

TLiczby = FILE OF Integer;  

 

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 32 

__________________________________________ 

 

TYPE 

TWiersz = ARRAY [1..80] OF Char;  
TPlikWierszy = FILE OF TWiersz;  

 

TYPE 

TKsiazka = RECORD  

nazwisko : String [20];  
imię : String [12];  
tytul : String [50];  
nr_ksiazki: 1..1000;  
wydawca : String[30];  
wydanie : 1..100  

END;  

TKatalog = FILE OF TKsiazka;  

 

b.

 

tekstowego  
 
Plik tekstowy jest określany za pomocą predefiniowanego identyfikatora Text.  

PRZYKŁAD  

VAR 

plik: Text;  

 

c.

 

niezdefiniowanego  

TYPE 

identyfikator_typu = FILE;  

 

Zmienne plikowe 

Wszystkie zmienne typu plikowego, z wyjątkiem Output i Input muszą być zadeklarowane w 
sekcji deklaracji programu, który z nich korzysta.  

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 33 

__________________________________________ 

 

PRZYKŁAD  

VAR 
l: TLiczby;  
tekst: TPlikWierszy;  
moje_ksiazki: TKatalog;  
plik: Text;  
dane: File; 
 

 

Schemat przetwarzania plików 

1.

 

opis zminnej plikowej (w części opisowej)  

2.

 

skojarzenie pliku z fizycznym zbiorem danych  

3.

 

otwarcie pliku  

4.

 

wykonanie operacji na pliku  

5.

 

zamknięcie pliku  

 

Procedury obsługi plików 

1.  Kojarzenie zmiennej plikowej 

Do skojarzenia zmiennej plikowej z fizycznym zbiorem danych słuŜy procedura 
standardowa Assign, której wywołanie ma postać:  

Assign (identyfikator_pliku, wyraŜenie łańcuchowe) 

gdzie identyfikator_pliku - dowolna zmienna plikowa; wyraŜenie łańcuchowe - 
fizyczny zbiór danych.  
Plik o podanym identyfikatorze nie moŜe być otwarty.  

PRZYKŁAD  

Assign (moje_ksiazki, 'a:\pliki\kat.dan');  
Assign (plik1, 'LPT1'); {skojarzenie pliku logicznego plik1 z drukarką }  
Assign (plik2, ''); {skojarzenie pliku logicznego plik2 ze standardowym WE/WY, w 
zaleŜności od tego, czy plik będzie otwarty do odczytu czy do zapisu (równowaŜne z 
Assign (plik2, 'CON'))}  

 

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 34 

__________________________________________ 

 

2.  Otwieranie pliku 

W zaleŜności od kierunku przesyłania elementów do lub z pliku stosowane są trzy 
standardowe procedury jego otwarcia.  
 
JeŜeli tworzymy nowy fizyczny (zewnętrzny) zbiór danych, to naleŜy zastosować 
procedurę  

Rewrite (zmienna_plikowa) 

lub  

Rewrite (zmienna_plikowa, rozmiar_zapisu)  

- dla pliku niezdefinowanego.  
 
Wywołanie procedury Rewrite powoduje utworzenie nowego fizycznego zbioru 
danych o nazwie skojarzonej z podaną zmienną plikową. JeŜeli zewnętrzny zbiór 
danych o takiej nazwie istnieje, to zostanie on usunięty i w jego miejsce będzie 
utworzony nowy zbiór.  

PRZYKŁAD  

Assign (moje_ksiazki, 'a:\ksiazki.txt'); {skojarzeniu zbioru ksiazki.txt ze zmienną 
plikową moje_ksiazki}  
Rewrite (moje_ksiazki); {otwarcie pliku}  

 
Do otwarcia pliku skojarzonego ze zbiorem juŜ istniejącym słuŜą procedury Reset i 
Append.  

Reset (zmienna_plikowa)  

lub  

Reset (zmienna_plikowa, rozmiar_zapisu)  

- powoduje ustawienie wskaźnika pliku przed jego pierwszym elementem.  

Append (zmienna_plikowa) 

- stosujemy tylko dla plików tekstowych (Text), po otwarciu pliku ustawienie 
wskaźnika pliku na jego końcu.  

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 35 

__________________________________________ 

 

PRZYKŁADY  

Assign (plik, 'c:\zbiory\ksiazki.txt'); {gdzie plik: TKartoteka}  
Reset (plik);  

Assign (plik, 'c:\zbiory\teksty.txt'); {gdzie plik: TKartoteka}  
Append (plik); 

 

3.  Zamykanie plików  

Po wykonaniu wszystkich operacji na pliku, naleŜy go zamknąć. Do zamykania pliku 
słuŜy procedura  

Close (zmienna_plikowa)  

Po zamknięciu pliku moŜna zmienną plikową skojarzyć z innym fizycznym zbiorem 
danych.  

4.  Wprowadzanie elementów do pliku  

a.

 

pliki tekstowe  

Write (zmienna_plikowa, lista_argumentów_wy)  

lub  

Writeln (zmienna_plikowa, lista_argumentów_wy)  

gdzie zmienna_plikowa jest identyfikatorem pliku tekstowego, a 
lista_argumentów_wy jak dla Output. PowyŜsze wywołania stosuje się 
najczęściej przy wyprowadzaniu wyników programu na drukarkę lub do pliku 
dyskowego, w celu późniejszego ich odczytu.  

b.

 

pliki zdefiniowane  

Write (zmienna_plikowa, lista_argumentów_wy)  

gdzie zmienna_plikowa - plik logiczny skojarzony z zewnętrznym zbiorem 
danych (otwarty) lista_zmiennych_wy - zmienne tego samego typu, jak typ 
elementów pliku, oddzielone przecinkami.  

c.

 

pliki niezdefiniowane  

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 36 

__________________________________________ 

 

BlockWrite (zmienna_plikowa, bufor, licznik);  

lub  

BlockWrite (zmienna_plikowa, bufor, licznik, wynik);  

gdzie bufor - dowolna zmienna; licznik - wyraŜenie typu Word, określające 
ilość wyprowadzanych zapisów; wynik - zmienna typu Word, określająca ilość 
faktycznie wyprowadzonych na dysk zapisów.  
Podczas otwarcia pliku (Rewrite) naleŜy podawać rozmiar zapisu (np. 1); 
domyślna wartość 128.  

 

5.  Wyprowadzanie elementów z pliku  

a.

 

pliki tekstowe  

Read (zmienna_plikowa, lista_argumentów_we)  

lub  

Readln (zmienna_plikowa, lista_argumentów_we)  

gdzie zmienna_plikowa jest identyfikatorem pliku tekstowego, a 
lista_argumentów_we jak dla Input.  

b.

 

pliki zdefiniowane  

Read (zmienna_plikowa, lista_argumentów_we)  

gdzie zmienna_plikowa - plik logiczny skojarzony z zewnętrznym zbiorem 
danych (otwarty) lista_zmiennych_we - zmienne tego samego typu, jak typ 
elementów pliku, oddzielone przecinkami.  

c.

 

pliki niezdefiniowane  

BlockRead (zmienna_plikowa, bufor, licznik);  

lub  

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 37 

__________________________________________ 

 

BlockRead (zmienna_plikowa, bufor, licznik, wynik);  

gdzie bufor - dowolna zmienna; licznik - wyraŜenie typu Word, okreclające 
ilość wprowadzanych zapisów; wynik - zmienna typu Word, określająca ilość 
faktycznie wprowadzonych zapisów.  
Podczas otwarcia pliku (Reset) naleŜy podawać rozmiar zapisu (np. 1); 
domyślna wartość 128.  

 

Zadanie 20 

1.

 

Napisz program zapisywania w pliku danych o Twoich znajomych (imię, nazwisko, 
dzień imienin i urodzin).  

2.

 

Rozbuduj poprzedni program o procedury odczytu z pliku i wydruku danych (na 
ekran, na drukarce lub do pliku tekstowego).  

3.

 

Rozbuduj poprzedni program o procedurę zapisu danych o Twoich znajomych w pliku 
elementowym o podanej nazwie. W przypadku, gdy plik o podanej nazwie istnieje, 
uŜytkownik powinien mieć wybór:  

a.

 

podania nowej nazwy pliku,  

b.

 

skasowania zawartości pliku i zapisu w nim nowych informacji,  

c.

 

dopisania danych na końcu istniejącego pliku.  

4.

 

Popraw procedurę zapisu danych z pliku elementowego do pliku tekstowego, tak aby 
uŜytkownik mógł podać nazwę pliku tekstowego, w którym chce przechowywać 
informacje.  
W przypadku, gdy plik o podanej nazwie istnieje, uŜytkownik powinien mieć 
moŜliwość podania nowej nazwy pliku lub dodania danych na końcu pliku juŜ 
istniejącego.  

Deklaracja zmiennej zbiorowej:  

VAR 

identyfikator_zmiennej: identyfikator_typu_zbiorowego;  

 

PRZYKŁAD  

VAR 
z1: SET OF Char;  
z2: SET OF 'A'..'Z';  
 

 

Zadanie 21 

Napisz program odgadywania wpisanego słowa. 

background image

Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 38 

__________________________________________