3TI zadania praktyki, Programowanie


Zadania bardzo proste (dop)

Napisz program, który wypisze liczbę pi:

  1. bez formatowania;

  2. z formatowaniem: na 16 polach z 14 liczbami po przecinku;

  3. z formatowaniem: na 17 polach z 14 liczbami po przecinku;

  4. z formatowaniem: na 5 polach z 3 liczbami po przecinku;

  5. z formatowaniem: na 11 polach z 9 liczbami po przecinku;

  6. z formatowaniem: na 11 polach z 2 liczbami po przecinku;

Napisz program, który poprosi użytkownika o liczbę rzeczywistą x i wypisze na ekranie w sposób estetyczny:

  1. wartość bezwzględną z x;

  2. kwadrat liczby x;

  3. pierwiastek z x;

  4. logarytm naturalny z x;

  5. wartość ex;

  6. wartość sinx;

  7. wartość cosx;

  8. wartość tan-1x;

  9. liczbę całkowitą najbliższą liczbie x;

  10. część całkowitą liczby x (przy pomocy funkcji trunc);

  11. część całkowitą liczby x (przy pomocy funkcji int);

  12. część ułamkową liczby x;

  13. tangens liczby x.

Napisz program, który:

  1. poprosi o podanie dwóch liczb całkowitych;

  2. wczyta te liczby z klawiatury;

  3. wydrukuje dla tych dwóch liczb tabelkę podobną do poniższej:


Jeśli np. wczytane liczby wynoszą 3 i 5, to tabelka powinna wyglądać tak:

Liczba a wynosi 3, liczba b wynosi 5

a+b

a-b

a*b

a mod b

b div a

8

-2

15

3

1

Napisz program, w którym zadeklarujesz procedurę gora, która będzie działać następująco:

Wywołanie: gora('*');
wypisze na ekranie:

**

****

******

********

**********

wywołanie gora('+');
wypisze na ekranie

++

++++

++++++

++++++++

++++++++++

wywołanie gora('0');
wypisze na ekranie

00

0000

000000

00000000

0000000000

itd.

Napisz program, w którym zadeklarujesz procedurę o nazwie Trójkąt, która będzie działać w następujący sposób:

przy wywołaniu Trojkat(1); wypisze na ekranie:

1


przy wywołaniu Trojkat(2); wypisze na ekranie:

1

2 2


przy wywołaniu Trojkat(3); wypisze na ekranie:

1

2 2

3 3 3


itd.

Wskazówka: Skorzystaj z dwóch zagnieżdżonych pętli FOR

Zmodyfikuj procedurę Trójkąt z poprzedniego zadania tak, aby działała w następujący sposób:

przy wywołaniu Trojkat(1); wypisze na ekranie:

1

przy wywołaniu Trojkat(2); wypisze na ekranie:

2 2

1


przy wywołaniu Trojkat(3); wypisze na ekranie:

3 3 3

2 2

1


itd. Wskazówka: Wykorzystaj słowo kluczowe DOWNTO

Skonstruuj procedurę góra, która będzie działać następująco:

wywołanie gora('*',5); wypisze na ekranie

**

****

******

********

**********


wywołanie gora('+',3); wypisze na ekranie

++

++++

++++++

itd.

Spróbuj teraz wywołać procedurę góra w następujący sposób: gora(5,'*'). Co się stało? DLACZEGO?

Napisz algorytm (FUNKCJĘ) obliczający wartość premia zgodnie ze wzorem:

0x01 graphic

dla dowolnej zmiennej całkowitej zyski oraz zdefiniowanej stałej p = 25.

Napisz program obliczający wartość z wyrażenia zgodnie ze wzorem:

0x01 graphic
0x01 graphic

dla dowolnie zadeklarowanej zmiennej rzeczywistej x i stałej p = 7.5. Wyświetlając wynik zastosuj ograniczenie do 3 miejsc po przecinku.

Napisz program w którym użytkownik podaje 10 liczb rzeczywistych, a program wyświetla ich sumę. (wskazówka: zdefiniuj typ tablicowy). Wsk. Zdefiniuj funkcję suma, do której jako parametr przekażesz tablicę wartości.

