WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Probleme mit Programmierhausübung in C (http://www.wcm.at/forum/showthread.php?t=79069)

infectedmushroom 02.12.2002 15:32

Probleme mit Programmierhausübung in C
 
Hallo !!!
Ich bitte um Hilfe bei meiner Programmierhausübung in C.

Folgendes Beispiel:

#include "stdio.h"
#include "conio.h"

void main()

{

double brutto, prozent, netto, steuer1, steuer2, steuer3;

steuer1 = 3640;
steuer2 = 14534;
steuer3 = 29069;

printf ("EinkommensSteuerBerechnungsProgramm von Andreas Schmidberger");
printf ("\n\n\nBitte geben Sie ihr BRUTTO Einkommen ein-->");
scanf ("%lf",&brutto);

if (brutto>steuer3)
{
prozent = 50;
netto=prozent*brutto/100;
printf("Der Nettobetrag betr„gt %d Euro",&netto);
}
else
if (brutto<=steuer3);
{ //unter 29 069
prozent = 41;
netto=prozent*brutto/100;
printf("Der Nettobetrag betr„gt %d Euro",&netto);
}
else
if (brutto<=steuer2);
{ //unter 14 534
prozent = 31;
netto=prozent*brutto/100;
printf ("Der Nettobetrag betr„gt %d Euro",&netto);
}
else
if (brutto<=steuer1);
{ //unter 3 640
netto = brutto;
printf ("Der Nettobetrag betr„gt %d Euro",&netto);
}
else
getch();

}




Ich habe es im DOS-Compiler Turbo C++ von Borland programmiert...
Es tritt immer folgender Fehler auf: else misplaced
Wo liegt der Fehler :confused:
Ich bin verzweifelt und habe schon alles ausprobiert :heul:

Danke im voraus INFECTED MUSHROOM

käptn 02.12.2002 15:40

Re: Probleme mit Programmierhausübung in C
 
Zitat:

Original geschrieben von infectedmushroom

}
else
{
getch();
}

Du hast vergessen, die geschwungene Klammer zu öffnen.

~

flinx 02.12.2002 15:54

Du solltest eventuell auch überlegen die If-Bedingungen anders anzuordnen, da bei einer Eingabe von z.B. Brutto=10000 die Bedingung if (brutto<=steuer3); erfüllt ist und daher die 'richtige' Bedingung if (brutto<=steuer2); nicht mehr erfüllt werden kann. ;)

infectedmushroom 02.12.2002 16:07

hi käptn!

Was meinst du? Entweder habe ich es nicht genau verstanden oder ich habe einen anderen Fehler.

#include "stdio.h"
#include "conio.h"

void main()

{

double brutto, prozent, netto, steuer1, steuer2, steuer3;

steuer1 = 3640;
steuer2 = 14534;
steuer3 = 29069;

printf ("EinkommensSteuerBerechnungsProgramm von Andreas Schmidberger");
printf ("\n\n\nBitte geben Sie ihr BRUTTO Einkommen ein-->");
scanf ("%lf",&brutto);

if (brutto>steuer3);
{
prozent = 50;
netto=prozent*brutto/100;
printf("Der Nettobetrag betr„gt %d Euro",&netto);
}
else <--- Misplaced else
if (brutto<=steuer3);
{
prozent = 41;
netto=prozent*brutto/100;
printf("Der Nettobetrag betr„gt %d Euro",&netto);
}
else <--- Misplaced else
if (brutto<=steuer2);
{
prozent = 31;
netto=prozent*brutto/100;
printf ("Der Nettobetrag betr„gt %d Euro",&netto);
}
else <--- Misplaced else
if (brutto<=steuer1);
{
netto = brutto;
printf ("Der Nettobetrag betr„gt %d Euro",&netto);
}

getch();

}




Ich komme einfach nicht weiter. Ich bin verzweifelt...
Danke im Voraus Infected Mushroom

rollipolli 02.12.2002 17:06

...der "strichpunkt" nach der if-bedingung ist nix...
deswegen "misplaced else"

infectedmushroom 02.12.2002 17:15

Danke es funktioniert
Aber hat irgendwer eine ahnung warum immer -34 herauskommt (egal nach welcher eingabe) :confused:


MfG Infected Mushroom

kikakater 02.12.2002 17:34

Die ifs sind logisch falsch angeordnet es zieht entweder der erste if Vergleich oder der zweite. Du mußt im zweiten auf größer steuer2 vergleichen und nicht kleiner gleich steuer3 :rolleyes:

Der Fehler mit -34 passiert, weil Du im printf %d anstatt %lf für eine double Variable wie netto sie darstellt verwendest. Die printf Funktion nimmt einen 16bit integer Wert vom Stack.

