c programm Hilfe bin im ersten Semester?

...komplette Frage anzeigen

4 Antworten

int main()
{
float netto, brutto, ergebnis, steuer;

printf("Programm zur Berechnung eines Bruttobetrages\n\n");
printf("Bitte geben Sie den Nettobetrag in EUR ein: \n");

scanf("%f", &netto);
printf("Nettobetrag = %.2f EUR\n“, netto );

steuer = 19.0f;
ergebnis = netto * steuer / 100.0f;
brutto = netto – ergebnis;

printf("Mehrwersteuersatz %.2f %% = %.2f EUR\n", steuer, ergebnis);
printf("Bruttobetrag = %.2f EUR", brutto);
}

Nur 4 Fehler :-)

  • printf() ist undefiniert
  • printf("Netto...: schließendes " fehlt (typographische Symbole funktionieren nicht)
  • brutto = netto – ergebnis: unbekanntes Zeichen (–)
  • }: kein Rückgabewert.
1

Sorry, kann hier keinen Code einfügen.

Bitte hier anschauen: http://pastebin.com/PMvMX6eg

Code ist kommentiert.

Du hast fast alles repariert. Aber dort hapert's noch:

scanf("%d",&netto);

"%f", denn netto ist ein double.

printf("Nettobetrag = %.2d EUR\n", netto);

"%.2f", denn netto ist immernoch double.

printf("Mehrwertsteuersatz 19 % = %.2d EUR", ergebnis);

Ein Prozentzeichen wird mit "%%" ausgegeben. Herumstreunende einzelne "%" im Formatstring produzieren gern lustige Ausgaben oder Schlimmeres.

Und natürlich auch hier wieder (und weiter unten nochmal): "%.2f"

1
@ralphdieter

Sorry, ich hab's nicht compiliert/getestet, sondern nur "aus dem Gedächtnis" geschrieben, aber Du hast Recht.

1
@NoHumanBeing

WOW, dafür war das dann echt gut. Ich kenne sonst nur Leute, die ganz nervös werden, wenn ihr Code nicht sofort beim Tippen knallebunt wird. Die könnten keine drei Zeilen ohne ihre geliebte Entwicklungsumgebung schreiben :-/

1

warum soll ich den double benutzen und nicht float, was sind die auswirkungen von den einzelnen ?

1
@phillip12397

Den double habe ich einfach übernommen, da Du bereits double benutzt hast.

Bei double handelt es sich um eine 64-bit Gleitkommazahl, bei float um eine 32-bit Gleitkommazahl. Deshalb bietet double eine höhere Genauigkeit, als float.

Ich würde standardmäßig immer double benutzen, außer Du hast einen bestimmten Grund, float zu benutzen. Die einzigen Gründe, float zu benutzen, die mir einfallen, sind folgende.

  • Du musst für eine bestimmte Datenstruktur oder API float benutzen.
  • Du möchtest Millionen von Gleitkommazahlen (z. B. in einem Array) ablegen oder sonst irgendwo aggressiv Speicher sparen (z. B. auf einem "embedded system" mit sehr knappen Ressourcen).
  • Du rechnest auf einer Prozessorarchitektur, die float effizienter verarbeiten kann, als double. Bei den meisten Grafikprozessoren (GPUs) ist das der Fall. Bei Prozessoren mit x86(-64)-Architektur ist es egal, da die Gleitkommaeinheit ohnehin mit 64 oder gar 80 Bit Präzision arbeitet. Hier ist double eventuell sogar etwas schneller, als float.


Im Grunde ist double vs. float ein bisschen so, wie int vs. short. Du würdest (auch für kleine Zahlen) nicht explizit short benutzen, außer Du hast wirklich einen Grund, dies zu tun.

Da dies nur ein "Uniprojekt" ist, ist es egal, aber bei professionellen Anwendungen rechnet man niemals mit Gleitkommazahlen, wenn es um Geld geht, da Gleitkommaoperationen nicht exakt sind, sondern es eine so genannte "Maschinengenauigkeit" gibt.

1

aber wenn ich jetzt bei scanf ("%lf", &netto); eingebe und es dann ausführe ( habe 50 eingegeben ) kommt dann 1074339840 davor mit float hats geklappt

1
@phillip12397

Ich habe gerade folgenden Code geschrieben (zum Testen).

#include "stdio.h"

int main (int argc, char** argv)
{
double d;
scanf("%lf", &d);
printf("%lf\n", 2.0 * d);
return 0;
}

Dann compiliert und ausgeführt.

$ cc -o test test.c
$ ./test
50
100.000000
$

Scheint zu funktionieren. ;-)

1
@NoHumanBeing

Purer Zufall! "%lf" ist bei printf() nicht definiert. "%f" passt für float und double, da float automatisch in double umgewandelt wird. Aber die meisten Implementierungen ignorieren das 'l' einfach.

Vielleicht klappt's nur beim Fragesteller nicht. Das allereinfachste wäre immernoch, alle Compiler-Warnungen einzuschalten und zu lesen.

1

Dein Code sieht eigentlich gut aus, was funktioniert denn noch nicht? Ich kann das gerade nicht testen.

Etwas habe ich jedoch noch gesehen: Du musst, um den Bruttopreis zu berechnen, die Mehrwertsteuer zum Nettopreis addieren, nicht abziehen.

Was ist/sind denn der/die Fehler??

Was möchtest Du wissen?