Napisz procedurę, który zamienia wartości dwóch zmiennych podanych jako parametry.

Napisz 2 procedury, które dla podanych jako parametr wartości promienia lub średnicy koła wyliczają:

· pole koła

· obwód koła
WSK. Wywołać odpowiednią procedurę, w zależności od tego czy użytkownik podał promień czy średnicę koła.

Napisz program, który wczytuje pewną liczbę całkowitą i podaje, ile wynosi liczba:

setek, dziesiątek, jedności. Wykorzystaj funkcje DIV i MOD.

Napisz funkcję, która sumuje wszystkie cyfry podanej jako parametr liczby całkowitej i przetestuj ją w programie.

Napisz procedurę, która wypełnia tablicę podaną jako parametr, liczbami losowymi
z zakresu 1-n, gdzie n jest liczbą naturalną podaną przez użytkownika. W programie przetestuj procedurę, wyświetl tablicę i sumę wszystkich liczb z tej tablicy.

Napisz program, który wczytuje temperaturę w stopniach Celsjusza i podaje ją w stopniach Kelwina. WSK. zdefiniuj funkcję

Napisz program, który sumuje liczby całkowite z przedziału n..m, gdzie liczby n i m są podane przez użytkownika.
(wsk. sprawdzić czy n<m; wykorzystać pętlę while)

Napisz program, który znajduje miejsce zerowe funkcji liniowej y = a*x + b WSK. Zdefiniuj funkcję y z parametrami a,b i x

Napisz program wypisujący wszystkie podzielniki wpisanej przez użytkownika liczby całkowitej z zakresu od 1 do 1000.

Napisz funkcję, w której wczytywane są kolejne liczby podawane przez użytkownika i zliczana jest ich suma, aż do wpisania liczby 0. (wsk. pętla repeat...until)

Napisz program, w którym użytkownik podaje numer miesiąca, w którym się urodził. Wyświetl na ekranie tekst: `Miesiąc w którym się urodziłeś to: .........', gdzie miesiąc jest wyświetlany słownie (wykorzystać instrukcję case)

Napisz program obliczający wartość wyrażenia

0x01 graphic
dla podanej przez użytkownika liczy rzeczywistej x i zdefiniowanej stałej p=2.5.
Wynik wyświetl z dwoma miejscami po przecinku.

Zbadaj czy z docinków a, b, c można zbudować trójkąt i określ typ tego trójkąta.

Zadania proste (dst)

Napisz funkcję, która odwraca kolejność znaków w łańcuchu. Np. las -- sal

W tablicy dwuwymiarowej znaleźć maksymalne elementy w poszczególnych kolumnach i minimalne w każdym wierszu,
a następnie zsumować osobno elementy maksymalne i minimalne.

Napisz program - tabliczkę mnożenia dla liczb 1..10 i wyświetl ją w postaci krzyżowej (tablica 10x10). WSK. Procedura

Napisz program (funkcję) obliczający wartość wyrażenia

0x01 graphic
dla podanej przez użytkownika liczy rzeczywistej x i zdefiniowanej stałej p=2.5.
Wynik wyświetl z dwoma miejscami po przecinku.

Napisz program w którym wypełnisz tablicę [12x18] liczbami losowymi (procedura) i wyświetlisz liczbę maksymalną w tej tablicy (funkcja).

Napisz procedurę, która wczytuje wartości pól do rekordu typu osoba (o polach: imię, nazwisko, wiek, czy_dzieci).
Wsk. zmienna rekordowa przekazywana jest do procedury jako parametr. Procedurę przetestuj
w programie podając dane 2 osób, a następnie wyświetl informację o tym która osoba jest starsza (funkcja).

Pamiętając, że pierwiastki równania kwadratowego

0x01 graphic
można znaleźć ze wzorów:

0x01 graphic
gdzie 0x01 graphic

napisz program, który poprosi użytkownika o podanie współczynników a, b, oraz c, a następnie wyliczy na podstawie tych współczynników pierwiastki równania kwadratowego (zgodnie z podanymi wyżej wzorami) i wypisze je na ekranie
w estetyczny sposób. Następnie wykorzystaj napisany program do rozwiązania równania: 0.9x2 - 1.22x + 0.05 = 0

Napisz procedurę, która wypełnia tablicę podaną jako parametr, liczbami losowymi
z zakresu 1-n, gdzie n jest liczbą naturalną podaną przez użytkownika, a następnie wyświetla liczbę maksymalną.

Napisz program, który umożliwi zamianę wszystkich znaków w tekście przez podany znak.
Np. Ala ma kota. a na x Alx mx kotx.

Napisz program (funkcję) na obliczanie średniej arytmetycznej liczb, który:

  1. najpierw poprosi użytkownika o podanie liczby danych (i zgłosi ewentualny błąd, jeśli podana liczba danych będzie większa od dopuszczalnego zakresu);

  2. następnie poprosi użytkownika o podanie danych;

  3. obliczy i wypisze średnią na ekranie.

Napisz program, w którym użytkownik podaje dowolny łańcuch o długości nie większej niż 50 znaków. Powtarzaj wczytywanie dopóki łańcuch nie będzie miał odpowiedniej długości.(wsk. pętla repeat ...until; w przypadku gdy łańcuch ma dł>50 znaków wyświetl komunikat i z powrotem informację `Podaj dowolny łańcuch o długości nie większej niż 50 znaków'). Następnie wyświetl na ekranie: długość podanego łańcucha, ilość wyrazów w tym łańcuchu (wsk. policz spacje) oraz wyświetl łańcuch tak, aby wszystkie litery a były wyświetlane A. WSK. funkcja zliczająca ilość wyrazów w łańcuchu, procedura zamieniająca znaki

