Dipl.Phys. Gerald Kempfer Beuth Hochschule für Technik Berlin - University of Applied Sciences - Fachbereich VI – Informatik und Medien Studiengang Technische Informatik Bachelor

Lehrveranstaltung "Informatik II für TI-Bachelor" Übungsblatt 5

Hinweise: Dieses Übungsblatt ist zur Zulassung zu der Klausur erfolgreich zu bearbeiten ("Erfolg- reich" bedeutet: Keine Programmabstürze bzw. Endlosschleifen, Aufgabenstellung ein- schließlich der Nebenbedingungen müssen eingehalten sowie Kommentierung und Ein- rückung korrekt sein!). Für die Abgabe der Lösung laden Sie bitte Ihre erstellen Quelltextdateien in Moodle hoch (nur Dateiendungen *.c, *.h, *.zip und *.rar erlaubt). Der Abgabetermin für diese Aufgabe ist der 18. Juni 2021; letzte Abgabemöglichkeit ist der 02. Juli 2021.

Aufgabe: In der fünften Übungsaufgabe des Projektes “Mannschafts-Verwaltung“ soll die Sortierung der Spieler innerhalb der Mannschaften realisiert wer- den. Es soll dabei wahlweise nach Namen, Geburtsdatum, Trikotnr. und Anzahl der geschossenen Tore sortiert werden können. Durch Aufruf des Menüpunktes „Sortieren“ im Hauptmenü soll der Benutzer in einem Un- termenü die Sortierung auswählen können. Für das Untermenü soll wie- der die Funktion getMenu aus dem Modul menu.c verwendet werden; es braucht also nur ein anderer Titel, ein anderes Array von Menüpunk- ten und die richtige Anzahl der Menüpunkte angegeben werden und der Rest der Untermenü-Auswahl sollte die Funktion bereits übernehmen. Nach dem Sortieren soll automatisch wieder in das Hauptmenü zurück- gekehrt werden. Für die Sortierung soll eine eigene Quicksort-Funktion (z.B. siehe Skript bzw. Video) erstellt werden; d.h. es soll nicht die qsort-Funktion aus der stdlib.h bzw. aus der search.h verwendet werden. Damit nach ver- schiedenen Feldern sortiert werden kann, soll die Quicksort-Funktion zu- sätzlich einen Zeiger auf eine Vergleichsfunktion als Parameter erhalten. Diese Vergleichsfunktion erhält zwei Zeiger auf Spieler und vergleicht diese entsprechend der gewünschten Sortierung. Zurückgegeben wird ein Wert kleiner 0, wenn das Sortierfeld des ersten Spielers kleiner ist als das Sortierfeld des zweiten Spielers, einen Wert größer 0, wenn das Sor- tierfeld des ersten Spielers größer ist als das Sortierfeld des zweiten Spielers, und den Wert 0, wenn die Sortierfelder von beiden Spielern gleich sind. Durch Verwendung verschiedener Vergleichsfunktionen beim Aufruf der Quicksort-Funktion kann dann nach den gewünschten Feldern sortiert werden. Wer möchte, kann auch noch zusätzlich zwischen auf- wärts und abwärts unterscheiden. Die Quicksort-Funktion soll in einem neuen Modul namens sort.c (mit dazugehöriger Headerdatei sort.h) erstellt werden; entsprechend muss das Projekt angepasst werden. Die Vergleichsfunktionen sollten in der

Seite 1 von 3 G. Kempfer, BHT Berlin, TI-B IN2, Übungsblatt 5 teams.c als lokale Funktionen abgelegt werden, da sie nur dort beim Aufruf der Sortierfunktion benötigt werden. Bei der Sortierung nach der Anzahl der geschossenen Tore soll bei glei- cher Anzahl zusätzlich nach dem Namen sortiert werden (siehe auch Beispielausgabe). Damit diese Sortierung auch sichtbar ist, muss die Ausgabe eines Spielers um die Anzahl der geschossenen Tore erweitert werden. Dabei ist zu berücksichtigen, dass bei einem Tor auch „1 Tor“ und nicht „1 Tore“ steht! Die Datendatei teams.xml ist für diese Aufgabe um eine Mannschaft und diverse Spieler erweitert worden; ferner ist bei den Spielern die An- zahl der geschossenen Tore entsprechend des Abschlusses der Bundes- liga eingetragen (Quelle: fussballdaten.de). Wenn Sie übrigens den Spieler Max Mustermann auf dem Bildschirm se- hen, dann ist etwas schief gelaufen. Generell soll immer mit Zeigern anstelle von Arrays gearbeitet werden! Oder anders ausgedrückt: Das Verwenden von eckigen Klammern ist tabu (außer bei der Definition von Arrays). Kommentieren Sie das Programm. Dazu gehört auch ein Modulheader und zu jeder Funktion ein Funktionsheader (siehe Skript “Grundlagen der Informatik“ Kapitel 5.3 und 5.4)! Achten Sie auch auf Ihre Programm- struktur (Einrückungen, Leerzeichen und -zeilen).

