Programmieren
 
 
 
 
 
C-Grundkurs
 
 
 
 
 
.. 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.
 
 
 
 
www..de