Napisz program, w którym zdefiniujesz typ rekordowy określający datę (dzień, miesiąc, rok). Użytkownik podaje dwie daty (swojego urodzenia i obecną), a program wyświetla je na ekranie. WSK. Procedura wczytująca dane do rekordu

Napisz program który wczytuje z klawiatury dwa napisy i funkcję która oblicza ile znaków pierwszego napisu jest takich samych jak odpowiednie znaki (na takiej samej pozycji licząc od początku) drugiego napisu.

Np. Dla napisów: Ala ma kota

Ola lubi matematykę

Są 4 znaki takie same na pozycjach 2,3,4(spacja) i 10.

Napisz procedurę wczytującą dane do rekordu osoba (pola: nazwisko, imię, kolor oczu), następnie napisz procedurę, która wyświetla wszystkie osoby o niebieskich oczach. Przetestuj w programie.

Napisz program, który, wczytuje losowo do tablicy 50 elementowej liczby z zakresu (0..30). Zadaniem programu jest wypisanie indeksów elementów tablicy, których wartość wynosi k, gdzie k jest podane przez użytkownika. Jeśli nie ma takiego elementu, wypisuje komunikat „brak elementu równego k w tablicy”. Następnie wyświetlana jest suma elementów znajdujących się w tablicy.

Np. mając daną tablicę:

3

4

0

1

0

Na ekranie pojawia się komunikat: Elementy tablicy, których wartość wynosi 0 są w tablicy na pozycji: 3, 5

Suma elementów tablicy = 8;

(*zdefiniować procedury realizujące podane zadania oraz procedurę wyświetlającą tablicę i wykorzystać ją w programie)

Zadania proste /niebanalne (db)

Napisz program, który, wczytuje losowo do tablicy 20 elementowej liczby z zakresu (0..5). Zadaniem programu jest wypisanie indeksów elementu tablicy, którego wartość wynosi 0. Jeśli nie ma takiego elementu, wypisuje komunikat „brak elementu zerowego”.

Napisz program zamiany liczby arabskiej na rzymską.

Napisz program, w którym stworzysz typ rekordowy punkt. W programie użytkownik podaje współrzędne dwóch punktów 0x01 graphic
i 0x01 graphic
, a program oblicza odległość między nimi wg. wzoru 0x01 graphic

Napisz program, w którym zadeklarujesz i wykorzystasz funkcję liczącą x do potęgi y.

Napisz program, który przeczyta z klawiatury Twoje imię i nazwisko jako osobne dane typu string a następnie połączy je
w jeden łańcuch przy pomocy funkcji CONCAT i wypisze ten łańcuch do pliku tekstowego.

