Die folgende Grafik veranschaulicht den Zusammenhanf zwischen beiden Koordinatenangaben:
Ein Punkt kann entweder mit seinen Koordinaten x und y angegeben werden (kartesische Koordinaten) oder durch den Abstand zum Ursprung (= Radius) und seinen Winkel zwischen Radius und x-Koordinate (polare Koordinaten).
Für die Umrechnung gelten folgende Formeln:
Polar -> Kartesisch
x = Radius * cos(Alpha)
y = Radius * sin(Alpha)
Kartesisch -> Polar
Radius = sqrt(x*x + y*y)
Alpha = atan(y / x)
Will man im Gradmaß arbeiten, so kann man die Winkel einfach umrechnen:
Bogenmaß = Gradmaß * Pi / 180
Gradmaß = Bogenmaß * 180 / Pi
Die matematische Konstante Pi (3.14...) ist in der Headerdatei vordefiniert unter dem Namen M_Pi.
Aufgabe:
Schreiben Sie ein C++-Programm, das dem Benutzer zunächst eine Auswahlmaske folgender Form anbietet:
Berechnungen sollen wiederholt durchführbar sein solange, bis der Anwender 0 eingibt. Wenn eine ungültige Zahl (z.B. 4) ausgewählt wird, soll der Benutzer darauf hingewiesen werden.
Sobald 1 oder 2 eingegeben wird, muss das Programm zunächst die erforderlichen Daten vom Benutzer im Hauptprogramm erfragen (bei 1: Radius und Winkel, bei 2: x und y) und dann in die entsprechende Funktion verzweigen (PolarKartesisch() bei 1 und KArtesischPolar() bei 2).
Schließlich werden nach erfolgtem Funktionsaufruf die gesuchten Daten im Hauptprogramm ausgegeben.

Teilen Sie den Programmcode auf verschiedene Funktionen auf, sodass unterschiedliche Programme die Umrechnungsroutinen benutzen könnten!
Überlegen Sie sich dazu, welche Schnittstellen die Funktionen benötigen (welche Daten werden vom Hauptprogramm an das Unterprogramm geliefert, und welche Daten benötigt das Hauptprogramm). Benutzen Sie geeignete Datentypen und Funktionen ohne call by reference!
Quellcode:
Nicht so gut Lösung: https://github.com/binary-sequence/awp-uebungen/blob/master/2014-10-21/koordinaten_nicht_so_gut.cpp
Gute Lösung: https://github.com/binary-sequence/awp-uebungen/blob/master/2014-10-21/koordinaten_gut.cpp
Bessere Lösung: https://github.com/binary-sequence/awp-uebungen/blob/master/2014-10-21/koordinaten_besser.cpp
No hay comentarios:
Publicar un comentario