Download as pdf or txt
Download as pdf or txt
You are on page 1of 2

I.

Biblioteka
Przenieść książki z tablicy ksiazki , znajdujące się w typie strukturalnym Magazyn do tablicy
ksiazki znajdujące się w typie strukturalnym Polka
struct Ksiazka {
char *autor;
};
struct Polka {
int ilosc;
struct Ksiazka** ksiazki; // tablica wskaźników
};
struct Magazyn {
int ile_autorow;
struct Ksiazka* ksiazki; // tablica obiektów
};
układając książki alfabetycznie według nazwisk autorów na odpowiednie półki. Początkowo
wszystkie nazwiska autorów książek znajdują się w lokalnej tablicy autorów autorzy :
Wells H.G. , Bradbury Ray, Dick Philip, Abbott Edwin, Guin Ursula, Butler Octavia, Gibson
William, Herbert Frank, Crichton Michael, Heinlein Robert, Azimov Isaac, Kavan Anna, Lem
Stanislaw, Simmons Dan, Banks Iain, Clarke Arthur, Stephenson Neal, Shelley Mary, Verne
Jules, Bester Alfred
Ta tablica dalej służy do tworzenia obiektu typu strukturalnego Magazyn , składający się z książek
właśnie z nazwiskami autorów z tablicy autorzy.
1. Zdefiniuj na początku funkcji main() tablicę o określonym rozmiarze, ile_autorow , (na
stosie) o nazwie autorzy i zainicjuj ją podanymi wyżej nazwiskami w podanej kolejności.
2. Przekaż przez argumenty i użyj tych zmiennych w funkcji biblioteka(…), w której ma być
zaimplementowana reszta kodu.
3. Stwórz obiekt na stercie albo na stosie dla zmiennej magazyn typu strukturalnego
Magazyn . W razie realizacji zadania ze stworzeniem obiektu na stercie, zdefiniuj i użyj
funkcji o nazwie stworz_magazyn(...) .
4. Korzystając z ile_autorow i tablicy autorzy w funkcji stworz_ksiazki(...) przydziel
pamięć dla tablicy książek ksiazki w zmiennej strukturalnej typu Magazyn i inicjuj każdą
książkę odpowiednim nazwiskiem autora autor z tablicy autorzy.
5. Pokaż książki należące do obiektu magazyn typu strukturalnego Magazyn za pomocą
funkcji pokaz_magazyn(…).
6. Uporządkuj książki (funkcja zrob_porzadek()): książki z magazyn przenieś do pólek.
Na pierwszej półce umieść książki alfabetycznie według nazwisk autorów od A do H,
natomiast na drugiej od I do Z. Pod czas przenoszenia książki z magazyn do półek rozmiar
tablicy ksiazki w zmiennej strukturalnej Magazyn i, odpowiednio, zaalokowana pamięć
powinni zostać zredukowane (np. za pomocą funkcji usun_obiekt_z_tablicy(...)),
natomiast rozmiar tablicy ksiazki w każdym obiekcie typu strukturalnego Polka powinien
się powiększać (np. za pomocą funkcji dodaj_obiekt_do_tablicy(...)).
7. Wyświetl książki, znajdujące się na każdej z półek (funkcja pokaz_polke(...)).
8. Napisz niezbędne funkcje do zwalniania pamięci.
W programie nie powinno być zmiennych globalnych. Program napisać w jednym pliku.

II. Realizacja wymogu co do tworzenia kodu z zarządzaniem pamięcią

Pseudokod dodawania :
... dodaj_obiekt_do_tablicy(nazwa_zmiennej, … ) {
1. stwórz na stercie nową tablicę o większym rozmiarze :
nowa_nazwa_zmiennej
2. skopiuj obiekty albo jej adresy ze starej tablicy do nowej
3. przydziel pamięć dla nowego obiektu (tylko dla tablicy wskaźników)
4. zwolnij stary pojemnik
5. nazwa_zmiennej = nowa_nazwa_zmiennej
}

Pseudokod dodawania usunięcia :


... usuń_obiekt_z_tablicy(nazwa_zmiennej, … ) {
1. stwórz na stercie nową tablicę o mniejszym rozmiarze :
nowa_nazwa_zmiennej
2. skopiuj obiekty albo jej adresy ze starej tablicy do nowej
3. usuń wskaźnik do zbędnego obiektu (tylko dla tablicy wskaźników)
4. zwolnij stary pojemnik
5. nazwa_zmiennej = nowa_nazwa_zmiennej
}
III. Ocena

Gdy używa się tylko stosu, maksymalna ocena : 3,5

Wszystkie funkcje powinny być typu void.

You might also like