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.
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
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
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
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
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):
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.
}
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.
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
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:
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:
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ą.
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
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
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:
a
b
= e
b ln a
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)
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
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
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
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
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
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.
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
1
Green
2
Cyan
3
Red
4
Magenta
5
Brown
6
LightGray
7
Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 23
__________________________________________
Kolory znaków 8..15
Stała
wartość
DarkGray
8
LightBlue
9
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}
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),
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
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;
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:
Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 28
__________________________________________
lp. usprawiedliwione nieusprawiedliwione spóźnienia
1.
1
4
7
2.
67
2
1
3.
3
123
2
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
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;
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
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;
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.
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'))}
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.
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
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
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.
Pascal – ćwiczenia podstawowe – CZĘŚĆ2 - strona 38
__________________________________________