Lista 8 (13 grudnia 2005): 12 punktów.

Przeczytaj z książki B.W.Kernighana i D.M.Ritchiego Język ANSI C rozdział 6: Struktury.

  1. (5 punktów) W pliku nagłówkowym zdefiniuj strukturę struct Student z trzema polami: imie, nazwisko i indeks. Zadeklaruj także funkcję porownaj() do porównywania studentów (leksykograficzne najpierw według nazwiska, podem według imienia, a gdy obie te wartości są równe to według numeru indeksu). Dalej, w oddzielnym pliku źródłowym zdefiniuj tą funkcję. W następnym pliku żródłowym napisz program, który wczyta pewną liczbę studentów (podaną przez użytkownika w trakcie działania programu) do tablicy ze studentami, posortuje wszystkie wczytane rekordy przy pomocy funkcji porównującej i wypisze je w porządku niemalejącym na standardowym wyjściu.
    Uwaga: Do sortowania godzin zapisanych w tablicy napisz oddzielną funkcję.
  2. (7 punktów) W pliku nagłówkowym zdefiniuj strukturę struct Godzina z czterema polami bitowymi: godz, min, sek i setne_sek, wszystkie zadeklarowane jako unsigned int. Zadeklaruj także dwie funkcje: jedną ustaw() do nadawania nowych wartości w strukturze reprezentującej godzinę (o ile podane w argumentach wartości są prawidłowe) i drugą porownaj() do porównywania godzin zapisanych w takich strukturach (w obu przypadkach do funkcji należy przekazywać wskaźniki do struktur). Dalej, w oddzielnym pliku źródłowym zdefiniuj obie funkcje. W następnym pliku żródłowym napisz program, który wczyta pewną liczbę godzin (podaną przez użytkownika w trakcie działania programu) do tablicy z godzinami, posortuje wszystkie wczytane rekordy od najwcześniejszej do najpóźniejszej przy pomocy funkcji porównującej i wypisze je w porządku niemalejącym na standardowym wyjściu.
    Uwaga: Do sortowania godzin zapisanych w tablicy napisz oddzielną funkcję.

  3. (5 punktów) Napisz program, który wszystkie liczby w systemie dziesiętnym podane jako parametry wywołania programu wypisze na standardowe wyjście w systemie rzymskim. Twój program powinien sprawdzać, czy dany argument wywołania programu jest liczbą dziesiętną z zakresu od 1 do 3999, a jeśli nie to go pomijać (skorzystaj z funkcji atoi()).
    Uwaga: Do zamiany liczby całkowitej na postać rzymską napisz oddzielną funkcję, która będzie zwracać wskaźnik do napisu reprezentującego określoną wartość (wynik umieszczaj w lokalnej statycznej tablicy znakowej).
    Uwaga: Przy zamianie liczby na postać rzymską skorzystaj z globalnej tablicy struktur struct Rzym. Struktura ta powinna posiadać dwa pola: wskaźnik na napis char* reprezentujący liczbę w zapisie rzymskim i odpowiadającą mu wartość całkowitą int. Tablicę tą zainicjuj strukturami odpowiadającymi następującym liczbom: 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4 i 1.
    Uwaga: Wartości cyfr w rzymskim systemie liczbowym:
    cyfra rzymskawartość
    I1
    V5
    X10
    L50
    C100
    D500
    M1000
  4. (7 punktów, kontynuacja poprzedniego zadania) Napisz program, który wszystkie liczby w systemie rzymskim podane jako parametry wywołania programu wypisze na standardowe wyjście w systemie dziesiętnym.
    Uwaga: Do zamiany liczby rzymskiej na wartość całkowitą napisz oddzielną funkcję.
    Uwaga: Przy zamianie liczby rzymskiej na wartość całkowitą skorzystaj z globalnej tablicy struktur struct Rzym zdefiniowanej jak w poprzednim zadaniu. Tablicę tą zainicjuj strukturami o odpowiednio dobranych wartościach.