Napisz funkcję, która sprawdza czy liczba jest pierwsza. W programie przy pomocy tej funkcji sprawdzić które z liczb znajdujących się w pliku tekstowym są pierwsze i wyświetlić je na ekranie.

Napisz program, który realizuje zamianę systemu dziesiętnego na system dwójkowy (i na odwrót). Użytkownik podaje liczbę całkowitą w systemie dziesiętnym, a program wyświetla ją w systemie dwójkowym (i na odwrót).

Napisać program umożliwiający wpisanie tekstu o długości nie przekraczającej 15 znaków lub zakończonego znakiem $ przydzielić do grupy znaków takich jak: litery, cyfry, operatory i znaki specjalne określając jednocześnie liczebność każdej grupy. Dla każdego znaku tekstu, w osobnym wierszu wyprowadzić ten znak i nazwę grupy do której należy np.: a- litera, 5 - cyfra itd.

Napisać program który utworzy tablicę tab2, której każdy element jest iloczynem minimalnej liczby z i-tego wiersza przez maksymalną liczbę z j-tej kolumny tablicy dwuwymiarowej tab1.

Wczytane są dwie liczby naturalne a i b (a>b). Program ma podać wszystkie liczby pierwsze z przedziału <a,b> i zapisac je do pliku tekstowego.

Napisać program znajdowania N ( gdzie n parametr programu) składników następującej sumy, na przykład

dla: n=3

wynik: 1+22+333

Napisz program sprawdzający czy podany łańcuch lub liczba jest palindromem. (napisać podprogramy realizujące zadanie)

Zadania trudniejsze (bdb)

Liczba 151 jest palindromem pierwszym, tzn. jest to liczba pierwsza, która jest palindromem. Napisz program wypisujący wszystkie palindromy pierwsze nie mniejsze niż a i nie większe niż b. Np. dla a=5, b = 200 - wynik: 7,11,101,131,181,191.

Napisać podprogram który dla tablicy dwuwymiarowej zawierającej liczby rzeczywiste sumuje elementy tej tablicy leżące
w obrębie kwadratu o boku k, którego lewy górny róg jest zaczepiony w punkcie o współrzędnych i,j. Wykorzystać ten podprogram do określenia takiego położenia tego kwadratu w tablicy a, aby suma jego elementów była minimalna.

Napisać program zamiany wiersza i-tego z kolumną j-tą, gdzie i oraz j są odpowiednio numerami wiersza i kolumny, na przecięciu których umieszczony jest element maksymalny. Tablica zawiera n wierszy i tyle samo kolumn.

Napisz program, który w dowolnym ciągu temperatur (min 10) znajduje największy skok temperatur, tzn. największą, co do wartości bezwzględnej różnicę pomiędzy kolejnymi wyrazami ciągu. WSK. Wartości temperatur odczytać z pliku tekstowego.

Napisz program, który przetwarza dane słowo ustawiając litery w słowie w porządku alfabetycznym, na przykład słowo „burak” tworzy słowo: „abkru”.

Pamiętając, że pierwiastki równania kwadratowego

0x01 graphic
można znaleźć ze wzorów: 0x01 graphic
gdzie 0x01 graphic

napisz program, który poprosi użytkownika o podanie współczynników a, b, oraz c, a następnie wyliczy na podstawie tych współczynników pierwiastki równania kwadratowego (zgodnie z podanymi wyżej wzorami) i wypisze je na ekranie
w estetyczny sposób.

Następnie wykorzystaj napisany program do rozwiązania równania: 0.9x2 - 1.22x + 0.05 = 0

Zmodyfikuj program do rozwiązywania równania kwadratowego w taki sposób, aby:

- można było rozwiązać wiele kolejnych równań kwadratowych bez konieczności ponownego uruchamiania programu (pętla repeat);

- ciało programu wywoływało trzy procedury:

  • czytaj(a,b,c)-procedura czytająca podane przez użytkownika parametry równania kwadratowego i zmuszająca go do podania niezerowej wartości parametru a (pętla while);

  • policz_i_wypisz(a,b,c)-procedura obliczająca deltę i pierwiastki równania oraz wypisująca wynik na ekranie;

  • zapytaj_co_dalej(odp)-procedura prosząca użytkownika o naciśnięcie "1", jeśli chce rozwiązać kolejne równanie kwadratowe albo "0", jeśli chce wyjść z programu; odpowiedź użytkownika powinna być przechowywana na parametrze odp.

