Podstawy informatyki, rok pierwszy
przygotował: Bartłomiej Sulikowski
b.sulikowski@issi.uz.zgora.pl
Instytut Sterowania i Systemów informatycznych,
Uniwersytet Zielonogórski
Skrypt jest w trakcie tworzenia i z pewnością nie jest wolny od błędów
Instytut Sterowania i Systemów Informatycznych
Uniwersytet Zielonogórski
Podstawy informatyki
Laboratorium, studia dzienne
rok pierwszy, semestr pierwszy
Laboratoria prowadzone w trakcie tego semestru rozpoczynają naukę programowania w języku Borland Pascal 7.0. Semestr
pierwszy obejmuje kurs programowania w oparciu na wiadomościach z wykładu. W jego trakcie studenci poznają strukturę
programu w języku Pascal, podstawowe instrukcje oraz wiadomości związanych ze złożonymi strukturami danych takimi
jak tablice, zbiory, zmienne plikowe o różnym charakterze, zmienne rekordowe. Zajęcia mają na celu nauczenie studentów
patrzenia na problemy rzeczywiste w formie zadań programistycznych.
Semestralny program zajęć
Spotkanie
Temat
1.
Wstęp. Podanie wykazu literatury
i warunków zaliczenia.
2.
Wprowadzenie. Struktura programu w Pascalu.
3.
Definicje stałych, deklaracje zmiennych.
4-5.
Instrukcje warunkowe, pętle.
6-7.
Procedury i funkcje
8.
Sprawdzian wiadomości.
9.
Typ okrojony, wyliczeniowy. Zbiory.
10-11.
Zmienne rekordowe.
12.
Pliki jednorodne.
13.
Pliki tekstowe i amorficzne.
14.
Sprawdzian wiadomości.
15.
Zaliczenie.
Podstawy informatyki
Laboratorium, studia zaoczne,
rok pierwszy, semestr drugi
Laboratoria prowadzone w trakcie tego semestru są kontynuacją kursu programowania w języku Borland Pascal 7.0. Semestr
drugi obejmuje powtórkę i uzupełnienie wiadomości uzyskanych podczas pierwszego semestru nauki oraz wprowadzenie
nowych wiadomości związanych ze złożonymi strukturami danych takimi jak zbiory, zmienne plikowe o różnym charakterze,
zmiennymi wskaźnikowymi oraz zmiennymi dynamicznymi. Zajęcia mają na celu wyrobienie u studentów praktycznego
podejścia do rozwiązywania różnorakich problemów programistycznych, z jakimi mogą spotkać się w pracy zawodowej i
w trakcie kolejnych lat studiów. Szczególny nacisk położony jest na nabycie biegłości w posługiwaniu się ww. technikami
pozwalającymi na implementację problemów o dowolnym stopniu złożoności.
Semestralny program zajęć
Zjazd
Temat
1.
Wstęp. Podanie wykazu literatury i warunków zaliczenia.
Powtórka wiadomości (materiał do rekordów włącznie).
2.
Typ zbiorowy. Typ wyliczeniowy. Typ okrojony.
Pliki jednorodne (wstęp).
3.
Sprawdzian wiadomości. Pliki jednorodne, amorficzne
i tekstowe.
4.
Zmienne dynamiczne.
5.
Zmienne dynamiczne. Listy jednokierunkowe.
6.
Listy dwukierunkowe. Lity list.
7.
Listy, drzewa i inne złożone struktury dynamiczne.
8.
Sprawdzian wiadomości. Zaliczenie.
Literatura (przykładowe pozycje)
1.Borland Pascal 7.0 z elementami programowania, Andrzej Marciniak, Poznań, Nakom, 1994
2. Borland Pascal 7.0, Julio Sanchez, Weiskamp Keith, Tłum. M. Jurdziński, Helion, Warszawa, 2001
3. Pascal : wprowadzenie do programowania, Wiesław Porębski, Warszawa, PWN, 1990
1
Instytut Sterowania i Systemów Informatycznych
Uniwersytet Zielonogórski
Podstawy informatyki
Laboratorium 1
Let’s start
1. Środowisko Borland Pascal
Po uruchomieniu programu bp.exe ukazuje się środowisko, w którym będziemy pisali programy. W ”belce” górnej
od lewej strony można zauważyć następujące opcje menu: File, Edit, Search, Run, Compile, Debug, Tools, Options,
Window i Help. Najważniejszymi opcjami (z punktu widzenia początkującego programisty) są:
• File → New
Tworzenie nowych plików zawierających kod źródłowy programu. Po uruchomieniu w aktywnym oknie poniżej
menu pojawia się ramka o niebieskim tle opisana (centralnie na górze) jako noname00.pas.
• File → Open (F3 )
Otwieranie istniejących plików zawierających kod źródłowy programu. Po uruchomieniu w aktywnym oknie poniżej
menu pojawia się ramka o niebieskim tle opisana nazwą programu. W oknie zostaje umieszczony kod programu
• File → Save (F2 )
File → Save As
Zapis wyedytowanych plików zawierających kod źródłowy programu. Po uruchomieniu pod wybraną nazwą pliku
zostanie zapisany kod programu. Różnica między Save i Save As jest taka, że Save zapisuje plik pod obecną
nazwą, a Save As pod nową nazwą.
• File → Change dir
Zmiana bieżącego katalogu.
• File → Exit
Zakończenie działania środowiska Borland Pascal.
• Zaznaczanie części tekstu odbywa się za pomocą SHIFT+kursory, SHIFT+Home, SHIFT+End, SHIFT+PgUp,
SHIFT+PgDown oraz SHIFT+CTRL+ w/w.
• Edit → Copy (CTRL+Ins)
Kopiowanie zaznaczonego tekstu do bufora.
• Edit → Paste (SHIFT+Ins)
Wklejanie zaznaczonego tekstu z bufora.
• Run → Run (CTRL+F9 )
Skompilowanie i uruchomienie programu.
• Compile → Compile (ALT+F9 )
Skompilowanie programu w celu sprawdzenia czy nie ma w nim błędów.
2. Programowanie
Ogólnie struktura programu w języku Pascal wygląda następująco:
program nazwa_programu; {na koncu instrukcji
umieszczamy srednik}
{a w nawiasach klamrowych umieszczamy komentarz}
uses nazwa_modulu; {nazwa_modulu oznacza
nazwe pliku, w ktorym zawarto funkcje i procedury
dodatkowe; moze to byc takze nazwa modulu
stworzonego przez uzytkownika; prosze zwrocic uwage na
srednik na koncu komendy}
type deklaracje_typow; {deklaracje typow zmiennych
nie wbudowanych, ale okreslonych przez uzytkownika,
stosowane opcjonalnie, srednik na koncu jak wyzej }
const stala=wartosc_stalej;{czasem zachodzi koniecznosc
stosowania stalych w programie; srednik jw}
var nazwa_zmiennej:typ_zmiennej; {deklaracja zmiennych
globalnych programu; w zasadzie nie ma mozliwosci pisania
programu bez zmiennych; a zapomnialbym UWAGA na srednik - tu
tez jest i zreszta po 99\% komend w PASCALU stawia sie srednik}
{-------------------------------------------------}
{tu deklaracje funkcji i procedur}
2
Instytut Sterowania i Systemów Informatycznych
Uniwersytet Zielonogórski
{ponizej rozpoczynamy sekcje programu glownego}
BEGIN {tu bez srednika}
{tu jest zasadnicza czesc programu, ze srednikami po instrukcjach}
{i koniec}
END.{UWAGA program konczy sie KROPKA}
A jak to wygląda w praktyce?
program pierwszy;{obliczanie objetosci walca}
uses crt; {bedziemy korzystali z clrscr}
const Pi=3.141591;
var r,h,obj:real;
BEGIN
clrscr;
write(’Podaj promien i wysokosc walca:’);
readln(r,h);
obj:=Pi*sqr(r)*h;
writeln(’Objetosc walca o promieniu podstawy ’,r,’
i wysokosci ’,h,’ wynosi: ’,obj);
END.
Wcięcia w programie służą do lepszego przedstawienia wizualnego programu, ale nie mają wpływu na jego działanie.
3
Instytut Sterowania i Systemów Informatycznych
Uniwersytet Zielonogórski
Podstawy Informatyki
Lista zadań nr. 2
(IF, CASE, FOR, WHILE. . . DO, REPEAT. . . UNTIL)
Uwaga! Wszystkie pliki zapisujemy w katalogu roboczy
1. Napisać program, który podczas działania pyta o imię użytkownika i jego płeć. W zależności od płci wypisuje komunikat
w postaci: ”Jesteś kobietą . . . ”(i tu wstawia podane imię żeńskie) lub ”Jesteś mężczyzną . . . ”(i tu wstawia podane
imię męskie).
2. Zmodyfikować program z pkt. 1 o pytanie o wiek i odpowiednio uzupełnić wachlarz odpowiedzi.
3. Napisać program, który w zależności od podanych wartości zmiennych a i b przypisuje odpowiednie wartości zmiennym
y
1
i y
2
:
• dla a < 0 i b < 0 ⇒ y
1
= 1
• dla a = 0 lub b = 0 ⇒ y
1
= 1, y
2
= 1
• dla a > 0 i b > 0 ⇒ y
1
= 1, y
2
= a
• dla a > 0 lub b < 0 ⇒ y
1
= −1, y
2
=
p|a|
Wyniki wraz z wartościami zmiennych a, b oraz stosowanymi regułami wyświetlić na ekran.
4. Napisać program, który w zależności od podanych wartości zmiennej a przypisuje odpowiednią wartość zmiennej typu
ST RIN G (o dowolnej znaczącej nazwie). Wykorzystać instrukcję IF .
• dla a < −20 ⇒ zmienna =
0
duze
ujemne
0
• dla −20 < a < −10 ⇒ zmienna =
0
srednie
ujemne
0
• dla −10 < a < 2 ⇒ zmienna =
0
male
ujemne
lub
zero
lub
male
dodatnie
0
• dla 2 < a ⇒ zmienna =
0
inne
0
Wyniki wraz z wartością zmiennej a oraz stosowanymi regułami wyświetlić na ekran.
5. Napisać program, który w zależności od podanych wartości zmiennej a typu shortint przypisuje odpowiednią wartość
zmiennej typu ST RIN G (o dowolnej znaczącej nazwie). Wykorzystać instrukcję CASE.
• dla a ∈ [−128, −20] ⇒ zmienna =
0
duze
ujemne
0
• dla a ∈ [−19, −10] ⇒ zmienna =
0
srednie
ujemne
0
• dla a ∈ [−9, 2] ⇒ zmienna =
0
male
ujemne
lub
zero
lub
male
dodatnie
0
• dla a ∈ [3, 127] ⇒ zmienna =
0
inne
0
Wyniki wraz z wartością zmiennej a oraz stosowanymi regułami wyświetlić na ekran.
6. Napisać program, który dziesięciokrotnie wypisuje literę A na ekranie.
7. Zmodyfikować program z pkt. 6 tak, aby zamiast litery A wypisywał 10 razy 1 raz podaną literę.
8. Zmodyfikować program z pkt. 6 tak, aby zamiast litery A wypisywał 10 razy 10 razy podaną literę.
9. Zmodyfikować program z pkt. 6 tak, aby zamiast litery A wypisywał N-razy N-razy podaną literę, gdzie N jest wartością
podawaną przez użytkownika.
10. Napisać program, który w zadanym miejscu o współrzędnych (x, y) rysuje kwadrat wypełniony znakami ’*’ o boku
zadanym przez użytkownika.
a) Zmodyfikować powyższy program tak, aby kwadrat był wypełniany znakiem podanym przez użytkownika.
b) Zmodyfikować powyższy program tak, aby kwadrat był wypełniany znakami wybieranymi losowo (funkcje:randomize,
random, chr ).
11. Napisać program, który będzie wyświetlał w liniach specjalne znaki graficzne i odpowiadające im numery kodowe. Użyć
funkcji chr.
4
Instytut Sterowania i Systemów Informatycznych
Uniwersytet Zielonogórski
12. Napisać program, który w zadanym miejscu o współrzędnych (x, y) rysuje prostokąt wypełniony znakami ’*’ o bokach
zadanych przez użytkownika. Następnie dołączyć sekwencję instrukcji, która spowoduje otoczenie prostokąta podwójną
linią ciągłą. Specjalne znaki uzyskuje się przez wpisanie kodu takiego znaku przy wciśniętym przycisku ALT tzn. np.
ALT+186 oznacza podwójną linię pionową. Inne kody są wartościami z zakresu (179-218).
13. Napisać program, który w podanym miejscu na ekranie o współrzędnych (x, y) rysuje trójkąt prostokątny o długości
boków przyprostokątnych równej wartości podanej przez użytkownika. Trójkąt powinien zostać wypełniony znakami
’*’. Następnie tak go zmodyfikować, aby tylko co drugi znak był ’*’ - pozostałymi znakami mają być spacje.
14. Napisać program, który w podanym miejscu na ekranie o współrzędnych (x, y) rysuje trójkąt równoramienny o wy-
sokości podanej prze użytkownika. Podstawa tego trójkąta wynosi 2· wysokość. Trójkąt powinien zostać wypełniony
znakami ’*’. Następnie tak go zmodyfikować, aby tylko co drugi znak był ’*’ - pozostałymi znakami mają być ’#’.
15. Napisać program, który pyta użytkownika czy zakończyć pracę. Jeśli odpowiedź brzmi:T kończy swoje działanie, jeśli
N wypisuje dowolny komentarz na ekranie, wstrzymuje działanie programu na 1 sekundę (komenda delay) i ponownie
wraca do pytania. Do wczytania odpowiedzi użyć komendy read. Następnie program zmodyfikować tak, aby odpowiedź
była wprowadzana za pomocą komendy readkey. Należy zwrócić uwagę na konieczność wyczyszczenia bufora klawiatury
przed oczekiwaniem na odpowiedź.
16. Zmodyfikować program z poprzedniego pkt. tak aby, najpierw wykonywał ciąg instrukcji, a dopiero potem pytał o to
czy działać od nowa czy zakończyć pracę.
17. ”Uodpornić” programy z dwóch poprzednich pkt. na odpowiedź inną niż T lub N i na możliwość podania odpowiedzi
w postaci małych liter.
18. Napisać program, w którym za pomocą pętli WHILE implementuje się pętlę FOR.
19. Napisać program, w którym za pomocą pętli REPEAT implementuje się pętlę FOR.
20. Napisać program, w którym za pomocą pętli WHILE implementuje się pętlę REPEAT.
21. Napisać program, w którym za pomocą pętli REPEAT implementuje się pętlę WHILE.
22. Zmodyfikować programy z pkt. 1-8 w ten sposób, aby wykonywały się wielokrotnie, aż do momentu wyjścia z programu
- naciśnięcia ESC.
5
Instytut Sterowania i Systemów Informatycznych
Uniwersytet Zielonogórski
Podstawy Informatyki
Lista zadań nr. 3
(Tablice, Pętle)
Uwaga! Wszystkie pliki zapisujemy w katalogu roboczy
Wartość n ma być deklarowana jako stała.
1. Zadeklarować tablicę o rozmiarze n, wypełnic losowo liczbami całkowitymi z zakresu 0 . . . 255. Następnie wyprowadzić
tablicę na ekran.
2. Zmodyfikować program z pkt. 1 tak, aby pytał o zakres liczb, które mają być wyświetlane. Liczby wyświetlać wg.
następujących zakresów: 0 . . . 142, 143 . . . 146, 147 . . . 240 i 241 . . . 255.
3. Zadeklarować tablicę o rozmiarze n, wypełnić losowo liczbami całkowitymi z zakresu −128 . . . 127. Następnie wyświetlać
elementy od końca tablicy.
4. Zadeklarować tablicę o rozmiarze n, wypełnić losowo liczbami całkowitymi z zakresu 0 . . . 255. Następnie wyświetlać
elementy tablicy do momentu napotkania elementu podanego uprzednio przez użytkownika.
5. Zadeklarować tablicę o rozmiarze n, wypełnić losowo małymi literami, a następnie w sposób losowy wyświetlić wszystkie
elementy tablicy na ekran. Należy zwrócić uwagę na fakt, że każdy element może być wyświetlany tylko jednokrotnie.
6. Zadeklarować tablicę o rozmiarze n×3. Następnie losowo wprowadzić n liczb typu całkowitego z przedziału −128 . . . 127.
Obliczyć dla każdej z nich kwadrat oraz sześcian i zapisać w kolejnych wierszach tablicy. Następnie wyprowadzić tablicę
na ekran.
7. Zadeklarować tablicę o rozmiarze n, wypełnić losowo liczbami całkowitymi z zakresu 0 . . . 255. Następnie znaleźć w
tablicy i wyświetlić wartość najmniejszą i największą.
8. Zadeklarować dwie tablice o rozmiarze n, pierwszą wypełnić losowo liczbami całkowitymi z zakresu 0 . . . 255. Następnie
do drugiej tablicy przepisać elementy pierwszej tablicy uporządkowane w porządku rosnącym.
9. Zadeklarować tablicę o rozmiarze n. Następnie wypełnić ją liczbami typu shortint wpisywanymi z klawiatury. Zmody-
fikować program tak, aby wpisywanie do tablicy było zakańczane po wpisaniu wartosći 0.
10. Zadeklarować i wypłnić losowo tablicę zawierającą n pkt. leżących na na płaszczyźnie (o współrzędnych (x, y)). Należy
pamiętać o tym, że pkt. mogą przyjmować wartości większe, równe lub mniejsze od zera. Dla punktów o współrzędnych
odpowiednio (x
1
, y
1
)...(x
n
, y
n
) sprawdzać czy:
• kolejny punkt leży wewnątrz, na, czy na zewnątrz okręgu o promieniu r (podanym przez użytkownika) i środku
umieszczonym w początku układu
• kolejny punkt leży nad, na czy pod prostą y = x.
6
Instytut Sterowania i Systemów Informatycznych
Uniwersytet Zielonogórski
Podstawy Informatyki
Lista zadań nr. 4
(Procedury, Funkcje)
Uwaga! Wszystkie pliki zapisujemy w katalogu roboczy
1. Zdefiniuj i wykorzystaj w programie głównym funkcję własną, która zwraca swój argument typu byte pomniejszony o
wartość 7.
2. Zdefiniuj i wykorzystaj w programie głównym funkcję własną, która zwraca swój argument z odwróconym znakiem
3. Zdefiniuj i wykorzystaj w programie głównym funkcję własną, która zwraca true dla argumentu nieujemnego; false -
dla argumentu ujemnego
4. Zdefiniuj i wykorzystaj w programie głównym funkcję własną, która zwraca sumę kwadratów swoich dwóch argumentów
5. Zdefiniuj i wykorzystaj w programie głównym funkcję własną, która zwraca true, gdy jej argumenty typu znakowego
są jednakowymi literami
6. Zdefiniuj i wykorzystaj w programie głównym funkcję własną, która bada znak będący jej argumentem i zwraca true,
gdy ten znak jest dużą literą; w przeciwnym przypadku -false
7. Zdefiniuj i wykorzystaj w programie głównym funkcję własną, która zwraca true, jeżeli jej oba argumenty są nieparzyste,
a false - w przeciwnym przypadku
8. Zdefiniuj i wykorzystaj w programie głównym funkcję własną, która zwraca odległość pomiędzy dwoma punktami,
których współrzędne x
1
, y
1
, x
2
, y
2
są jej argumentami
9. Zdefiniuj i wykorzystaj w programie głównym funkcję własną, która zwraca, (w postaci znaku ’+’ lub ’-’), znak sumy
swoich dwóch argumentów
10. Zdefiniuj i wykorzystaj w programie głównym funkcję własną, która zwraca 1, gdy jej argumenty x, y są jednakowe co
do modułu, a 0 - w przeciwnym przypadku
11. Zdefiniuj i wykorzystaj w programie głównym funkcję własną, która zwraca sumę od pierwszego do n-tego wyrazu
szeregu o podanym wzorze ogólnym:
n
X
i=1
= 1 +
1
2
+
2
3
+ . . . +
n − 1
n
12. Zdefiniuj i wykorzystaj w programie głównym funkcję własną, która sprawdza (zwracając odpowiednio true lub false),
czy oba jej argumenty znakowe są literami
13. Zdefiniuj i wykorzystaj w programie głównym funkcję własną, która zwraca część ułamkową swojego argumentu typu
Real
14. Zdefiniuj i wykorzystaj w programie głównym funkcję własną, która sprawdza, czy aktualna wartość jej argumentu
typu Longint zawiera się w zakresie wartości Integer
15. Zdefiniuj i wykorzystaj w programie głównym funkcję własną, która zwraca pierwiastek kwadratowy sumy swoich trzech
argumentów
16. Zdefiniuj i wykorzystaj w programie głównym funkcję własną, która dla argumentów a,b,c sprawdza, czy zachodzi
relacja b
2
− 4ac ≥ 0
17. Zdefiniuj i wykorzystaj w programie głównym funkcję własną, która znajduje n-ty wyraz ciągu (n jest argumentem
funkcji) o następującym wzorze ogólnym :
x
n
= 1 + n
2
− 6(n − 1)
div
n
18. Wykorzystując odpowiednio skonstruowane funkcje i procedury napisz program obliczający pierwiastki równania kwa-
dratowego
19. Napisz funkcję, która wypełnia daną tablicę losowo wybranymi małymi literami. Następnie wylosuj dwie takie tablice
i za pomocą odpowiedniej funkcji sprawdź czy są takie same czy też inne.
20. Napisz funkcję, która wypełnia daną tablicę losowo wybranymi wartościami typu shortint z zakresu < 0, 20 >. Następnie
wylosuj dwie takie tablice i za pomocą odpowiednich funkcji sprawdź:
7
Instytut Sterowania i Systemów Informatycznych
Uniwersytet Zielonogórski
• czy są one takie same
• czy wartość średniej arytmetycznej elementów w pierwszej tablicy jest większa od średniej arytmetycznej elemen-
tów drugiej tablicy.
• jaka jest liczba elementów mniejszych od zadanego 7 w pierwszej i drugiej tablicy.
• jaka jest liczba elementów większych od zadanego a w pierwszej i drugiej tablicy.
• jak będzie wyglądała tablica bedaća suma tych tablic
• jak będzie wyglądała tablica bedaća wynikiem różnicy tablicy drugiej i pierwszej
21. Policz sumę liczb całkowitych od k1 do k2. Argumenty wejściowe: k1, k2 ; argument wyjściowy: Suma
22. Znajdź i przekaz przez argument wyjściowy Min najmniejszą liczbę całkowitą spośród trzech podanych na wejście
procedury jako jej argumenty wejściowe a, b, c.
23. Przekaż przez wyjście P procedury wartość a do potęgi k. (a i k są całkowite; stanowią one argumenty wejściowe
procedury.
24. Wprowadzaj kolejno z klawiatury n liczb, sumując je. Policz ich średnią arytmetyczną Sr. n jest argumentem wejścio-
wym, a Sr - argumentem wyjściowym procedury
25. Napisz procedurę, która oblicza i podaje przez wyjście d odległość pomiędzy dwoma punktami płaszczyzny o współ-
rzędnych x
1
, y
1
, x
2
, y
2
(współrzędne są argumentami)
26. Wypisz na ekranie ciąg kolejnych znaków od znaku z
1
do znaku z
2
. (z
1
i z
2
są argumentami wejściowymi procedury)
27. Pisz na ekranie w kolumnie jedna pod drugą n kolejnych liczb naturalnych podzielnych przez k, przy czym n i k są
argumentami wejściowymi procedury
28. Znajdź i przekaż przez argument wyjściowy liczba
m
aks liczbę początkowych liczb naturalnych, których suma przekracza
suma
m
aks. (suma
m
aks jest argumentem wejściowym procedury)
29. Sumuj kolejne wyrazy szeregów
•
n
X
i=1
= 1 +
1
2
+
1
3
+ . . . +
1
n
•
n
X
i=1
= 1 +
1
4
+
2
9
+ . . . +
n − 1
n
2
tak długo, dopóki róznica między wyrazem bieżacym, a poprzednim nie stanie się mniejsza od wartości Eps. Eps jest
argumentem wejściowym, a wartośc sumy oraz n - argumentami wyjściowymi
30. Zbadaj, czy dana liczba całkowita l, stanowiąca argument wejściowy procedury, jest liczbą pierwszą. Rezultat badania
przekaż przez wyjściowy argument typu Boolean
31. Czytaj kolejne liczby całkowite z klawiatury, sumując je. Proces czytania ma się zakończyć po wczytaniu wartości
równej zmiennej stop, która jest argumentem wejściowym. Sumę przekaż przez argument wyjściowy
32. Oblicz i przekaż przez argument wyjściowy k-tą potęgę liczby 2. Jeżeli wynik przekracza zakres Integer, to wyjściowy
argument kontrolny ma przyjąć wartość false.
8
Instytut Sterowania i Systemów Informatycznych
Uniwersytet Zielonogórski
Podstawy informatyki
Lista zadań nr. 5
Zmienne typu String
1. Zapoznać się z funkcjami copy, delete, insert, length, pos, concat, str, val i poniższe zadania realizowanć z wykorzysta-
niem tych funkcji.
2. Napisać funkcję zwracającą ze stringu znak określony przez użytkownika (o ile jest).
3. Napisać funkcję zwracającą ze stringu znak o określonej przez użytkownika pozycji (o ile taka jest).
4. Napisać funkcję zwracającą ze stringu ciąg znaków o określonych przez użytkownika prawej i lewej krawędzi.
5. Napisać funkcję zwracającą string nie zawierający znaku podanego przez użytkownika np string A B X C S bez znaków
spacji ma przyjąć postać: ABXCS.
6. Napisać funkcję zwracającą string zawierający elementy stringu wejściowego zamieszczone tam w odwrotnej kolejności
tzn string :ABXCS ma przyjąć postać: SCXBA.
7. Napisać funkcję zwracającą string zawierający znaki przesunięte cyklicznie o wartość podaną przez użytkownika tzn
znak d przesunięty o 1 daje znak e a o -1 daje znak c.
8. Napisać funkcję zwracającą string zawierający znaki przesunięte cyklicznie o wartość pozycji, na której się znajdują.
9. Napisać procedurę zwracającą: string będący połączeniem dwóch stringów, łączną długość połączonych stringów i liczbę
znaków powtarzających się w stringu wynikowym.
10. Napisać funkcję sprawdzającą czy zadany string jest palindromem.
11. Napisać funkcję, która zamieni wszystkie małe\wielkie litery na wielkie\małe.
12. Napisać funkcję, zliczającą samogłoski w podanym stringu.
13. Napisać funkcję, zamieniającą na wielkie pierwsze litery we wszystkich wyrazach w podanym stringu.
14. Napisać funkcję, sprawdzającą czy podana kombinacja cyfr występuje w danej liczbie. Użyć funkcji str i val.
Zmienne typu record
UWAGA!!! Do wszystkich przykładów zamieścić deklaracje typów.
1. Napisać funkcję obliczającą odległość dwóch pkt. na płaszczyźnie od siebie.
2. Napisać funkcję obliczająćą odległość dwóch pkt. w przestrzeni R
3
od siebie.
3. Napisać funkcję sprawdzającą czy trzy pkt. płaszczyzny są współiniowe.
4. Napisać funkcję, która będzie miała dostęp do zbioru imion i która losowo będzie wypełniała tablicę 100 rekordów o
polach (imie, wiek).
5. Napisać procedurę która będzie służyła do wypełniania rekordu zawierających dane osobowe tzn (imę, nazwisko, wiek,
płeć, tablica stopni z egzaminu maturalnego).
6. Napisać kod źródłowy, który spowoduje przechowywanie danych dziesięciu osób (pkt. poprzedni) w odpowiedniej tablicy.
Następnie napisać funkcje i procedury służące do wyszukiwania osoby po odpowiednim polu tj. (imieniu, nazwisku itd.).
7. Napisać procedurę znajdującą osobę o najwyższej i najniższej średniej z egzaminów maturalnych.
8. Napisać procedurę wypisujące dane osób z tabeli w wierszach formularza (1 wiersz - 1 osoba).
9
Instytut Sterowania i Systemów Informatycznych
Uniwersytet Zielonogórski
Podstawy Informatyki
Lista zadań nr. 6
Typ wyliczeniowy, Typ okrojony, Zbiory
1. W pewnym programie został zadeklarowany typ zbiorowy:
type kolor = set of (bialy,czarny,czerwony,niebieski,zielony,zolty);
Napisać procedurę, która będzie wypisywała na ekran wartość zmiennej typu kolor.
2. Dana jest definicja typów:
type imie = (Bartek,Wojtek,Maciek,Przemek,Mirek,Pawel,Mariusz,Andrzej);
wzrost = 150..210;
tablica = array[Bartek..Andrzej] of wzrost;
Zadeklarować odpowiednie zmienne odpowiednich typów. Napisąć procedurę losowo przydzielającą wzrost do elemenrów
zmiennej typu tablica. Następnie traktując wylosowane wartości wzrostu jako wzrost osób, których imiona są indeksami
zmiennej typu tablica znaleźć:
• osobę o największym i najmniejszym wzroście
• średni wzrost wszystkich osób
• osobę o wzroście najbardziej zbliżonym od średniego wzrostu
• osobę o wzroście najbardziej odbiegającym do średniego wzrostu
3. Posługując się typem wyliczeniowym imie z zadania 2 napisać procedurę przypisującą zmiennej tego typu string wpisany
z klawiatury. Zmienną wejściową procedury ma być wpisane imię (jako string), zmiennymi wyjściowymi: zmienna typu
imie oraz kod blędu wykonania przypisania. Następnie użyć napisanej procedury w programie.
4. Napisać program, który będzie zczytywał podawane z klawiatury znaki i jeśli podany znak będzie cyfrą, zastąpi ją
znakiem *.
5. Zmodyfikować program z zadania 4 tak, aby wszystkie duże litery zastępował znakiem +, wszystkie małe - znakiem @,
a cyfry jak poprzednio *. Inne znaki mają być pomijane bez wypisywania na ekran.
6. Napisać program, który będzie sprawdzał, które litery w podanym tekście występują jeden raz, które dwa razy, a które
wcale nie występują.
7. Zdefiniować typ danych jako zbiór dużych liter. Następnie losowo wypełnić 3 zmienne (zb1, zb2, zb3) tego typu w taki
sposób, aby w zb1 znjadowały się 4 litery, w zb2 sześć liter, a w zb3 12 liter. Następnie wykonać poniższe działania i
wyświetlić wyniki na ekran:
• sumy wszystkich kombinacji dwóch zbiorów
• iloczyny wszystkich kombinacji dwóch zbiorów
• różnice wszystkich kombinacji dwóch zbiorów
Ponadto sprawdzić, czy którykolwiek ze zbiorów zawiera się w innym.
10
Instytut Sterowania i Systemów Informatycznych
Uniwersytet Zielonogórski
Podstawy Informatyki
Lista zadań nr. 7
Pliki
Sprawdzian wiadomości.
Dana jest następująca struktura danych:
type dni_tygodnia = (Poniedzialek,Wtorek,Sroda,Czwartek,Piatek,Sobota,Niedziela);
pogoda_dzienna = record
czy_pada:(pada,nie_pada);
temperatura:-40..50; {w st. Celsjusza}
end;
tydzien = array [dni_tygodnia] of pogoda_dzienna;
zbior_dni = set of dni_tygodnia;
var T1:tydzien;
zb_dni:zbior_dni;
oraz procedura o definicji procedure wyswietl dzien (dn:dni tygodnia);, której działanie można określić następująco: na pod-
stawie wartości zmiennej dn wyświetla na ekranie odpowiadającą nazwę dnia.
Zakładając, że mamy do dyspozycji wypełnioną tablicę T1 zawierającą prognozę pogody na następny tydzień, napisać pro-
cedurę zwracającą zbiór dni tygodnia, w które będzie dobra pogoda (temperatura powyżej 22 stopni Celsjusza, deszcz nie
pada) oraz drugą która będzie wypisywała na ekranie nazwy tych dni.
Lista zadań do wykonania
Zapoznać się z instrukcjami:Assign, Reset, Rewrite, Close, BlockRead, BlockWrite, FileSize, FilePos, Seek, Eof.
1. Dany jest plik zawierający znaki. Napisać funkcję zwracającą z pliku ciąg znaków o pozycji i długości podanych przez
użytkownika.
2. Zadeklarować formalnie strukturę pliku zawierającego liczby całkowite z zakresu −80 . . . 80. Następnie napisać proce-
durę wypełniającą w sposób losowy taki plik. Warunkiem zakończenia wpisywania do pliku ma być wylosowanie w
kolejnych dwóch próbach wartości 0 i −13. Następnie napisać funkcje obliczające: wartość średnią elementów znajdują-
cych się w pliku, wartość średnią kwadratów elementów, wartość średnią elementów pomniejszonych o wartość średnią
i podniesionych do kwadratu.
3. Dany jest plik zawierający znaki. Napisać procedurę zwracającą liczbę wystąpień każdego znaku z tabeli ACSII w
postaci tablicy.
4. Dany jest plik zawierający liczby typu shortint. Napisać procedurę sprawdzającą czy w pliku znajduje się podana przez
użytkownika sekwencja liczb typu byte (tabela maks. 10 elementów). Następnie uzupełnić kod źródłowy o możliwość
sprawdzania czy w danym pliku sekwencja występuje wielokrotnie.
5. Korzystając z deklaracji danych jak przy sprawdzianie wiadomości napisać program wypełniający w sposób losowy
51 tablic zawierających roczne dane o pogodzie. Otrzymane tablice zapisać do pliku. Następnie napisać procedury,
które pozwolą sprawdzić, w którym tygodniu wystąpiły najniższe, najwyższe temperatury, który tydzień roku był
najcieplejszy (średnia temepratur), który najzimniejszy.
Napisać procedury, które będą zwracały w postaci zbiorów numery tygodni, które były deszczowe (więcej niż 4 dni
deszczowe).
6. Napisać program, który będzie zapisywał do pliku dane kolejno wprowadzanych osób. Następnie po stworzeniu takiego
pliku, napisać funkcje służaće do szukania osób na podstawie wybranych przez piszącego pól rekordów np. nazwisko,
wiek itp.
7. Wygenerować w sposób losowy plik zawierający 10000 liczb typu LongInt (proszę zwrócić uwagę na zakres liczb z
jakiego losuje funkcja random). Napisać procedurę tworzącą nowy plik, który zawierać będzie występujące w pierwszym
pliku liczby pierwsze. Następnie usunąć z tego pliku wszystkie powtórzenia.
8. Wygenerować w sposób losowy plik zawierający 13542 liczb typu LongInt (uwagi jw.). Napisać procedurę, która
po utworzeniu nowego pliku umieści w nim wartości ilorazów każdych dwóch kolejnych liczb z pliku źródłowego. W
przypadku dzielenia przez 0 zapisać na plik wartość maksymalną jaką może osiągnąć iloraz dwóch liczb typu LongInt.
11
Instytut Sterowania i Systemów Informatycznych
Uniwersytet Zielonogórski
Podstawy informatyki
Lista zadań nr. 8
Zmienne dynamiczne
1. Zapoznać się z działaniem i przeznaczeniem następujących funkcji i procedur:
• new - dispose
• getmem - freemem, memalloc
• release
• mark
• memavail, maxavail
2. Napisać program, w którym sprawdzane będzie ile pamięci na stercie oraz ile miejsca pozostaje wolnego po zallokowaniu
następujących struktury:
• zmienna typu real
• zmienna typu integer
• tablica 10 liczb typu byte
• tablica 10 znaków (char)
• tablica 10 liczb typu integer
• tablica 10000 liczb typu integer
Należy zwrócić uwagę na to jak zmienia się rozmiar sterty po zarezerwowaniu i po zwolnieniu pamięci. Sprawdzić jak
działają i do czego służą ustawienia Menu→Options→Memory sizes. . .
Uwaga! Przed dokonaniem jakichkolwiek zmian ustawień proszę spisać ustawienia pierwotne i po zakończeniu testo-
wania działania programu do nich powrócić.
3. Napisać program wykonujący następujące działania matematyczne na liczbach rzeczywistych przechowywanych na
stercie: +, −, /, ∗. Wynik działania ma także być przechowywany jako zmienna dynamiczna.
4. Napisać program przechowujący na stercie tablicę 100 znaków. Zdefiniować odpowiednie typy danych, zadeklarować
zmienne i przydzielić dla tej tablicy miejsce na stercie. Następnie losowo wypełnić tą tablicę małymi literami (procedury:
randomize, random i chr) i sprawdzić (wypisać na ekran) krotności występowania każdej z liter.
5. Zadanie 4 zmodyfikować tak, aby tablica zamiast znaków zawierała wskaźniki do nich.
6. Napisać program, który wypełniać będzie całą dostępną pamięć na stercie losowo wybranymi liczbami naturalnymi z
przedziału [0, 255]. Działanie programu ma być uniezależnione od rozmiaru sterty.
7. Zadanie 6 zmodyfikować tak, aby wypełniać całą dostępną pamięć na stercie losowo wybranymi liczbami wymierny-
mi (liczby takie można uzyskać przez podzielenie przez siebie dwóch losowo wybranych liczb całkowitych). Tak jak
poprzednio działanie programu ma być uniezależnione od rozmiaru sterty.
8. Napisać program przechowujący na stercie tablicę 100 wskaźników do liczb typu integer. Zdefiniować odpowiednie typy
danych, zadeklarować zmienne i przydzielić dla tej tablicy miejsce na stercie. Następnie wylosować te liczby (przedział
losowania: [−10, 10]) i pod warunkiem, że wylosowane liczby są większe od zera do tablicy wpisać ich adresy na stercie,
jeśli nie, do tablicy powinien zostać wpisany adres zerowy (nil) oraz nie powinny one zajmować pamięci. Następnie na
podstawie tablicy wskaźników sprawdzić ile wylosowanych liczb było nie większych od zera.
12
Instytut Sterowania i Systemów Informatycznych
Uniwersytet Zielonogórski
Podstawy informatyki
Lista zadań nr. 9
Zmienne dynamiczne
Sprawdzian wiadomości:
Dany jest plik src.dat zawierający liczby całkowite z zakresu −128 . . . 127 (parzysta ilość liczb). Napisać program, który stworzy
plik o nazwie dest.dat, zawierający wyniki dzielenia liczb o numerach nieparzystych przez liczby o numerach parzystych występujących
w pliku src.dat. Zamieścić definicje typów i deklaracje zmiennych.
1. Dane są deklaracje:
var a1,a2:^real;
a3,a4:^integer;
a5,a6:integer;
a8:shortint;
Które z poniższych operacji są poprawne, a które nie. Wyjaśnij dlaczego.
A
B
C
D
1.
a1 :=1.2;
a1ˆ:=a3ˆ;
a5 :=a8;
a1ˆ:=a3ˆ;
2.
a5 :=a8;
a1 :=a2;
a1ˆ:=a2ˆ;
a6 :=a3ˆ;
3.
a5 :=a3ˆ;
a3 :=a5;
a3 :=a5ˆ;
a8ˆ:=0;
4.
a6 :=a1ˆ;
a3 :=a2ˆ;
a4 :=a6;
a1ˆ:=a2ˆ+4.687;
5.
a4ˆ:=a6;
a5 :=a6;
a8ˆ:=-1;
a3ˆ:=a3ˆ+1.1;
6.
a4ˆ:=78;
a5 :=a3ˆ+12;
a8 :=-1000;
a5ˆ:=a8ˆ;
2. Napisać następujące definicje typów i deklaracje danych:
a) wskaźnik do liczby rzeczywistej,
b) wskaźnik do stringu o maksymalnej długości 45 znaków,
c) wskaźnik do rekordu opisującego dane personalne (nazwisko, imię, data ur. itp),
d) wskaźnik do tablicy 100 małych liter,
e) wskaźnik do dwuwymiarowej tablicy o rozmiarach 10 × 10 zawierającej liczby z zakresu [−100 . . . 13],
f) wskaźnik do tablicy zawierajaćej 100 rekordów opisujących dane personalne (pkt. c),
g) tablica zawierajaća 10 wskaźników do rekordów opisujących dane personalne (pkt. c),
h) wskaźnik do tablicy 27 wskaźników do rekordów opisujących dane personalne (pkt. c),
i) tablica 100 wskaźników do dwuwymiarowych tablic o rozmiarach 5 × 5, indeksowanych za pomocą wielkich liter, zawiera-
jących wskaźniki do znaków.
3. Zdefiniować typ rekordowy pozwalający przechowywać na stercie współrzędne czterech punktów w przestrzeni 2-wymiarowej
(każdy punkt osobno). Losowo wypełnić zawartość tych zmiennych wartościami z zakresu: [−10 . . . 10].
a) Napisać funkcję sprawdzającą czy punkty te tworzą kwadrat
b) Napisać funkcję sprawdzającą czy punkty te leżą wewnątrz czy na zewnątrz okręgu o środku w punkcie (0, 0) i promieniu
r = 5
4. Zdefiniować typ tablicowy, którego zmienne będą przechowywały adresy znaków zapisanych na stercie. Następnie napisać program
który będzie umieszczał wpisywany z klawiatury tekst na stertę i jednocześnie wpisywał adresy do alokowanych znaków do tej
tablicy (litera po literze). Znak ! powoduje zakończenie wpisywania. Założyć, że liczba wpisanych liter będzie nie większa niż
200.
5. Dany jest plik ’litery.txt’ zawierający małe litery. Napisać program odczytujący zawartość tego pliku litera po literze i jeśli
odczytana litera jest samogłoską zapisujący ją na stercie oraz zachowujący wskaźnik do niej jako element tablicy. Założyć, że w
pliku nie ma więcej niż 100 samogłosek.
13
Instytut Sterowania i Systemów Informatycznych
Uniwersytet Zielonogórski
Podstawy informatyki
Lista zadań nr. 10
Zmienne dynamiczne i listy
Sprawdzian wiadomości.
Napisać deklarację zmiennej f tak, aby było poprawne poniższe wyrażenie
f^[’a’]^+[’a’]
Lista zadań do wykonania
1. Napisać deklarację odpowiednich zmiennych tak, aby były poprawne poniższe wyrażenia:
x[1]^+[’a’]
w^[’a’]+[’a’]
x^[’a’]^*[’a’]
A1[1]^+A2[1]+4 U[lato]^+[zima]
succ(A[zima]^)<>-12
(a^+x^[’a’])*2.1
A1^[’1’]+A2[’2’]^+[’3’]
2. Napisać program, w którym zostanie stworzona lista jednokierunkowa o elementach jak na rysunku
znak
nastepny
Znaki mają być losowane z zakresu [A..Z]. Tworzenie listy zakończyć w momencie wylosowania A lub zapełnienia listy 15
elementami. Następnie napisać procedurę służącą do wyświetlania całej listy i elementu o wybranym numerze.
3. Zadanie 2 poprawić tak aby znaki były podawane z klawiatury. Tworzenie listy zakończyć w momencie naciśnięcia przez użyt-
kownika klawisza ESC.
4. Zadanie 2 uzupełnić o możliwość zmiany zawartości elementu listy o podanej wartości np. zamiana B na S (oba te znaki
powinny być parametrami procedury) oraz o podanym numerze tzn. znak zawarty w elemencie o podanym numerze powinien
być zamieniony (numer i znak do zamiany mają być elementami wejściowymi procedury).
5. Zadanie 2 uzupełnić o możliwość dopisywania elementu: na początku listy, na końcu listy, przed elementem o wskazanym numerze,
po elemencie o wskazanym numerze, po i przed pierwszym elementem zawierającym podany znak (parametr procedury) oraz po
i przed wszystkimi elementami zawierającycmi podany znak.
6. Zadanie 2 uzupełnić o możliwość usuwania elementu o wskazanym numerze (parametr procedury) lub zawierającego poddany
znak (parametr procedury) z listy.
7. Zadanie 2 uzupełnić o możliwość sprawdzania jaki element występuje na liście najczęściej.
8. Strukturę z zadania 2 zamienić tak, aby zamiast znaków zapisywane na liście były małe liczby całkowite. Następnie zmodyfikować
zadania (3-7) tak aby działały dla założonej struktury.
9. Zadanie 8 uzupełnić o możliwość zliczania liczby wystąpień elementów parzystych i nieparzystych.
10. Zadanie 8 uzupełnić o możliwość obliczania sumy, wartości średniej, wartości największej i wartości o największym module
(wartości bezwzględnej).
11. Zadanie 8 zmodyfikować tak, aby lista zawierała elementy o strukturze jak na rysunkach a) i b)
liczba
nastepny
pocz_listy
a)
liczba
nastepny
poprzedni
b)
Następnie napisać procedury do wyświetlania, przeszukiwania i zamiany elementów list o takich strukturach.
Definiowanie typów
Napisz definicje typów i deklaracje zmiennych ta, aby poniższe wyrażenia były poprawne:
A1^[’1’]+A2[’2’]^+3
succ(f^[1])<sroda
f^[lato]^*[zima] x^[’a’]^*[’a’] x[’a’]^+[’b’]
z^[1]+w^.liczba x^[1]^.liczba+w1-1000
s[’a’]^+[lato] f^[’1’,1]+[’A’] w[6]^.lancuch:=’szkola’
t^[1]+t2^[’2’]+[’a’]
r^.wyn:=r^.liczba1*sqrt(r^.liczba2)
14
Instytut Sterowania i Systemów Informatycznych
Uniwersytet Zielonogórski
Podstawy informatyki
Lista zadań nr. 11
Zmienne dynamiczne i listy
Sprawdzian wiadomości
1. Napisać ciąg instrukcji, którego wykonanie spowoduje stworzenie struktury jak na rysunku
‘A’
‘S’
‘S’
‘3’
‘d’
‘C’
pocz
nil
2. Dane są: definicja typów i deklaracja zmiennych w postaci
type wsk_znak=^znak;
znak=record
zn:char;
nast:wsk_znak;
end;
var pocz:wsk_znak;
Napisz procedurę, która będzie tworzyła listę jednokierunkową, której zawartość określa słowo podane jako parametr wejściowy tej
procedury. W pierwszym elemencie listy powinien znaleźć się pierwszy znak słowa, w drugim - drugi znak, etc.
Lista zadań do wykonania
1. Napisać program, którego działania spowoduje stworzenie struktur przedstawionych na rysunkach. Zamieścić definicje typów i
deklaracje zmiennych oraz instrukcje służące do usuwania tych struktur.
a)
‘S’
‘S’
3.1
5.0
‘C’
‘C’
pocz
b)
-1
‘S’
2
5.0
12
pocz
c)
d)
pocz
nil
‘Adam’
‘Ewa’
‘Basia’
e)
‘A’
‘C’
‘E’
pocz
1
3
5
f)
‘E’
‘U’
‘A’
‘O’
pocz
nil
g)
h)
pocz
nil
‘a’
‘a’
‘a’
‘a’
‘a’
‘a’
‘a’
‘a’
‘a’
i)
pocz
nil
nil
‘1’ ‘2’ ‘3’
‘2’ ‘3’ ‘4’
‘5’ ‘6’ ‘7’
‘¿aba’
‘pies’
‘koñ’
j)
pocz
1 2 3
2 3 4
5 6 7
15
Instytut Sterowania i Systemów Informatycznych
Uniwersytet Zielonogórski
Imię i nazwisko
Grupa
Podstawy Informatyki
Przykładowy sprawdzian wiadomości 1
1. (5 pt.) Opisz pętlę FOR
2. (5 pt.) Znajdź błędne deklaracje z poniższych przykładach. Zamieść ich poprawną postać.
• var liczby:(1,1,2,3,2,1,3,4,4,5);
• type tab=array[1.2,1.8,1.5] of char;
• const e=2,71;
• var liczba:real;
• var l;l1:byte;
3. (10 pt.) Znajdź błędy składniowe i logiczne w poniższym programie:
program pierwszy
uses crt;
const r=’7’;
type tablica=array (1..r) of byte;
var T4:tablica;
licznik:integer
BEGIN
randomize;
for licz1=1 to rozmiar do
T(licznik)=-65;
write (T4(licznik))
end;
END.
4. (5 pt.) Co będzie wynikiem wykonania poniższego programu. Odpowiedź uzasadnij.
program drugi;
const e=2.71;
uses crt;
var pomoc,wykl:byte;
procedure e_do_x(wynik:real; x:byte);
begin
wynik:=1;
if x>0 then
for licznik:=1 to x do
wynik:=wynik*e;
end;
BEGIN
wykl=0;
pomoc=2;
e_do_x(pomoc,wykl);
write(’e^’,x,’=’pomoc)
END.
5. (5 pt.) Napisz program, obliczający wartość wyrażenia
(n−1)
3
n
2
z liczby naturalnej podanej przez użytkownika. Wynik ma być
wypisywany na ekran.
6. (10 pt.) Napisz i użyj w programie głównym procedurę, która będzie znajdywała i zwracała sumy: liczb parzystych i liczb
nieparzystych występujących w podanej tablicy liczb naturalnych. Tablica ta jest parametrem wejściowym procedury. Zamieścić
odpowiednią definicję typu.
7. (10 pt.) Napisz i użyj w programie głównym funkcję, której parametrami będą dwie liczby naturalne. Funkcja ma zwracać liczbę
naturalną wylosowaną z zakresu określonego przez te liczby tzn. pierwsza liczba stanowi lewą granicę zakresu, a druga prawą.
W przypadku gdy pierwsza liczba jest równa lub mniejsza od drugiej funkcja ma zwracać 0.
16