1. Praktische Übung Grundlagen Informatik (Übungsblatt C++ zur Wiederholung für alle, denen langweilig wird) Abschnitt 1: Wiederholung von Klassen und Objekten in C++ Entwickle ein Verwaltungssystem zur Patientenverwaltung für ein Krankenhaus. Es soll folgende Möglichkeiten bieten: – Die persönlichen Daten des Patienten sollen sich speichern lassen. (zur Vereinfachung: es sollen sich maximal 100 Patienten speichern lassen) – Des weiteren sollen sich Zimmer- und Bettnummer des Patienten speichern lassen – Die Medikamention soll für jeden Patienten speicherbar sein (Medikament und Dosis). Der Einfachheit halber sollen maximal 10 Medikamente gespeichert werden können. – Es soll möglich sein, neue Patienten einzugeben und alle Daten auszugeben. Zusatzaufgabe: – Es soll möglich sein, jeden Patienten einzeln ausgeben zu lassen, seine Daten zu ändern und den Datensatz zu löschen (eins nach dem Anderen ;-) Ansatz: Jeder Patient muss eindeutig identifizierbar sein! – Für ganz schnelle: Wie lässt sich, wenn ein Array verwendet wird, um die Daten der Patienten zu speichern, sicher stellen, dass die alten Einträge wieder verwendet werden? Gibt es eine bessere Lösung als ein Array? Abschnitt 2: Rekursion Rekursion, was war das gleich? Rekursion bedeutet, dass sich eine Funktion selbst aufruft. So lassen sich komplexe Probleme teilweise wesentlich einfacher lösen. Wichtig ist hier nur, dass das Problem eine gleichbleibende Struktur hat. Wichtig ist immer, dass es eine Abbruchbedingung gibt, die auf jeden Fall früher oder später erreicht wird, sonst arbeitet der Computer bis zum Kältetod des Universums. Der Nachteil rekursiver Lösungen ist, dass sie teilweise nicht sofort einsichtig sind, aber meist ist die sog. „iterative“ Lösung, also die, in der das Ergebnis in einer Funktion berechnet wird, auch nicht wesentlich einsichtiger. Aufgabe 1: Fibonacci-Zahlen Wir beobachten eine Kaninchenpopulation, die sich in einer abgeschlossenen Umgebung befindet, d.h. es können keine Kaninchen von aussen hinzukommen und es können auch keine aus der Population verschwinden. Am Anfang besteht diese Population aus einem geschlechtsreifen Paar (o.E.d.A unterschiedlichen Geschlechts :-). Jedes geschlechtsreife Paar wirft pro Monat ein weiteres Paar, das nach zwei Monaten selbst geschlechtsreif wird. Wie viele Kaninchenpaare zählt die Population nach einem Jahr? Musterlösungen: www-user.tu-chemnitz.de/~jhil/uegi/ Viel Spaß! :-) Fortsetzung Aufgabe 2: Die Ackermann-Funktion Die Ackermann-Funktion ist eine rekursive Funktion, die extrem schnell wächst. Sie hat keinen weiteren praktischen Sinn, ausser dass man mit ihrer Hilfe die Rechenleistung verschiedener Computer vergleichen kann. Die Funktion ist folgendermaßen definiert: A(0,m) A(n,0) A(n,m) =m+1 = A(n – 1,1) = A(n – 1,A(n,m – 1)) Dies ist zwar nicht die Originaldefinition, aber sie lässt sich schön leicht umsetzen. Allerdings ist schon aus der Definition ersichtlich, dass man hier keine allzu großen Werte einsetzen sollte, da die Berechnung dann extrem lange dauert. Hier noch eine Tabelle (Quelle: Wikipedia) mit den Werten, die die Ackermannfunktion für bestimmte n,m liefert: Die folgende Tabelle zeigt einige Funktionswerte für kleine Werte von n und m. Die nicht vollständig ausgerechneten Werte sind zu groß, um sie dezimal darzustellen. Werte von a(n,m) n\ m 0 1 2 3 4 m 0 1 2 3 4 5 m+1 1 2 3 4 5 6 m+2 2 3 5 7 9 11 2m + 3 3 5 13 29 61 125 4 13 65533 ¹ a(3,265536 a(3,a( 4,3)) 3 Terme) − 3) 5 65533 a(4,6553 a(4,a(5,1)) 3) a(4,a(5,2) a(4,a( ) 5,3)) a(5,a(5,1 a(5,a(6,1)) )) ¹eine Zahl mit 19729 Dezimalstellen a(5,a(6,2) a(5,a( ) 6,3)) 6 a(5,1) (m + Für ganz fleissige hier noch ein paar weitere rekursive Probleme: – das n-Damenproblem: n Damen sollen so auf einem Schachbrett platziert werden, dass sie sich gegenseitig nich schlagen können. – Türme von Hanoi: Kennt sicher jeder... einige Scheiben, drei Stäbe, und die Scheiben sollen vom ersten auf den letzten Stab, wobei eine Scheibe nie auf einer kleineren liegen darf. Musterlösungen: www-user.tu-chemnitz.de/~jhil/uegi/ Viel Spaß! :-)