infectedmushroom 02.12.2002 17:43

Das Funktioniert ABER

jetzt kommt egal welchen Wert ich eingebe 0.0000000 Euro heraus.

I gibs bald auf :heul:

infectedmushroom 02.12.2002 17:45

PS: Aktueller Quellcode


#include "stdio.h"
#include "conio.h"

void main()

{

double brutto, prozent, netto, steuer1, steuer2, steuer3;

steuer1 = 3640;
steuer2 = 14534;
steuer3 = 29069;

printf ("EinkommensSteuerBerechnungsProgramm von Andreas Schmidberger");
printf ("\n\n\nBitte geben Sie ihr BRUTTO Einkommen ein-->");
scanf ("%lf",&brutto);

if (brutto>steuer3)
{
prozent = 50;
netto=prozent*brutto/100;
printf("Der Nettobetrag betr„gt %lf Euro",&netto);
}
else
if (brutto>=steuer2)
{ //unter 29 069
prozent = 41;
netto=prozent*brutto/100;
printf("Der Nettobetrag betr„gt %lf Euro",&netto);
}
else
if (brutto<=steuer2)
{ //unter 14 534
prozent = 31;
netto=prozent*brutto/100;
printf ("Der Nettobetrag betr„gt %lf Euro",&netto);
}
else
if (brutto<=steuer1)
{ //unter 3 640
netto = brutto;
printf ("Der Nettobetrag betr„gt %lf Euro",&netto);
}

getch();

}

kikakater 02.12.2002 18:02

Schon einmal überlegt, daß nur bei scanf der Ampersand Operator & (=address of) korrekt ist. Beim printf willst Du ja nicht die Adresse der Variablen netto ausdrucken, oder ? ... sondern deren Inhalt, laß das & bei den printf's weg.

Die ifs in weiterer Folge sind noch immer falsch. Schenk Dir das <=steuer_n und mach immer ein > steuer_n_minus_1 daraus.

Sprich statt <=steuer2 musst Du auf >steuer1 vergleichen und zum Schluß gibt es nur mehr den else Block.

kikakater 02.12.2002 19:30

Hoffentlich hilft es Dir :

Code:


typedef struct {
 double bruttoeinkommen,steuer;
} STEUERPARAMETER;

int steuer_berechnen(STEUERPARAMETER *pSt);

/*
 Progressionstufe i hat den Laufindex x, x = i - 1, bei i >= 1

progressionsstufe[x][0] ... Steuerbasis Stufe i
progressionsstufe[x][1] ... Steuersatz Stufe i
*/

#define SPITZENSTEUERSATZ 50.0

double progressionsstufe[][2] = { 3640.0, 31.0 , 14534.0, 41.0 , 29069.0, SPITZENSTEUERSATZ , 0.0, 0.0 };

int main( void )
{
 STEUERPARAMETER St;

 printf("EinkommensSteuerBerechnungsProgramm von Andreas Schmidberger");
 printf("\n\n\nBitte geben Sie ihr BRUTTO Einkommen ein-->");
 scanf("%lf",&St.bruttoeinkommen);

 if( steuer_berechnen(&St) < 0 )
 { printf("Fehler bei der Steuerberechnung\n"); exit(0); }

 printf("Ihre Einkommenssteuer beträgt %.2lf Euro\n"
        "Ihr Nettoeinkommen beläuft sich auf %.2lf Euro\n", St.steuer, St.bruttoeinkommen - St.steuer);

 return 0;
}

/* Steuer bezogen auf die Progressionstufen berechnen */
int steuer_berechnen(STEUERPARAMETER *pSt)
{
 int x;

 pSt->steuer = 0.0;

 if(pSt->bruttoeinkommen < 0.0) return -1;

 for( x = 0 ; ; x++ )
 {
  if( pSt->bruttoeinkommen <= progressionsstufe[x][0] ) break;

  if( progressionsstufe[x][1] == SPITZENSTEUERSATZ )
  {
  pSt->steuer = pSt->steuer + ((pSt->bruttoeinkommen - progressionsstufe[x][0]) * progressionsstufe[x][1] / 100.0);
  break;
  }

  if( pSt->bruttoeinkommen < progressionsstufe[x+1][0] )
  pSt->steuer = pSt->steuer + ((pSt->bruttoeinkommen - progressionsstufe[x][0]) * progressionsstufe[x][1] / 100.0);
  else
  pSt->steuer = pSt->steuer + ((progressionsstufe[x+1][0] - progressionsstufe[x][0]) * progressionsstufe[x][1] / 100.0);

 }

 return 0;
}


infectedmushroom 03.12.2002 21:45

Es funktioniert jetzt endlich... Danke für eure Hilfe


Infected Mushroom :mutieren:


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag