Programmieren
 
 
 
 
 
C-Grundkurs
 
 
 
 
 
.. Beispiel: Satz von Pythagoras (mit Eingaben DOS)
 
 

 
 
 
 
 
Aufgabe:
Die Funktion pythagoras() wurde bereits besprochen. Hier soll nun eine Erweiterung dieses Programms stattfinden, so dass die Eingaben für die Längen der Katheten, zur Laufzeit des Programms, über die Tastatur stattfinden können.

Erweitern Sie also das Testprogramm pythagoras.cpp um eine Tastatureingabe, so dass die Zahlen für die Längen der Katheten zur Laufzeit des Programms eingegeben werden können. Benutzen Sie hierzu die Funktion fstrgin() deren Quelltext in der Datei fstrgin.h abgelegt ist.

Beachten Sie, die Funktion fstrgin() sammelt in einem reservierten Speicherbereich (einem Buffer oder char Array) reinen ASCII-Code, der erst durch die Bibliotheksfunktion atof() in eine doppeltgenaue Fliesskommazahl gewandelt werden muss.
Sie müssen sich also folgend darüber informieren, wie man ..

1. Eine eigen erstellte Include- oder Headerdatei.h in den Quelltext einbindet ..
2. wie die Funktionen fstrgin() (formatted String in) arbeitet, und ..
3. was die Bibliotheksfunktion atof() (ASCII to Float) tut.

Mit dem nachfolgenden Link können sie den Quelltext der Datei fstrgin.h zur Kopie in ihre IDE aufrufen.
fstrgin.h .. zum Kopieren ansehen
 
 
 
 

 


 

// pythagoras.cpp
// --------------  Version 20.11.2008
//                 Model: small
//                 Fließkommaemulation ein (beim IPC@CHIP)
//                 Schwarzer, www.GoBlack.de

// Funktion zur Berechnung der Hypotenusenlänge nach dem Satz von
// Pythagoras


// Einbinden von Headerdateien mit Bibliotheksfunktionen
#include <conio.h>             // für getch() wenn benötigt
#include <stdio.h>             // für printf()
#include <math.h>              // für sqrt()


// Einbinden einer eigenen Headerdatei, die sich im gleichen
// Verzeichnis wie der Quelltext befindet. Zwischen den
// Gänsefüßchen muss eine Pfadangabe stehen, wenn sich die Datei
// nicht im gleichen Verzeichnis wie der Quelltext befindet.

#include "fstrgin.h"

//                                  fstrgin.h zum Kopieren ansehen
// ===============================================================

// Deklarationen der Fkt. pythagoras()
double pythagoras(double, double);


// Definition der Fkt. 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)
{ 
 return(sqrt(a*a + b*b));    // Rückgabe von Wurzel aus a²+b²
}


// main()
// Testprogramm für die Funktion Pythagoras für DOS-Rechner mit 
// Eingaben von der Tastatur. Bei PCs sollte getch() aktiviert
// werden.

void main(void)
{
  double kath1;                // Deklaration von kath1
  double kath2;                // Deklaration von kath2
  double hypo;                 // Deklar. Von hypotenuse


  char txtbuf[32];             // ein Textbuffer für 32 Bytes


  printf("\r\nKathete1= ");    // Eingabeaufforderung Kathete1
  fstrgin(txtbuf, 10, FLT,""); // Tastaturtext in txtbuf[] sammeln 
  kath1= atof(txtbuf);         // ASCII-Code zu Zahl wandeln

  printf("\r\nKathete2= ");    // Eingabeaufforderung Kathete2
  fstrgin(txtbuf, 10, FLT,""); // Tastaturtext in txtbuf[] sammeln 
  kath2= atof(txtbuf);         // ASCII-Code zu Zahl wandeln


  hypo = pythagoras (kath1, kath2);   // Aufruf der Funktion

  printf("\r\nHypotenuse = %f", hypo);
  getch();
}

 


 

 

Die Ausgabeabfolge des obigen Beispiels sieht wie folgt aus:

Kathete1= _          Eingabe max. 10 Zeichen
Kathete2= _          Eingabe max. 10 Zeichen
Hypotenuse =         Ergebnis

 

 
 
 
 
