Beispiel: Programmiertest Angewandte Programmierung (Studiengang Bachelor PT) In dieser Aufgabe geht es um Sterne in einem Sternhaufen. Jeder Stern ist durch seine Koordinaten (der Einfachheit nur in zwei Dimensionen) und seine Masse definiert. Diese Werte werden als Zufallszahlen berechnet. • Grundaufgabe (notwendig zum Bestehen des Tests, 45 Punkte, Note 4): Die x- und y-Koordinaten sowie die Massen (in Sonnenmassen) der Sterne sollen berechnet und in je einem Feld (eines für die x-Koordinaten, eines für die y-Koordinaten, eines für die Massen) abgespeichert werden. Legen Sie die Felder in einer festen Größe (z. B. 100) an und geben Sie die Anzahl n der Sterne am Anfang ein. Die Koordinaten sollen Zufallswerte im Bereich 0 .. 500, die Massen Zufallswerte im Bereich 1 .. 10 erhalten. Koordinaten und Massen aller Sterne sollen als Tabelle ausgegeben werden. Berechnen Sie die Zufallszahlen mit einer Funktion int zufall (int anfang, int ende), die eine Zufallszahl im Bereich anfang bis ende zurückliefert. Im anschließenden Abfrageteil soll die Möglichkeit bestehen, sich Koordinaten und Massen einzelner Sterne anzeigen zu lassen. Dazu ist die Nummer eines Sterns einzugeben, Koordinaten und Masse werden ausgegeben. Außerdem ist der Abstand des Sterns zum Punkt mit den Koordinaten (x=250, y=250) auszugeben. Dies soll mit einer ja/nein-Abfrage wiederholt werden. Hinweis: Der Abstand zwischen den Punkten (xa, ya) und (xb, yb) ist abst = √ (xa-xb)² + (ya-yb)² Beispiel: Anzahl der Sterne: 6 Nr. x y Masse -----------------------------1 305 421 5 2 300 94 7 3 203 403 5 4 31 453 7 5 38 384 8 6 404 219 2 Abfrageteil: Nummer des Sterns: 2 x = 300, y = 94, Masse = 7, Abstand = 70.7107 Noch ein Stern? [j/n] j Nummer des Sterns: 5 x = 38, y = 384, Masse = 8, Abstand = 299.813 Noch ein Stern? [j/n] n Die folgenden Erweiterungen können in beliebiger Reihenfolge bearbeitet werden. Wenn mehrere Erweiterungen bearbeitet werden sollen, kann es sinnvoll sein, diese zu kombinieren. Dadurch kann man sich zum Teil Arbeit sparen. Für die Note 1,0 sind 90 Punkte von insgesamt 120 Punkten notwendig, es müssen also nicht alle Erweiterungen für die Note 1,0 bearbeitet werden (5 Punkte = 1/3 Note). • Erweiterung "Funktion 1" (5 Punkte): Setzen Sie zur Berechnung der Entfernung eine Funktion ein. Diese soll die vier beteiligten Koordinaten als Parameter haben und das Ergebnis mit return zurückgeben. • Erweiterung "Struktur" (10 Punkte): Definieren Sie einen Strukturtyp Stern (mit den Komponenten x, y und m, alles vom Typ double) und speichern Sie die Sternkoordinaten und -massen in einem Feld vom Typ Stern ab. • Erweiterung "Masse" (5 Punkte): Nach dem Abfrageteil soll die Gesamtmasse M des Sternhaufens berechnet und ausgegeben werden. Beispiel: Mit den Werten der Grundaufgabe wird zusätzlich ausgegeben: Gesamtmasse: 34 • Erweiterung "Schwerpunkt" (10 Punkte): Der Schwerpunkt (xS, yS) des Sternhaufens soll berechnet werden. Dieser ist wie folgt definiert: xS = (x1*m1 + x2*m2 + ... + xn*mn) / M yS = (y1*m1 + y2*m2 + ... + yn*mn) / M Hierbei ist M die Gesamtmasse und xi, yi und mi sind die Koordinaten und die Masse des Sterns Nr. i. Beispiel: Mit den Werten der Grundaufgabe wird zusätzlich ausgegeben: Schwerpunkt: (175.559, 337.029) • Erweiterung "Funktion 2" (10 Punkte): Setzen Sie zur Berechnung der Gesamtmasse und des Schwerpunkts eine Funktion ein. Diese soll als Parameter die Arrays (Koord., Massen, bzw. Stern-Struktur) und die Anzahl der Sterne haben. Die Ergebnisse sollen als Parameter zurückgegeben werden (bzw. bei Verwendung von Stern-Strukturen können Gesamtmasse und Schwerpunkt als Stern-Struktur mit return zurückgegeben werden). • Erweiterung "Minimum" (10 Punkte): Ermitteln Sie denjenigen Stern, der den geringsten Abstand zum Schwerpunkt hat und geben Sie diesen aus. Beispiel: Mit den Werten der Grundaufgabe wird zusätzlich ausgegeben: Stern Nr. 3 hat minimalen Abstand zum Schwerpunkt: 71.4502 • Zusätzlich 5 Punkte, falls die Erweiterungen "Funktion 2" und "Struktur" bearbeitet wurden und bei der Funktion Strukturen-Variablen übergeben werden • Erweiterung "Vector / Dynamisches Feld" (8 Punkte): Verwenden Sie zur Speicherung der Sterne Vektoren (Typ vector<int>) oder dynamische Felder für die Koordinaten und die Massen (oder bei Verwendung einer Struktur einen Vektor vom Typ vector<Stern> oder ein dynamisches Feld vom Typ Stern). Legen Sie diese in der benötigten Größe an. • Erweiterung "OOP" (12 Punkte): Setzen Sie statt des Strukturtyps Stern eine Klasse Stern ein. Um weiterhin den direkten Zugriff auf die Elemente der Klasse zu ermöglichen, sollten diese als public deklariert werden. Die Klasse soll eine Elementfunktion zufallsStern() enthalten, mit der die Zufallswerte für Koordinaten und Masse berechnet werden, außerdem eine Elementfunktion ausgabe(), die Koordinaten und Masse ausgibt. Diese kann zur Ausgabe der Tabelle (Grundaufgabe) verwendet werden, allerdings muss die laufende Nummer dann vorher separat ausgegeben werden.