Funktion für Betrag < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Hallo
Ich soll eine Funktion schreiben, bei der ich den Betrag einer eingegebenen Zahl berechnen kann.
Ich habe folgendes geschrieben:
#include <stdio.h>
float betrag(float x)
{
if (x < 0) {
x = x * (-1);
}
return x;
}
int main() {
float h;
float y;
printf("zahl eingeben [mm] \n");
[/mm]
scanf("%f",&h);
y=betrag(h);
[mm] printf("Betrag:\n",y);
[/mm]
}
Wenn ich das Programm allerdings ausführe, wird mir keine Zahl ausgegeben sondern einfach nur Betrag:
danach kam nichts mehr.
Ich steh echt auf dem schlauch bei solch einer relativ einfachen Aufgabe. Ich hoffe mir kann jemand den Fehler zeigen.
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 17:46 So 16.12.2012 | Autor: | link963 |
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
> Hallo
Hallo.
> Ich soll eine Funktion schreiben, bei der ich den Betrag
> einer eingegebenen Zahl berechnen kann.
>
>
> Ich habe folgendes geschrieben:
>
> #include <stdio.h>
>
> float betrag(float x)
> {
> if (x < 0) {
> x = x * (-1);
> }
> return x;
> }
>
> int main() {
> float h;
> float y;
> printf("zahl eingeben [mm]\n");[/mm]Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
> scanf("%f",&h);
> y=betrag(h);
> printf("Betrag:\n",y);
Hier hast du dein Umwandlungszeichen "%f" vergessen.
> }
>
> Wenn ich das Programm allerdings ausführe, wird mir keine
> Zahl ausgegeben sondern einfach nur Betrag:
> danach kam nichts mehr.
> Ich steh echt auf dem schlauch bei solch einer relativ
> einfachen Aufgabe. Ich hoffe mir kann jemand den Fehler
> zeigen.
Grüße link963
|
|
|
|
|
Oh ja sowas dummes :)
Wenn ich jetzt aber als Zahl 30.654 eingebe , bekomme ich als Betrag heraus: 30.653999 heraus.
Wo liegt der Fehler bzw was muss ich verändern, damit ich die exakte Lösung bekomme?
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 20:35 So 16.12.2012 | Autor: | link963 |
Ja, das liegt daran, dass bei der Umrechnung in Maschinenzahlen der Speicher nicht mehr ausreicht beim float(32-bit) um die Nachkommastellen exakt darzustellen.
Versuch es mal mit dem Datentyp double (64-bit).
Liebe Grüße
link963
|
|
|
|
|
Und was für ein Umwandlungszeichen brauch ich dann an Stelle von %f?
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 22:03 So 16.12.2012 | Autor: | link963 |
Dann musst du %lf nehmen.
|
|
|
|