Beispielausgaben:

Untermenü für die Sortierung: Sortieren ======

1. Spieler nach Namen sortieren 2. Spieler nach Geburtsdatum (Alter) sortieren 3. Spieler nach Trikotnr. Sortieren 4. Spieler nach Anzahl geschossener Tore sortieren 5. zurueck zum Hauptmenue

Ihre Wahl:

Ausgabe während der Sortierung: Sortieren nach Anzahl geschossener Tore ...

Spieler der Mannschaft 1. FC Union Berlin sortieren ... ok Spieler der Mannschaft Hertha BSC sortieren ... ok Spieler der Mannschaft FC Bayern Muenchen sortieren ... ok

Bitte Eingabetaste druecken ...

Seite 2 von 3 G. Kempfer, BHT Berlin, TI-B IN2, Übungsblatt 5

Auflisten vor der Sortierung (Auszug): Name : 1. FC Union Berlin Trainer : Anzahl Spieler : 23 Spieler: 01. (1; * 10.03.1987; 0 Tore) 02. (20; * 22.06.1993; 0 Tore) 03. (5; * 13.12.1995; 5 Tore) 04. (31; * 22.05.1992; 1 Tor) 05. (28; * 24.02.1987; 1 Tor) 06. (25; * 22.09.1994; 0 Tore) 07. (4; * 01.12.1999; 2 Tore) 08. Niko Giesselmann (23; * 26.09.1991; 0 Tore) 09. (30; * 22.09.1994; 5 Tore) 10. (33; * 03.10.1990; 0 Tore) 11. Grischa Proemel (21; * 09.01.1995; 4 Tore) 12. (6; * 17.11.1997; 0 Tore) 13. Christian Genther (34; * 14.08.1985; 0 Tore) 14. (7; * 18.01.1992; 0 Tore) 15. (32; * 04.01.1996; 3 Tore) 16. (36; * 14.01.1997; 3 Tore) 17. (14; * 12.08.1997; 5 Tore) 18. (10; * 19.03.1988; 11 Tore) 19. (27; * 09.02.1995; 3 Tore) 20. (9; * 13.09.1994; 6 Tore) 21. (18; * 22.11.1997; 1 Tor) 22. (24; * 04.03.1998; 1 Tor) 23. (8; * 12.04.2001; 0 Tore)

Auflisten nach der Sortierung nach Tor-Anzahl (Auszug): Name : 1. FC Union Berlin Trainer : Urs Fischer Anzahl Spieler : 23 Spieler: 01. Akaki Gogia (7; * 18.01.1992; 0 Tore) 02. Andreas Luthe (1; * 10.03.1987; 0 Tore) 03. Christian Genther (34; * 14.08.1985; 0 Tore) 04. Christopher Lenz (25; * 22.09.1994; 0 Tore) 05. Julian Ryerson (6; * 17.11.1997; 0 Tore) 06. Leon Dajaku (8; * 12.04.2001; 0 Tore) 07. Loris Karius (20; * 22.06.1993; 0 Tore) 08. Niko Giesselmann (23; * 26.09.1991; 0 Tore) 09. Sebastian Griesbeck (33; * 03.10.1990; 0 Tore) 10. Christopher Trimmel (28; * 24.02.1987; 1 Tor) 11. Keita Endo (18; * 22.11.1997; 1 Tor) 12. Petar Musa (24; * 04.03.1998; 1 Tor) 13. Robin Knoche (31; * 22.05.1992; 1 Tor) 14. Nico Schlotterbeck (4; * 01.12.1999; 2 Tore) 15. Cedric Teuchert (36; * 14.01.1997; 3 Tore) 16. Marcus Ingvartsen (32; * 04.01.1996; 3 Tore) 17. Sheraldo Becker (27; * 09.02.1995; 3 Tore) 18. Grischa Proemel (21; * 09.01.1995; 4 Tore) 19. Marvin Friedrich (5; * 13.12.1995; 5 Tore) 20. Robert Andrich (30; * 22.09.1994; 5 Tore) 21. Taiwo Awoniyi (14; * 12.08.1997; 5 Tore) 22. Joel Pohjanpalo (9; * 13.09.1994; 6 Tore) 23. Max Kruse (10; * 19.03.1988; 11 Tore)

Seite 3 von 3