jueves, 23 de octubre de 2014

AWP: Unterricht von 2014-10-20 Strukturen, Koordinaten-Umrechnung

Ein geometrischer Punkt in der Ebene lässt sich durch unterschiedliche Koordinatenangaben festlegen bzw. bestimmen. Mithilfe eines C++-Programms soll eine Umrechnung zwischen kartesischen und polaren Koordinaten ermöglicht werden.

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