PRI, laboratorium 6


Zakres materiału: Struktury, typ wyliczeniowy, dynamiczna alokacja pamięci. (5 pkt)


Zadanie 1. Wprowadzenie do struktur.

  1. W katalogu lab6 utworzyć nowy projekt zad1 i do głównego pliku projektu skopiować zawartość pliku źródłowego zad1.c.
  2. Zapoznać się z kodem programu i odpowiedzieć na następujące pytania:
    1. Dlaczego napisy kopiujemy do struktury, a nie przypisujemy (funkcja opisz_przedmiot)?
    2. Czy funkcja opisz_przedmiot wykona się poprawnie dla dowolnych argumentów?
    3. Co się stanie jeżeli zmodyfikujemy pola struktury p podczas wywołania funkcji dodaj_przedmiot?
    4. Czy funkcja dodaj_przedmiot zawsze wykona się poprawnie?
  3. Wprowadzić prostą modyfikację do funkcji zaplac, dzięki której sprawdzimy, czy klienta stać na same OWOCe (linie 32-43).

Zadanie 2. Struktura z procedurami alokowania i dealokowania

Opracowanie struktury składającej się ze wskaźnika char * do którego alokujemy ciąg znaków (malloc) oraz zmiennej int przechowującej ilość alokowanych znaków tego ciągu. Dodajemy także funkcje alokujące ten ciąg i zwalniające go (free) np.:

struct tablica { char * wsk; int len; };

char *zdanie="Ala ma mola";

struct tablica a;

a.len=strlen(zdanie); // rozmiar może być długością kopiowanego ciągu tekstowego

a.wsk=malloc(a.len*sizeof(char)); // to w funkcji alokującej skopiować zdanie do a.wsk

if (a.wsk) {free(a.wsk); a.wsk=NULL;} //dodać do funkcji usuwającej

Zadanie 3. Struktury w strukturze

Modyfikacja zad1 - zamiana wszystkich ciągów znaków alokowanych w strukturze przedmiot na stosie (statycznie) np. char imie[MAX_LEN]; na alokowane dynamicznie z wykorzystaniem struktury i funkcji z poprzedniego zadania.