Lösung zur Übung 2 , Aufgabe 3 - Quelltext
/*
Programm zur Umrechnung eines Winkels vom Gradmass zum Bogenmass
Rev. 9, (C) Gerhard Eichelsdoerfer, Technikerschule Hannover
Diese Variante enthaelt
* In Kommentaren Hinweise zu Konstanten, Variablen und Funktionen,
* die Funktion DegToRad
* eine Fehlererkennung, die ein ungeeignetes Zeichen in der
Eingabe-Zeichenkette feststellt.
Fuehrende Whitespaces (z.B. Leerzeichen) werden uebergangen.
* eine Sequenz mit bedingter Uebersetzung zur
Ausgabe zwecks Erkennung von geeigneter und ungeeigneter Eingabe
*/
#include <stdio.h>
#include <stdlib.h>
/* Definition von Test zur bedingten Uebersetzung */
#define Test
/* Information zum Programm */
#define M1 "\nGradmass zu Bogenmass - Rev. 9\n"
#define M2 "\nDieses Programm berechnet zu einem im Gradmass (Altgrad) einzugebenden"
#define M3 "\nWinkel das Bogenmass.\n"
/* Information ueber eine erwartete Eingabe */
#define InInfo "\nGeben Sie den Winkel im Gradmass ein: "
/* Definition der Kreiszahl Pi */
#define Pi 3.141592654
/* Definition des Zeichens von Line Feed (Zeilenvorschub) */
#define Key_LF 10
/* Die Funktion ProgInfo gibt Informationen zum Programm aus. */
void ProgInfo (void);
/*
Die Funktion ReadFloat liest einen float-Wert ein
und liefert diesen als Resultat.
Wenn sich ein Eingabefehler ereignet, wird das Programm
mit dem Fehlercode 1 beendet.
Export: float-Resultat = eingegebener Wert
*/
float ReadFloat (void);
/*
Die Funktion DegToRad berechnet zu einem Winkel im Gradmass
den Winkelwert im Bogenmass.
Import: float-Parameter mit Winkelwert im Gradmass
Export: float-Resultat mit Winkelwert im Bogenmass
*/
float DegToRad (float); /* oder z.B. float DegToRad (float Degree); */
int main()
{
/* Variablen fuer die Eingabe und das Resultat */
float Grad, Bogen;
/* Information ueber dieses Programm ausgeben */
ProgInfo();
/* Information ueber die erwartete Eingabe */
printf(InInfo);
/* Eingabe einlesen und Variable Grad zuweisen */
Grad = ReadFloat();
/* Bogenmass berechnen */
Bogen = DegToRad(Grad);
/* Eingabe und Resultat ausgeben */
printf("\n%.2f° -> %f rad\n", Grad, Bogen);
/* Rueckkehr zum Betriebssystem ohne Fehlercode */
return 0;
}
/* Implementation der Funktion ProgInfo */
void ProgInfo (void)
{
printf("%s%s%s",M1,M2,M3); /* Die Information steckt in den Konstanten M... */
}
#undef Test
/* Implementation der Funktion ReadFloat */
float ReadFloat (void)
{
float Temp; /* temporaere Variable */
int gelesen; /* Variable fuer das Resultat von scanf */
char dummy; /* Pseudovariable zur Fehlererkennung */
/* Eingabe einlesen und auf Eignung pruefen */
gelesen = scanf("%f%c",&Temp,&dummy);
#ifdef Test
printf("\n%d Eingabefelder gelesen und abgespeichert:\n",gelesen);
printf("Zahl: %f ; Zeichencode: %d\n",Temp,dummy);
#endif
if (gelesen!=2 || dummy!=Key_LF) exit(1); /* Eingabe ungeeignet */
return Temp; /* Eingabe geeignet */
}
/* Hier folgt die Implementation der Funktion DegToRad. */
float DegToRad (float Degree)
{
return Pi/180.0*Degree; /* Bogenmass/Pi = Gradmass/180 */
}
zusammengestellt von G. Eichelsdörfer