Ćwiczenia 7: Moduły

[D.L.Parnas, On the Criteria To Be Used in Decomposing Systems into Modules, CACM 12 (15), 1972]
Rozważmy następujący problem. Należy napisać program, który:

  • wczyta plik tekstowy,
  • dany plik składa się z wierszy, a każdy wiersz ze słów oddzielonych białymi znakami,
  • rozważamy rotacje cykliczne wierszy, powstałe przez przestawienie pewnej liczby słów z początku wiersza na koniec,
  • program ma wypisać wszystkie możliwe rotacje cykliczne wierszy z wejścia, bez powtórzeń,
    w porządku leksykograficznym, oddzielając słowa w wierszach pojedynczymi odstępami.

Podaj jak byś podzielił program na moduły.
Wymyśl zestaw realistycznych modyfikacji, jakie należy wprowadzić (a jeszcze lepiej poproś o to kolegę) i sprawdź, jak sprawuje się wymyślony przez Ciebie podział na moduły.

Zdefiniuj sygnatury/struktury odpowiadające podanym poniżej pojęciom.
Staraj się wykorzystać zdefiniowane wcześniej pojęcia.

  1. Sygnatura półgrupy (typ elementów i operacja łączna).
  2. Sygnatura monoidu (półgrupa z elementem neutralnym).
    Struktura monoidu:

    • liczby całkowite z dodawaniem,
    • funkcje (na liczbach całkowitych) z operacją składania,
    • listy (liczb całkowitych) z operacją sklejania,
    • macierzy \(2 \times 2\) z operacją mnożenia.
  3. Sygnatura grupy (monoid z elementami odwrotnymi).
  4. Sygnatura pierścienia (dodawanie, mnożenie, jedynka, zero, elementy przeciwne).
  5. Struktura pierścienia liczb całkowitych.
  6. Sygnatura ciała (pierścień z elementami odwrotnymi).
  7. Struktura ciała liczb rzeczywistych.
  8. Sygnatura porządku liniowego z operacjami sup i inf.
  9. Struktura implementująca porządek liniowy par liczb całkowitych z operacjami sup i inf.
    Przyjmujemy, że \((x_1, y_1) \le (x_2, y_2)\) gdy \(x_1 \le x_2\) oraz \(y_1 \le y_2\).