- parametr odp (zwracany przez procedurę zapytaj_co_dalej) powinien być wykorzystany jako warunek sterujący pętlą repeat (patrz punkt 1).

Napisz program na obliczanie średniej arytmetycznej, który:

  1. najpierw poprosi użytkownika o podanie liczby danych (i zgłosi ewentualny błąd, jeśli podana liczba danych będzie większa od dopuszczalnego zakresu);

  2. następnie poprosi użytkownika o podanie danych;

  3. obliczy i wypisze średnią na ekranie.

Zmodyfikuj program z poprzedniego zadania tak, aby wczytywał dane z pliku, w którym najpierw podano liczbę danych,
a następnie same dane. Wykorzystaj dowolnie stworzony przez siebie plik dane.txt, aby przetestować program.

Napisz program, w którym zdefiniujesz typ rekordowy ulamek i wykonasz dodawanie dwóch ułamków podanych przez użytkownika. (ułamki o różnych mianownikach, wynik wyświetl w postaci ułamka po skróceniu)

Napisać program, który wczyta dane do tablicy 2-wymiarowej [n × n] i obliczy sumę elementów tablicy według podanego poniżej wzoru t1[i,j]+t2[i,j]=t3[i,j] gdzie i i j są odpowiednio numerami wiersza i kolumny a następnie ją wyświetli

Określ liczbę odpowiednich banknotów i monet potrzebnych do wypłacenia pracownikowi wypłaty przy założeniu, że wypłata jest dokonywana przy użyciu najmniejszej liczby wypłacanych banknotów i monet oraz że znane są wartości banknotów, monet
i wysokość wypłaty.

Liczby zaprzyjaźnione to takie liczby, z których każda jest równa sumie podzielników właściwych drugiej liczby. Napisać program znajdujący 4 pary liczb z przedziału od 1 do 5600

Dany jest ciąg k liczb rzeczywistych (k <= 50). Napisz program znajdowania i drukowania numeru i wartości takiego elementu ciągu, którego wartość różni się minimalnie od średniej arytmetycznej wszystkich elementów ciągu.

Zadania trudne (cel)

Napisz funkcję rekurencyjną realizującą obliczanie wartości n tego elementu ciągu Legrandre'a metodą iteracyjną, którego elementy są opisane w poniższy sposób:

Po(x)=1

P1(x)=x

Pn(x)= ((2n-1)/n)Pn-1(x)- ((n-1)/n)Pn-2(x) dla n>1

Oblicz NWD dwóch liczb metodą odejmowania i Euklidesa. Zaprojektuj menu programu wykorzystując instrukcję wyboru CASE.

Napisz program realizujący zamianę dowolnego systemu liczbowego na inny system. W menu programu zaprojektuj wybór systemu początkowego i docelowego. Jedną z opcji powinna być możliwość zamiany liczby z dowolnego systemu na wszystkie pozostałe i wyświetlenie wyników. Program działa dopóki użytkownik nie wybierze z menu opcji wyjścia z programu.

n-cyfrowa liczba naturalna jest liczbą Amstronga, jeśli jest równa sumie n-tych potęg swoich cyfr. Np. liczba 153=13+53+33.

Napisać program znajdujący 2 i 3 cyfrowe takie liczby.

0x08 graphic
Budynki

Diagram przedstawia plan osiedla, które składa się
z 36 domów stojących tuż obok siebie. Budynki mają od 1 do 6
kondygnacji i rozmieszczono je tak, że w każdym rzędzie
i w każdej kolumnie stoją domy o różnej liczbie pięter.
Należy oznaczyć ich wysokości cyframi od 1 do 6,
kierując się liczbami poza diagramem, które informują,
ile budynków widać z danej strony.

Napisz program realizujący rozwiązanie zadania.

Napisać funkcję rekurencyjną obliczającą

0x01 graphic

