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.
Zdefiniuj strukturę
Car
z polami:brand
(napis),model
(tablica znaków o rozmiarze 20),year
(liczba całkowita) iisAvailable
(wartość 0 lub 1), która reprezentuje informację o dostępności samochodu na sprzedaż. Wmain
stwórz kilka zmiennych w typieCar
.Utwórz strukturę
Student
, która zawiera:firstName
(łańcuch znaków),lastName
(łańcuch znaków),id
(liczba całkowita) orazgpa
(liczba zmiennoprzecinkowa), reprezentującą średnią ocen studenta. Wmain
stwórz trzy zmienne w typieStudent
. Następnie z tych trzech zmiennych stwórz tablicę.Zaplanuj strukturę
Rectangle
, mającą pola:width
(liczba zmiennoprzecinkowa),height
(liczba zmiennoprzecinkowa) icolor
(łańcuch znaków), która ma służyć do przechowywania informacji o wymiarach i kolorze prostokąta. Wmain
stwórz 4-elementową tablicę zmiennych typuRectangle
.Stwórz strukturę
WeatherInfo
zawierającą:temperature
(liczba zmiennoprzecinkowa),humidity
(liczba zmiennoprzecinkowa) iwindSpeed
(liczba zmiennoprzecinkowa), która będzie używana do przechowywania danych meteorologicznych. Wmain
stwórz kilka zmiennych w typieWeatherInfo
.Zaprojektuj strukturę
Book
z polami:title
(łańcuch znaków),author
(łańcuch znaków),publishedYear
(liczba całkowita) ipages
(liczba całkowita), która ma opisywać podstawowe informacje o książce. Wmain
stwórz 5-elementową tablicę zmiennych typuBook
.Napisz strukturę
Person
z polaminame
(tablica znaków długości 20) orazage
(typuint
). Następnie napisz funkcje i wywołają każdą z nich co najmniej jeden raz:
initPerson
- funkcja przyjmuje dwa argumentem imię i wiek i zwraca wskaźnik na nowo-utworzoną strukturę ustawiającą składowe z przekazanych argumentów.showPerson
- funkcja, której argumentem jest zmienna w typiePerson
. Funkcja ma wypisać opis przekazanego argumentu (wpisać wiek i imię na standardowym wyjściu).birthday
- funkcja, której argumentem jest wskaźnik do struktury typuPerson
. Funkcja ma powiększyć wiek o 1 w przekazanym argumencie.
Stwórz przypadek testowy dla każdej z funkcji.
- Napisz strukturę
Car
z polamibrand
(tablica znaków długości 20) orazmileage
(typuint
). Następnie napisz funkcje i wywołaj każdą z nich co najmniej jeden raz:
initCar
- funkcja przyjmuje dwa argumenty: markę i przebieg, i zwraca nowo-utworzoną strukturę ustawiającą składowe z przekazanych argumentów.showCar
- funkcja, której argumentem jest zmienna w typieCar
. Funkcja ma wypisać opis przekazanego argumentu (wypisać markę i przebieg na standardowym wyjściu).mileageService
- funkcja, której argumentem jest wskaźnik do struktury typuCar
. Funkcja ma dodać 10000 do przebiegu w przekazanym argumencie.
Stwórz przypadek testowy dla każdej z funkcji.
- Napisz strukturę
Book
z polamititle
(tablica znaków długości 50) orazpage_count
(typuint
). Następnie napisz funkcje i wywołaj każdą z nich co najmniej jeden raz:
initBook
- funkcja przyjmuje dwa argumenty: tytuł i liczbę stron, i zwraca nowo-utworzoną strukturę ustawiającą składowe z przekazanych argumentów.showBook
- funkcja, której argumentem jest zmienna w typieBook
. Funkcja ma wypisać opis przekazanego argumentu (wypisać tytuł i liczbę stron na standardowym wyjściu).addPages
- funkcja, której argumentem jest wskaźnik do struktury typuBook
. Funkcja ma dodać 10 do liczby stron w przekazanym argumencie.
Stwórz przypadek testowy dla każdej z funkcji.
- Napisz strukturę
Laptop
z polamimodel
(tablica znaków długości 30) orazprice
(typufloat
). Następnie napisz funkcje i wywołaj każdą z nich co najmniej jeden raz:
initLaptop
- funkcja przyjmuje dwa argumenty: model i cenę, i zwraca nowo-utworzoną strukturę ustawiającą składowe z przekazanych argumentów.showLaptop
- funkcja, której argumentem jest zmienna w typieLaptop
. Funkcja ma wypisać opis przekazanego argumentu (wypisać model i cenę na standardowym wyjściu).reducePrice
- funkcja, której argumentem jest wskaźnik do struktury typuLaptop
. Funkcja ma obniżyć cenę o 5% w przekazanym argumencie.
Stwórz przypadek testowy dla każdej z funkcji.
Stwórz strukturę
Airplane
o dwóch polachmodel
(napis) oraznumber_of_engines
(dowolny typ całkowity). Następnie stwórz funkcję, której argumentami jest niepusta tablica strukturAirplane
oraz rozmiar tablicy. Funkcja ma zwrócić najmniejszą liczbę silników. Stwórz przypadek testowy.Stwórz strukturę
Computer
o dwóch polachbrand
(napis) oraznumber_of_cores
(dowolny typ całkowity). Następnie stwórz funkcję, której argumentami jest niepusta tablica strukturComputer
oraz rozmiar tablicy. Funkcja ma zwrócić największą liczbę rdzeni. Stwórz przypadek testowy.Stwórz strukturę
Book
o dwóch polach:title
(napis) ipage_count
(int
). Następnie stwórz funkcję, której argumentami jest niepusta tablica strukturBook
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.Napisz strukturę
Car
z polamibrand
(tablica znaków długości 50) orazmileage
(typuint
). Następnie napisz dwie funkcje i wywołaj każdą z nich co najmniej jeden raz:
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.increaseMileage
- funkcja, której argumentem jest wskaźnik do struktury typuCar
. Funkcja ma dodać 1000 do przebiegu w przekazanym argumencie.
Upewnij się, że drugą funkcję możesz wywołać w main
.
- Napisz strukturę
Bike
z polamimodel
(tablica znaków długości 40) orazdistance_travelled
(typuint
). Następnie napisz dwie funkcje i wywołaj każdą z nich co najmniej jeden raz:
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.increaseDistance
- funkcja, której argumentem jest wskaźnik do strukturyBike
. Funkcja powinna dodać 500 do przejechanej odległości.
Upewnij się, że drugą funkcję możesz wywołać w main
.
- Napisz strukturę
Computer
z polamimanufacturer
(tablica znaków długości 30) orazusage_hours
(typuint
). Następnie napisz dwie funkcje i wywołaj każdą z nich co najmniej jeden raz:
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.increaseUsage
- funkcja, której argumentem jest wskaźnik do strukturyComputer
. Funkcja powinna dodać 100 do liczby godzin użytkowania.
Upewnij się, że drugą funkcję możesz wywołać w main
.
- Napisz strukturę
Apartment
z polamiaddress
(tablica znaków długości 100) oraznumber_of_residents
(typuint
). Następnie napisz dwie funkcje i wywołaj każdą z nich co najmniej jeden raz:
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.increaseResidents
- funkcja, której argumentem jest wskaźnik do strukturyApartment
. Funkcja powinna dodać 2 do liczby mieszkańców.
Upewnij się, że drugą funkcję możesz wywołać w main
.
Utwórz typ wyliczeniowy
Month
reprezentujący miesiące. Napisz funkcjędays_in_month()
, która przyjmuje jako argument wartość typuMonth
i zwraca liczbę dni w danym miesiącu. Pomiń problem roku przestępnego w tym zadaniu. Stwórz przypadek testowy dla funkcji.Utwórz typ wyliczeniowy
Day
reprezentujący dni tygodnia. Napisz funkcjęprint_days()
, która przyjmuje jako argumenty wartość typuDay
i liczbęn
. Funkcja powinna wydrukować bieżący dzień tygodnia, a następnie rekurencyjnie wywołać siebie z następnym dniem tygodnia, dekrementującn
przy każdym wywołaniu, ażn
spadnie do 0. Stwórz przypadek testowy dla funkcji.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.Stwórz strukturę
element
o dwóch polach:i
typuint
oraznext
będące wskaźnikiem na zdefiniowaną strukturę. Stwórz wmain
kilka zmiennych strukturalnych.