11  Złożone typy danych

W poniższych zadaniach o ile nie zaznaczono inaczej pojęcia nazwa i alias struktury można używać zamiennie.

  1. Zdefiniuj strukturę Car z polami: brand (napis), model (tablica znaków o rozmiarze 20), year (liczba całkowita) i isAvailable (wartość 0 lub 1), która reprezentuje informację o dostępności samochodu na sprzedaż. W main stwórz kilka zmiennych w typie Car.

  2. Utwórz strukturę Student, która zawiera: firstName (łańcuch znaków), lastName (łańcuch znaków), id (liczba całkowita) oraz gpa (liczba zmiennoprzecinkowa), reprezentującą średnią ocen studenta. W main stwórz trzy zmienne w typie Student. Następnie z tych trzech zmiennych stwórz tablicę.

  3. Zaplanuj strukturę Rectangle, mającą pola: width (liczba zmiennoprzecinkowa), height (liczba zmiennoprzecinkowa) i color (łańcuch znaków), która ma służyć do przechowywania informacji o wymiarach i kolorze prostokąta. W main stwórz 4-elementową tablicę zmiennych typu Rectangle.

  4. Stwórz strukturę WeatherInfo zawierającą: temperature (liczba zmiennoprzecinkowa), humidity (liczba zmiennoprzecinkowa) i windSpeed (liczba zmiennoprzecinkowa), która będzie używana do przechowywania danych meteorologicznych. W main stwórz kilka zmiennych w typie WeatherInfo.

  5. Zaprojektuj strukturę Book z polami: title (łańcuch znaków), author (łańcuch znaków), publishedYear (liczba całkowita) i pages (liczba całkowita), która ma opisywać podstawowe informacje o książce. W main stwórz 5-elementową tablicę zmiennych typu Book.

  6. Napisz strukturę Person z polami name (tablica znaków długości 20) oraz age (typu int). Następnie napisz funkcje i wywołają każdą z nich co najmniej jeden raz:

  1. initPerson - funkcja przyjmuje dwa argumentem imię i wiek i zwraca wskaźnik na nowo-utworzoną strukturę ustawiającą składowe z przekazanych argumentów.
  2. showPerson - funkcja, której argumentem jest zmienna w typie Person. Funkcja ma wypisać opis przekazanego argumentu (wpisać wiek i imię na standardowym wyjściu).
  3. birthday - funkcja, której argumentem jest wskaźnik do struktury typu Person. Funkcja ma powiększyć wiek o 1 w przekazanym argumencie.

Stwórz przypadek testowy dla każdej z funkcji.

  1. Napisz strukturę Car z polami brand (tablica znaków długości 20) oraz mileage (typu int). Następnie napisz funkcje i wywołaj każdą z nich co najmniej jeden raz:
  1. initCar - funkcja przyjmuje dwa argumenty: markę i przebieg, i zwraca nowo-utworzoną strukturę ustawiającą składowe z przekazanych argumentów.
  2. showCar - funkcja, której argumentem jest zmienna w typie Car. Funkcja ma wypisać opis przekazanego argumentu (wypisać markę i przebieg na standardowym wyjściu).
  3. mileageService - funkcja, której argumentem jest wskaźnik do struktury typu Car. Funkcja ma dodać 10000 do przebiegu w przekazanym argumencie.

Stwórz przypadek testowy dla każdej z funkcji.

  1. Napisz strukturę Book z polami title (tablica znaków długości 50) oraz page_count (typu int). Następnie napisz funkcje i wywołaj każdą z nich co najmniej jeden raz:
  1. initBook - funkcja przyjmuje dwa argumenty: tytuł i liczbę stron, i zwraca nowo-utworzoną strukturę ustawiającą składowe z przekazanych argumentów.
  2. showBook - funkcja, której argumentem jest zmienna w typie Book. Funkcja ma wypisać opis przekazanego argumentu (wypisać tytuł i liczbę stron na standardowym wyjściu).
  3. addPages - funkcja, której argumentem jest wskaźnik do struktury typu Book. Funkcja ma dodać 10 do liczby stron w przekazanym argumencie.

Stwórz przypadek testowy dla każdej z funkcji.

  1. Napisz strukturę Laptop z polami model (tablica znaków długości 30) oraz price (typu float). Następnie napisz funkcje i wywołaj każdą z nich co najmniej jeden raz:
  1. initLaptop - funkcja przyjmuje dwa argumenty: model i cenę, i zwraca nowo-utworzoną strukturę ustawiającą składowe z przekazanych argumentów.
  2. showLaptop - funkcja, której argumentem jest zmienna w typie Laptop. Funkcja ma wypisać opis przekazanego argumentu (wypisać model i cenę na standardowym wyjściu).
  3. reducePrice - funkcja, której argumentem jest wskaźnik do struktury typu Laptop. Funkcja ma obniżyć cenę o 5% w przekazanym argumencie.