Jak czas obliczania f(n) oraz zajętość stosu zależy od n? Przebuduj funkcję tak, aby f(n -1) było obliczane tylko jednokrotnie.
Czy zmienia się dzięki temu czas obliczeń i zajętość stosu?

Napisać funkcję rekurencyjną obliczania wartości funkcji Ackermanna dla m, nN:

0x01 graphic

Sprawdzić, dla jakich m i n możliwe jest obliczenie wartości tej funkcji. Ile wywołań funkcji rekurencyjnej jest konieczne do obliczenia kolejnych wartości funkcji A(m,n).

Napisać funkcję rekurencyjną obliczania wartości zmodyfikowanej funkcji Ackermanna dla m, nN

0x01 graphic

Sprawdzić, dla jakich m i n możliwe jest obliczenie wartości tej funkcji. Ile wywołań funkcji rekurencyjnej jest konieczne do obliczenia kolejnych wartości funkcji A(n, m).

Napisać funkcję rekurencyjną obliczania największego wspólnego dzielnika dla m, nN.

Napisać funkcję rekurencyjną umożliwiającą rozwiązanie problemu Wieże Hanoi.

Napisać program wybierający drogę przemieszczania skoczka szachowego po szachownicy, tak by nie wkroczył dwa razy na to samo pole i przebył wszystkie pola szachownicy.

Napisać rekurencyjną funkcję wypisującą nieujemną liczbę całkowitą w zapisie dwójkowym (Uwaga na właściwą kolejność wypisywanych cyfr!).

Sprawdzić rekurencyjnie, czy podany łańcuch tekstowy jest palindromem (wygląda identycznie czytany od przodu i od tyłu , np. "kajak " lub "kobyła ma mały bok").

Napisać rekurencyjną funkcję odwracającą kolejność liczb w tablicy n-elementowej.

Napisać rekurencyjną funkcję rozkładającą liczbę nN na czynniki pierwsze.

Napisać funkcję realizującą wyszukiwanie binarne liczby x w posortowanej tablicy.

Porównać czasy obliczeń i zajętość stosu w poniższych metodach obliczania silni dla nN.

a) 0x01 graphic

b) 0x01 graphic
(rekurencja prawostronna)

Znajdź największą (dla danego typu wyniku) wartość n, dla której uzyskuje się jeszcze prawidłowy wynik. Napisz funkcję liczącą silnię zabezpieczoną przed podawaniem nieprawidłowego wyniku.

Napisać program symulacyjny "Grę w Życie".

Zasady gry w Życie.

Gra w Życie jest symulacją odbywającą się na prostokątnej pokratkowanej planszy. Krawędzie planszy są ze sobą sklejone (tzn. idąc w prawo ze skrajnie prawego pola planszy przejdziemy na znajdujące się w tym samym wierszu skrajnie lewe pole i analogicznie w pionie). Każda kratka jest pusta lub zawiera komórkę, która reprezentuje żywego osobnika. Populacja żywych osobników zmienia się z pokolenia na pokolenie wg następujących reguł:

1. Jeżeli żywy osobnik ma co najwyżej jednego żywego sąsiada, to umiera z samotności.
2. Jeżeli żywy osobnik posiada co najmniej czterech żywych sąsiadów, to umiera z przeludnienia.

3. Jeżeli żywy osobnik posiada co najmniej dwóch i co najwyżej trzech żywych sąsiadów, to przeżywa.

4. W pustej kratce rodzi się życie, jeżeli sąsiaduje ona z dokładnie 3 kratkami zawierającymi żywe osobniki.

Sąsiadami kratki jest wszystkie 8 otaczających ją kratek. Każda komórka ma ośmiu "sąsiadów", czyli komórki przylegające do niej bokami i rogami. Zauważmy, że „zewnętrzne sklejenie krawędzi” powoduje że każda kratka ma 8 otaczających ją komórek.

Program powinien:

a) wczytać ze standardowego wejścia dane zawierające liczbę kroków symulacji i początkowy stan symulacji,

b) w kolejnych krokach wyświetlać następujące po sobie układy osobników.

Format danych wejściowych:

* pierwszy wiersz zawiera liczbę naturalną k określającą liczbę kroków symulacji.