Einbinden einer eigenen Headerdatei
Mit der Zeile #include "fstrgin.h" wird die Headerdatei mit dem Namen fstrgin.h in den vorliegenden Quelltext eingefügt. Sie enthält den Quelltext für die Funktion fstrgin(). So gesehen unterscheidet sich fstrgin.h von den Headerdateien der statischen Bibliothek, die ihrerseits keinen Quelltext von Funktionen enthalten, sondern nur deren Header, also die Funktionsköpfe.
Anders als bei den Dateien.h der statischen Bibliothek wurde der Name fstrgin.h zwischen Gänsefüßchen gesetzt. Die Gänsefüßchen sagen dem Compiler, dass er zum Suchen der angegebenen Datei, nicht seine Voreinstellung wie bei den statischen Headerdateien verwenden darf, sondern den angegebenen Pfad verwenden muss. Liegt die Datei fstrgin.h im gleichen Verzeichnis wie der Quelltext, in den sie eingebunden wird, so kann die vollständige Pfadangabe entfallen, was oben geschehen ist.
 
 
 
 
 
Der Textbuffer txtbuf [] und der Aufruf von eingabe()
Wie die Funktion fstrgin() im einzelnen funktioniert muss man nicht genau wissen. Allerdings muss man wissen wie sie einzusetzen ist. Dazu gibt es wie bei den Funktionen der statischen C-Bibliothek eine Gebrauchsanweisung des Programmierers. Diese müssen Sie durcharbeiten.

Die Zeile char txtbuf[32]; stellt in obigem Programm einen 32 Byte (char) grossen RAM-Speicherbereich im Hauptspeicher zur Verfügung. In diesem wird die Funktion fstrgin() die ASCII-Codes von der Tastatur, Byte für Byte, sammeln. Durch fstrgin(txtbuf, ..); wird dieser RAM-Speicher der Funktion zur Kenntnis gebracht. Die weiteren Angaben in dem Aufruf von fstrgin() fstrgin(txtbuf, 10, FLT,""); betreffen den Wunsch, dass maximal 10 Tastatureingaben gesammelt und dass nur Zeichen entgegengenommen werden sollen, die zu Fliesskommazahlen gehören (FLT). Dies sind die Zeichen 0-9.+-
 
 
 
 
 
printf() und atof()
Es macht sich einfach gut, vor einem Eingabefeld eine Eingabeaufforderung zu platzieren. Diese sollte aussagen, dass das Programm auf eine Eingabe wartet und ohne diese nicht selbständig fortfahren wird. Durch die printf()-Funktionen, kann vor dem Aufruf von fstrgin() einen Text ausgeben werden.

Bei der Funktion atof (ASCIItoFloatingpoint) ist die Erklärung etwas aufwendiger. Der Funktion wird wiederum der Buffer mit den eingegebenen Zeichen übergeben. Dieser kann aus 10 Bytes bestehen, in denen der ASCII-Code der Tastaturzeichen steht. Der Code von ASCII-Zeichen entspricht aber nicht der Form, in welcher doppeltgenaue Fließkommazahlen in einem Computer abgelegt werden. Diese besitzen immer einen Umfang von 8 Bytes. Der ASCII-Code muss in diese Formatierung umgewandelt werden und das kann die Funktion atof() der statischen C-Bibliothek.

An der Ganzzahl 255 lässt sich darstellen, was gemeint ist. Diese Zahl füllt im Computer ein Byte mit dem hexadezimalen Wert FFh. Die einzugebenden ASCII-Codes dagegen würden drei Bytes umfassen, welche die hexadezimalen Werte 32h, 35h, 35h besitzen würden. Auch hier wäre eine Wandlung der 3 ASCII-Codes zu einem Byte notwendig.

Die Funktion atof() übernimmt also in der Zeile kath1= atof(txtbuf); die ASCII-Codes von txtbuf, wandelt sie in eine doppeltgenaue Fliesskommazahl um und weist die Fließkommazahl dem Speicher kath1 zu. Diese Variable ist zur Aufnahme von solchen Zahlen geeignet, denn sie wurde als double kath1; deklariert.
 
 
 
 
 
In der letzten Variante soll die Funktion pythagoras auf dem IPC@CHIP zum 'Laufen' gebracht werden.
 
 
 
 
www..de