Stwórz przypadek testowy dla każdej z funkcji.

  1. Stwórz strukturę Airplane o dwóch polach model (napis) oraz number_of_engines (dowolny typ całkowity). Następnie stwórz funkcję, której argumentami jest niepusta tablica struktur Airplane oraz rozmiar tablicy. Funkcja ma zwrócić najmniejszą liczbę silników. Stwórz przypadek testowy.

  2. Stwórz strukturę Computer o dwóch polach brand (napis) oraz number_of_cores (dowolny typ całkowity). Następnie stwórz funkcję, której argumentami jest niepusta tablica struktur Computer oraz rozmiar tablicy. Funkcja ma zwrócić największą liczbę rdzeni. Stwórz przypadek testowy.

  3. Stwórz strukturę Book o dwóch polach: title (napis) i page_count (int). Następnie stwórz funkcję, której argumentami jest niepusta tablica struktur Book oraz rozmiar tablicy. Funkcja ma zwrócić książkę (jako strukturę) z największą liczbę stron. W przypadku kilku książek w tablicy z największą liczbą stron, to zwróć ostatnią z możliwych. Stwórz przypadek testowy.

  4. Napisz strukturę Car z polami brand (tablica znaków długości 50) oraz mileage (typu int). Następnie napisz dwie funkcje i wywołaj każdą z nich co najmniej jeden raz:

  1. initCar - funkcja przyjmuje dwa argumenty: markę i przebieg, i zwraca wskaźnik na nowo utworzoną strukturę, ustawiając składowe z przekazanych argumentów. Dodatkowo funkcja powinna sprawdzić, aby marka była napisem długości co najmniej 2 i przebieg był większy niż 0. W przypadku nie spełnienia co najmniej jednego z warunków, funkcja powinna zwracać NULL.
  2. increaseMileage - funkcja, której argumentem jest wskaźnik do struktury typu Car. Funkcja ma dodać 1000 do przebiegu w przekazanym argumencie.

Upewnij się, że drugą funkcję możesz wywołać w main.

  1. Napisz strukturę Bike z polami model (tablica znaków długości 40) oraz distance_travelled (typu int). Następnie napisz dwie funkcje i wywołaj każdą z nich co najmniej jeden raz:
  1. initBike - funkcja przyjmuje dwa argumenty: model roweru i odległość przejechaną, i zwraca wskaźnik na nowo utworzoną strukturę, ustawiając wartości zgodnie z przekazanymi argumentami. Funkcja powinna dodatkowo sprawdzać, czy model jest napisem o długości co najmniej 3 i odległość przejechana jest większa od 0. W przypadku nie spełnienia co najmniej jednego z warunków, funkcja powinna zwracać NULL.
  2. increaseDistance - funkcja, której argumentem jest wskaźnik do struktury Bike. Funkcja powinna dodać 500 do przejechanej odległości.

Upewnij się, że drugą funkcję możesz wywołać w main.

  1. Napisz strukturę Computer z polami manufacturer (tablica znaków długości 30) oraz usage_hours (typu int). Następnie napisz dwie funkcje i wywołaj każdą z nich co najmniej jeden raz:
  1. initComputer - funkcja przyjmuje dwa argumenty: producenta i liczbę godzin używania, i zwraca wskaźnik na nowo utworzoną strukturę, ustawiając wartości zgodnie z przekazanymi argumentami. Funkcja powinna także sprawdzać, czy nazwa producenta ma co najmniej 2 znaki i liczba godzin jest większa od 0. Jeśli oba warunki nie są spełnione łącznie, funkcja powinna zwracać NULL.
  2. increaseUsage - funkcja, której argumentem jest wskaźnik do struktury Computer. Funkcja powinna dodać 100 do liczby godzin użytkowania.

Upewnij się, że drugą funkcję możesz wywołać w main.

  1. Napisz strukturę Apartment z polami address (tablica znaków długości 100) oraz number_of_residents (typu int). Następnie napisz dwie funkcje i wywołaj każdą z nich co najmniej jeden raz:
  1. initApartment - funkcja przyjmuje dwa argumenty: adres i liczbę mieszkańców, i zwraca wskaźnik na nowo utworzoną strukturę, ustawiając wartości zgodnie z przekazanymi argumentami. Funkcja powinna sprawdzać, czy adres ma co najmniej 5 znaków i liczba mieszkańców jest większa niż 0. W przypadku nie spełnienia obu warunków łącznie, funkcja powinna zwracać NULL.
  2. increaseResidents - funkcja, której argumentem jest wskaźnik do struktury Apartment. Funkcja powinna dodać 2 do liczby mieszkańców.

Upewnij się, że drugą funkcję możesz wywołać w main.

  1. Utwórz typ wyliczeniowy Month reprezentujący miesiące. Napisz funkcję days_in_month(), która przyjmuje jako argument wartość typu Month i zwraca liczbę dni w danym miesiącu. Pomiń problem roku przestępnego w tym zadaniu. Stwórz przypadek testowy dla funkcji.

  2. Utwórz typ wyliczeniowy Day reprezentujący dni tygodnia. Napisz funkcję print_days(), która przyjmuje jako argumenty wartość typu Day i liczbę n. Funkcja powinna wydrukować bieżący dzień tygodnia, a następnie rekurencyjnie wywołać siebie z następnym dniem tygodnia, dekrementując n przy każdym wywołaniu, aż n spadnie do 0. Stwórz przypadek testowy dla funkcji.

  3. Stwórz unię Number, która umożliwia jednoczesne przechowywanie liczby całkowitej i wymiernej. Następnie “opakuj” unię w strukturę i stwórz funkcję, które umożliwiają zainicjowanie pól unii ze standardowego wejścia. Stwórz przypadek testowy dla funkcji.

  4. Stwórz strukturę element o dwóch polach: i typu int oraz next będące wskaźnikiem na zdefiniowaną strukturę. Stwórz w main kilka zmiennych strukturalnych.