* kolejne n-wierszy (n jest stała w programie, ustalamy że będzie ona równa 23) zawiera po n znaków. Każdy znak jest albo znakiem ' ' (spacja - reprezentuje puste pole) albo '*' (osobnik).

Format danych wyjściowych: k bloków o podanym niżej formacie:

* n wierszy zawierających po n znaków (' ' i '*') interpretowanych jw.

* między każdą kolejną parą bloków jeden wiersz zawierający n znaków '-' (minus)

Pierwszy blok reprezentuje stan początkowy (to, co podano na wejściu), każdy następny blok opisuje stan symulacji po kolejnym jej kroku.

Uwaga: wszystkie wiersze wypisywane przez program powinny mieć dokładnie n znaków.

Napisz program umożliwiający przeglądanie i modyfikowanie bazy danych przechowującej następujące informacje o osobach:

- imie: napis długości maksymalnie 15

- nazwisko: napis długości maksymalnie 20

- plec: wartość typu wyliczeniowego (kobieta, mężczyzna)

- rokUrodzenia: liczba całkowita

Baza danych będzie zapisana w trzech plikach. Pierwszy z nich przechowuje rekordy z informacjami wymienionymi powyżej. Dwa pozostałe pliki (tzw. indeksy) będą plikami liczb całkowitych (longint) zawierającymi numery rekordów bazy danych uporządkowane w kolejności niemalejącej wartości odpowiednio pól "nazwisko" oraz "rokUrodzenia".

Indeksy pozwolą na efektywną realizację wyszukiwania rekordów. Jeżeli np. pojawi się potrzeba odnalezienia rekordu o określonej wartości pola "rokUrodzenia", zastosujemy wyszukiwanie binarne jego numeru w indeksie.

Program będziemy wywoływali z trzema parametrami będącymi kolejno: nazwą pliku rekordów, nazwą pliku indeksu dla pola "nazwisko" i nazwą pliku indeksu dla pola "rokUrodzenia".

Po uruchomieniu program oczekuje na polecenia wydawane przez użytkownika. Polecenie wydajemy wprowadzając w oddzielnym wierszu pojedynczą literę, a następnie, w kolejnych wierszach, ewentualne argumenty polecenia.

Niektóre polecenia wymagają od programu wyświetlenia zawartości rekordów. Każdy rekord należy wyświetlać w oddzielnym wierszu podając kolejno: fizyczny numer rekordu w bazie danych, spacje, imię, spacje, nazwisko, spacje, płeć (napis kobieta lub mężczyzna), spacje i rok urodzenia.

Program powinien wykonywać następujące polecenia:

i - wyszukanie w bazie wszystkich osób o imieniu będącym argumentem polecenia. W odpowiedzi wyświetlamy zawartości odnalezionych rekordów.

n - wyszukanie w bazie osób o podanym jako argument nazwisku.

p - wyszukanie osób o podanej płci. Argumentem będzie napis: kobieta lub mężczyzna

r - wyszukanie osób urodzonych w podanym roku

a - wyświetlenie wszystkich rekordów bazy danych uporządkowanych wg niemalejącej wartości pola "nazwisko"

o - wyświetlenie wszystkich rekordów bazy danych uporządkowanych wg niemalejącej wartości pola "rokUrodzenia"

d - dodanie rekordu do bazy danych. Argumentami polecenia będą wartości, które należy umieścić w poszczególnych polach.
W wypadku pola "plec" argumentem będzie napis kobieta lub mężczyzna

u - usunięcie rekordu o numerze podanym jako argument

k - zakończenie pracy z bazą danych

Operacje szukające rekordów wg wartości pól "nazwisko" i "rokUrodzenia" powinny korzystać z indeksów bazy danych. Operacje dodawania i usuwania do bazy danych powinny także aktualizować pliki indeksów.

Należy zadbać o to, by po usunięciu rekordu z bazy danych nie pozostała w niej "dziura". W tym celu należy w miejsce po usuniętym rekordzie przenieść ostatni rekord bazy.

2

2

5

2

1

4

2

3

2

5

3

1

1

4

2

2

3

2

2

3

1

2

4

3



Wyszukiwarka