Programmieraufgaben – Unterprogramme – Funktionen 1. Dreiecksberechnungen Entwickeln Sie ein Programm zur Dreiecksberechnung. Bei Eingabe der Längen der Seiten a, b und der Größe des Winkels γ sollen die Länge der Seite c, die Größen der Winkel α und β, der Flächeninhalt und der Umfang des Dreiecks berechnet werden. − Entwickeln und implementieren Sie eine Dialogkomponente. − Entwickeln Sie zu den verschiedenen Problemen entsprechende Funktionen. Fertigen Sie dazu eine Spezifikation an, testen Sie mit geeigneten Daten und implementieren Sie Ihre Funktion. Funktionen sind: seite_c, winkel_alpha, winkel_beta, flaecheninhalt, umfang Bsp. für Spezifikation Funktion seite_c Eingabedaten: pa, pb, pGamma Vorbedingungen: pa, pb, pGamma∈|R pa, pb sind Seiten des Dreiecks pGamma ist der von pa, pb eingeschlossene Winkel und wird im Gradmass abgegeben Ausgabedaten: Funktionswert seite_c Nachbedingungen: seite_c∈|R seite_c ist die Seite des Dreiecks mit den Seitenlängen pa, pb, seite_c Funktion winkel_alpha Eingabedaten: Vorbedingungen: Ausgabedaten: Nachbedingungen: Funktion winkel_beta Eingabedaten: Vorbedingungen: Ausgabedaten: Nachbedingungen: Funktion flaecheninhalt Eingabedaten: Vorbedingungen: Ausgabedaten: Nachbedingungen: Funktion umfang Eingabedaten: Vorbedingungen: Ausgabedaten: Nachbedingungen: pa, pb, pGamma pa, pb, pGamma ∈|R pa, pb sind Seiten des Dreiecks pGamma ist von pa und pb eingeschlossener Winkel in Grad angegeben Funktionswert winkel_alpha winkel_alpha ∈|R winkel_alpha ist Innenwinkel des Dreiecks in Grad, Schenkel sind Seite pb und Seite c die pGamma gegenüber liegende Seite pa, pb, pGamma pa, pb, pGamma ∈|R pa, pb sind Seiten des Dreiecks pGamma ist von pa und pb eingeschlossener Winkel in Grad angegeben Funktionswert winkel_beta winkel_beta ∈|R winkel_beta ist Innenwinkel des Dreiecks in Grad, Schenkel sind Seite pa und Seite c die pGamma gegenüber liegende Seite pa, pb, pGamma pa, pb, pGamma ∈|R pa, pb sind Seiten des Dreiecks pGamma ist von pa und pb eingeschlossener Winkel in Grad angegeben Funktionswert flaecheninhalt flaecheninhalt∈|R ist Flächeninhalt des Dreiecks mit Seiten pa, pb und Innemwinkel pGamma pa, pb, pGamma pa, pb, pGamma ∈|R pa, pb sind Seiten des Dreiecks pGamma ist von pa und pb eingeschlossener Winkel in Grad angegeben Funktionswert umfang umfang∈|R ist Umfang des Dreiecks mit Seiten pa, pb und Innemwinkel pGamma 2. Heron von Alexandria erdachte ein Näherungsverfahren zur Berechnung der n-ten Wurzel einer reellen Zahl. Es handelt sich um ein so genanntes Iterationsverfahren – also eine Verfahrensweise, bei der man sich schrittweise durch wiederholte Anwendung einer geeigneten Anweisungsfolge der Problemlösung nähert. a xn + xn Die Heronformel für die Quadratwurzel a lautet x n +1 = . Als Startwert für 2 a die Iteration verwendet man einen von Null verschiedenen Wert x0 (z.B. x0 = ). 2 − Wenden Sie das Heronverfahren zur Berechnung von 2 an. Fertigen Sie eine Tabelle an − Spezifizieren und entwickeln Sie eine Funktion heron2(), die mit dem genannten Verfahren die Quadratwurzel einer reellen Zahl mit einer anzugebenden Genauigkeit (Anzahl der Nachkommastellen) berechnet. Beschreiben Sie die Funktion mit Struktogrammsymbolen. − Entwickeln und implementieren Sie ein Processing- Programm, mit dem Sie Ihre Funktion heron2() testen. Das Programm soll die entsprechende Wurzel auch mit der dafür verfügbaren Java-Funktion berechnen. − Funktion heron2ite Eingabedaten: pa, pn Vorbedingungen: pa∈|R ist Radikant der Wurzel pn∈|N gibt die Anzahl der erwarteten Nachkommastellen an (Genauigkeit des Wurzelwertes) Ausgabedaten: Funktionswert heron2ite Nachbedingungen: heron2ite∈ |R ist die Quadratwurzel von pa auf pn Nachkommastellen genau berechnet Funktion heron2ite Übernahme: pa, pn x0 ← pa/2 x1 ← (x0+pa/x0)/2 fertig ← |x0*10^pn - x1*10^pn| < 1 x0 ← x1 Solange nicht fertig heron2ite ← x0 Funktion heron2rek Eingabedaten: pa, pn, px0 Vorbedingungen: pa∈|R ist Radikant der Wurzel pn∈|N gibt die Anzahl der erwarteten Nachkommastellen an (Genauigkeit des Wurzelwertes) px0∈|R ist ein Näherungswert der Quadratwurzel von pa Ausfabedaten: Funktionswert heron2ite Nachbedingungen: heron2rek∈ |R ist die Quadratwurzel von pa auf auf pn Nachkommastellen genau berechnet Funktion heron2rek Übernahme: pa, pn, px0 x1 ← (px0 + px0/pa)/2 wahr |px0*10^pn - px1*10^pn| > 1 falsch heron2rek ← heron2rek(pa, pn, x1) heron2rek ← x1 3. Entwickeln Sie jeweils einen iterativen und einen rekursiven Algorithmus. fertigen Sie zu jeder Teilaufgabe eine Spezifikation, ein Struktogramm, einen Schreibtischtest und ein Java-Unterprogramm an. Als Testprogramm kann das von Aufgabe 2 ergänzt werden. a. Funktion ggT(a, b) ∈ |N … größter gemeinsamer Teiler, a,b ∈ |N b. Funktion fak(a) ∈ |N … Fakultät von a, a! mit a∈ |N c. Funktion quersumme(a) ∈ |N, mit a∈ |N d. Funktion a_ueber_b(a, b) ∈ |N …. Binomialkoeffizient mit a, b ∈ |N (Ist hier eine Lösung über Iteration oder Rekursion überhaupt möglich?)