• Nie Znaleziono Wyników

Podstawy informatyki, rok pierwszy

N/A
N/A
Protected

Academic year: 2021

Share "Podstawy informatyki, rok pierwszy"

Copied!
17
0
0

Pełen tekst

(1)

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

(2)

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

(3)

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}

(4)

{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.

(5)

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 y1 i y2:

• dla a < 0 i b < 0 ⇒ y1= 1

• dla a = 0 lub b = 0 ⇒ y1= 1, y2= 1

• dla a > 0 i b > 0 ⇒ y1= 1, y2= a

• dla a > 0 lub b < 0 ⇒ y1= −1, y2=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 =0duze ujemne0

• dla −20 < a < −10 ⇒ zmienna =0srednie ujemne0

• dla −10 < a < 2 ⇒ zmienna =0male ujemne lub zero lub male dodatnie0

• dla 2 < a ⇒ zmienna =0 inne0

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 =0duze ujemne0

• dla a ∈ [−19, −10] ⇒ zmienna =0 srednie ujemne0

• dla a ∈ [−9, 2] ⇒ zmienna =0male ujemne lub zero lub male dodatnie0

• dla a ∈ [3, 127] ⇒ zmienna =0 inne0

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.

(6)

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.

(7)

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 (x1, y1)...(xn, yn) 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.

(8)

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 x1, y1, x2, y2są 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 b2− 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 :

xn= 1 + n2− 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ź:

(9)

• 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 x1, y1, x2, y2 (współrzędne są argumentami)

26. Wypisz na ekranie ciąg kolejnych znaków od znaku z1 do znaku z2. (z1i z2 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 liczbamaks liczbę początkowych liczb naturalnych, których suma przekracza sumamaks. (sumamaks 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 n2

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.

(10)

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 R3 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).

(11)

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.

(12)

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.

(13)

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.

(14)

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.

(15)

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)

(16)

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’

pocz ‘C’

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

(17)

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)n2 3 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.

Cytaty

Powiązane dokumenty

W przypadku, gdy wektory mają różną liczbę elementów funkcja ma tylko zwrócić komunikat

Jeżeli pierwszy wyraz tego ciągu arytmetycznego zmniejszymy o 7, drugi pozostawimy bez zmian, a trzeci zwiększymy o 3, to otrzymamy trzy kolejne wyrazy ciągu

Celem pracy była ocena poziomu wiedzy żywieniowej na temat zalecanej diety wśród otyłych pacjentów ze zdiagnozowaną cukrzycą typu 2.. MATERIAŁ

Start, Pomoc, Karta Indeks, w polu 1 wpiszmy: Nazwy plików, a z menu poniżej w polu 2, wybierzmy podpunkt nazwy folderów, zmiana i kliknijmy przycisk Wyświetl.. W oknie

Tuż przed wyjściem program zapisuje „Dane” na dysk, do pliku w tym samym katalogu, z którego został uruchomiony. Po starcie program odczytuje „Dane”