Prof. Dr. Franz Schweiggert Institut für Angewandte Informationsverarbeitung 20. Dezember 2006
Norbert Heidenbluth und Ralph GuderleiBlatt 10


Uni Logo



Allgemeine Informatik I (WS 2006/2007)


Abgabetermin: 10. Januar 2007

Ferien!(15 Punkte)

Sie haben vor, in den wenigen Ferientagen sich in den Flieger zu setzen und irgendwo hin zu fliegen. Um abzuschätzen, wie lange Sie unterwegs sein werden wollen Sie wissen, wie weit sie fliegen müssen.

Aus der Schule wissen Sie noch, daß jeder Punkt dieser Erde mit Koordinaten versehen ist. Die Koordinaten werden in Längen- und Breitengraden angegeben, Ulm hat beispielsweise die Koordinaten $48^\circ 24' 0''\mbox{n\uml {o}rdlicher Breite}, 9^\circ 59' 0'' \mbox{\uml {o}stlicher
L\uml {a}nge}$. Die Koordinaten bestehen also aus zwei Winkeln für Breite ($\phi$) und Länge ($\lambda$), die immer aus der Angabe in Grad, Bogenminuten und Bogensekunden und der Information über die geographische Länge bzw. Breite.

Diese Darstellung kann über die Formel

\begin{displaymath}
w_{\mbox{grad}} = Grad + Bogenminute/60 + Bogensekunde/3600
\end{displaymath}

in eine Dezimaldarstellung gebracht werden. Für Orte südlicher Breite oder östlicher Länge soll der Winkel für die Breite bzw. Länge negativ sein.

Für die spätere Berechnung der Entfernung werden die Winkel allerdings nicht in Grad, sondern in Radians benötigt, es gilt $w_{\mbox{rad}} = \frac{\pi}{180}w_{\mbox{grad}}$.

Die Entfernung zwischen zwei Orten $A$ und $B$ mit Koordinaten $(\phi_A, \lambda_A)$ und $(\phi_B, \lambda_B)$

\begin{displaymath}
d(A,B) = \arccos\left(\sin(\phi_A)\sin(phi_B) + \cos(\phi_A)\cos(\phi_B)\cos(\lambda_B - \lambda_A)\right)
\end{displaymath}

Multipliziert mit dem Erdradius ($r=6371$km) ergibt sich dann die Entfernung der Orte in km.

Schreiben Sie ein Programm, welches die Entfernung in Kilometern zwischen zwei durch geographische Koordinaten festgelegte Orte berechnet.

Für jeden Ort sollen zwei Zeilen eingelesen werden, die die Breite und Länge des Ortes beschreiben. Eine Zeile besteht aus drei Zahlen für Grad, Bogenminute und Bogensekunde und einem Buchstaben, ''N'' und ''S'' für die Angabe von nördlicher bzw. südlicher Breite oder ''O'' und ''W'' für die Angabe von östlicher bzw. westlicher Länge. Die Koordinaten von Ulm sehen wie folgt in dieser Darstellung aus:

48,24,0,N
9,59,0,O

Erzeugen Sie aus den Eingaben die Koordinaten (-Winkel) in Radians und berechnen Sie mit der angegebenen Formel die Entfernung in Kilometern und geben Sie diese anschließend aus.

Eingabe-Beispiel

48,24,0,N
9,59,0,O
59,9,30,N
18,4,0,O

Ausgabe-Beispiel

Entfernung: 1307 km

Hinweise

Gehen Sie schrittweise nach dem EVA-Prinzip (Eingabe, Verarbeitung, Ausgabe) vor.

Zur Bearbeitung der Aufgabe bietet es sich an, Variablen vom Typ String zu verwenden, dieser wird in den Übungen vorgestellt. Von besonderem Interesse sind die Methoden indexOf(), substring(), equals().

Alle benötigten mathematischen Funktionen befinden sich in der Klasse Math. Auch diese wird in den Übungen vorgestellt.

Wenn ein String nur aus Zahlen besteht, kann dieser mit der Methode Integer.valueOf() in einen int-Wert konvertiert werden.

Links

Viel Erfolg!



Norbert Heidenbluth 2006-12-20