|
|
||
|
|
||
| .. Beispiel: Satz von Pythagoras | ||
|
|
||
|
Aufgabe:
Scheiben
Sie eine C-Funktion, welche nach dem Satz von Pythagoras die
Länge der Hypotenuse eines rechtwinkligen Dreiecks, aus den
Kathetenquadraten bestimmt. Entwickeln Sie auch ein Testprogramm
für ihre Funktion.
Ihre
Funktion soll den Namen pythagoras() erhalten. Es sollen ihr die
Längen der Katheten a und b als doppelt genaue
Fließkommazahlen übergeben werden. Die doppelt genaue
Fließkomma-Rückgabe der Funktion entspricht der Länge
der Hypotenuse.
Theorie:
Nach dem Satz von Pythagoras entspricht die Fläche des Quadrates über der Hypotenuse c, der Summe der Flächen über den Katheten a und b. Dies führt zu der Formel .. c² = a² + b². Durch Umstellung dieser Formel ergibt sich c zu .. c = Wurzel aus (a² + b²). In der Programmiersprache C gibt es keine Grundoperation zum 'Ziehen' einer Quadratwurzel. Es muss eine Funktion der statischen Bibliothek benutzt werden. Diese wird mit squareroot (Quadratwurzel) und abgekürzt sqrt() bezeichnet. |
||
|
|
|
|
// pythagoras.cpp
// -------------- Version 20.05.2007
// Model: beliebig
// Fliesskommaemulation ein (beim IPC@CHIP)
// www.GoBlack.de, D.Schwarzer
// Funktion zur Berechnung der Hypotenusenlänge nach dem Satz von
// Pythagoras
// Deklarationen von Bibliotheksfunktionen
#include <stdio.h> // für printf()
#include <math.h> // für sqrt()
// Deklarationen einer eigenen Funktion
double pythagoras(double, double);
// Definition der Funktion pythagoras()
// Berechnet die Länge der Hypotenuse in einem rechtwinkligen
// Dreieck.
// Übergaben: Länge der Katheten a und b
// Rückgabe: Länge der Hypotenuse
double pythagoras( double a, double b)
{
double c, p; // Deklaration der Variablen c und p
p = a*a + b*b; // Berechnung a²+b² nach p
c = sqrt(p); // Wurzel aus p nach c
return(c); // Rückgabe von Wurzel aus c
}
// main()
// Testprogramm für die Funktion Pythagoras
void main(void)
{
double kath1= 12.3; // Deklar.u.Definition von kath1
double kath2= 10.7; // Deklar.u.Definition von kath2
double hypo; // Deklar. Von hypotenuse
hypo = pythagoras (kath1, kath2); // Aufruf der Funktion
printf ("Hypotenuse = %f", hypo);
}
|
||
|
|
|
|
|
|
Die Ausgabe des obigen Beispiels lautet: Hypotenuse = 16.3027605 |
|
| Vereinfachungen der Funktion pythagoras() In dem obigen Beispiel der Funktion pythagoras() wurden zwei Hilfsvariable c und p deklariert. Anders als in der Mathematik steht das Zeichen = beim Programmieren nicht für einen Vergleich (Relation) sondern für eine Handlungsanweisung (Operation). Diese lautet .. übertrage den Wert rechts vom Gleichheitszeichen in die Speicherzelle, deren Namen links vom Gleichheitszeichen genannt wird. So gesehen ist der Ausdrück c = sqrt(c) beim Programmieren legal. Es wird aus dem Inhalt der Speicherzelle c die Wurzel gezogen und das Ergebnis der Speicherzelle c zugewiesen. Mit dieser Erkenntnis lässt sich die Hilfsvariable p einsparen. | ||
double pythagoras( double a, double b)
{
double c; // Deklaration der Variablen c
c = a*a + b*b; // Berechnung a²+b² nach c
c = sqrt(c); // Wurzel aus c nach c
return(c); // Rückgabe von Wurzel aus c
}
|
||
| Eine weitere Vereinfachung ergibt sich aus dem Umstand, dass man Variable, die an eine Funktion übergeben werden sollen, nicht nur als Zahl oder Variable angeben kann, sondern auch als Ausdruck, mit dem sich die Übergabezahl berechnen lässt. Diese Ausdrücke werden also vor der eigentlichen Übergabe ihres Wertes an die Funktion ausgerechnet. So ist es möglich die Quadratberechnung zwischen den Klammern der Funktion sqrt() durchzuführen, wodurch eine weitere Zeile in der vorhergehenden Funktion entfällt. | ||
double pythagoras( double a, double b)
{
double c; // Deklaration der Variablen c
c = sqrt(a*a + b*b); // Wurzel aus a²+b² nach c
return(c); // Rückgabe von Wurzel aus c
}
|
||
| Die letzte Vereinfachung ergibt sich aus dem Umstand, dass Funktionen 'geschachtelt' werden dürfen. Im Prinzip ist das nichts anderes als das soeben beschriebene Verfahren. Innerhalb der Übergabeklammern einer Funktion dürfen also weitere Funktionen genannt werden. Die Verschachtelungstiefe ist dabei beliebig. Dies verkürzt die Funktion pythagoras() zu einem Einzeiler .. | ||
double pythagoras( double a, double b)
{
return(sqrt(a*a + b*b)); // Rückgabe von Wurzel aus a²+b²
}
|
||
| Mängel Im obigen Programmbeispiel müssen die Zahlen für die Katheten vor der Compilation im Quelltext des Programms angegeben werden. Dies ist ein unbefriedigender Zustand. Man müsste die Zahlen dem laufenden Programm übergeben können und so ohne eine Neukompilation immer neue Berechnungen durchführen können. Hierzu ist allerdings die Abfrage der Tastatur notwendig. Sie wird in der nächsten Version dieses Programms durchgeführt. | ||
|
|
.de