|
// ohmges.cpp
// ----------- Version 07.04.2008
// Model: beliebig
// Fliesskommaemulation ein (bei IPC@CHIP)
// www.GoBlack.de, D.Schwarzer
// Deklaration von Funktionen der statischen Bibliothek
#include <stdio> // für printf()
#include <conio.h> // für getch()
#include <math.h> // für HUGE_VAL= grösste Fliesskommazahl
// Laden einer eigenen Funktionen zur Abfrage der Tastatur
#include "fstrgin.h"
// fstrgin.h zum Kopieren ansehen
// ===============================================================
// getFPzahl()
// Die Funktion holt eine maximal 10stellige, doppeltgenaue
// Fließkommazahl durch Tastatureingaben. Es kann der Funktion ein
// String für die Eingabeaufforderung übergeben werden. Ihre
// Rückgabe ist die eingegebene doppeltgenaue Fliesskommazahl oder
// HUGE_VAL, wenn die Eingabe mit [ESC] abgebrochen wurde.
// die benutzte Funktion fstrgin() wurde mit der Includedatei
// fstrgin.h geladen.
double getFPzahl(char* prompt)
{
char txtbuf[11];
printf("%s", prompt);
if(fstrgin(txtbuf, 10, FLT, "")==-1) return(HUGE_VAL);
return(atof(txtbuf));
}
// R(), U(), I()
// Definition der drei Funktionen des Ohmschen Gesetzes. Wegen
// ihren geringen Länge wurden sie in einer Zeile geschrieben.
// Ihre Adressen werden in das Array der Funktionen übertragen.
double R (double u, double i) { return(u/i); }
double U (double r, double i) { return(r*i); }
double I (double u, double r) { return(u/r); }
// main()
// Aus einem Menü heraus kann eine Berechnung des Ohmschen Gesetzes
// gewählt werden. Die eingegebene Zahl für das Menü wird zur
// Auswahl der entsprechenden Funktion benutzt, sowie für die
// Ausgabe von Strings für die Eingabeaufforderung
void main (void)
{
char c=0; // Menü-Auswahlzeichen
double x, x1, x2; // Ergebnis x, Eingaben x1, x2
// Stringarray für die in den Funktionen auftretenden Groessen,
// in der Abfolge, wie sie jeweils eingegeben werden
char* prompt[]={"\r\n U= ","\r\n I= ","\r\n R= ",
"\r\n R= ","\r\n I= ","\r\n U= ",
"\r\n U= ","\r\n R= ","\r\n I= " };
// Deklaration und Definition eines Zeigerarrays auf Funktionen
// vom Typ double name(double,double)
double(*fktptr[])(double,double)={R, U, I};
while(1){
// Ausgabe des Menüs
printf("\r\n\n");
printf("\r\n [0] .. Widerstand berechnen");
printf("\r\n [1] .. Spannung berechnen");
printf("\r\n [2] .. Strom berechnen");
printf("\r\n[ESC] .. Ende des Programms ");
// warten auf eine Wahleingabe c enthält den ASCIIcode
c=getch();
if(c==ESC) return; // bei 0x1B Programm beenden
if(c==CR) continue; // bei 0x0D Schleife neu beginnen
printf("\r\n\n"); // Abstand zur Berechnung
c=c-0x30; // ASCIIcode in c in eine Zahl
if(c<0 || c>2) continue; // wandeln und Test ob Zahl = 0,1,2
// Zwei Fliesskomma-Eingaben holen. Anhand der Zahl in c wird
// die Eingabeaufforderung im Array prompt[] ausgewählt
x1=getFPzahl(prompt[3*c+0]);
x2=getFPzahl(prompt[3*c+1]);
// Die geholten Zahlen x1,x2 dürfen nicht den Wert 0 besitzen
// Bei x1,x2 ungleich 0 wird über die Zahl in c die benötigte
// Funktion des Arrays der Funktionen für das ohmsche Gesetz
// aufgerufen
if (x1!=0 && x2!=0){
x= fktptr[c](x1,x2); // Aufruf einer der Funktionen
printf("%s%f",prompt[3*c+2], x); // Ausgabe Ergebnis
}
}
}
|
|