|
|
||
|
|
||
| .. 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. |
||
|
|
|
|
|
|
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. | ||
|
|
.de