Kleine Frage (wahrscheinlich nur ein kleiner Fehler)wichtig!

  • Kleine Frage (wahrscheinlich nur ein kleiner Fehler)wichtig!

    Ich bin noch Schüler und habe erst seit 3 Wochen angefangen mim Coden...
    Morgen muss ich für den Technik unterricht ein kleines Programm abgeben.
    Hier der Code

    Quellcode

    1. #include <iostream.h>
    2. #include <iomanip.h>
    3. int main ()
    4. {
    5. float Stundenanzahl, Stundenlohn, Ueberstundengehalt;
    6. cout.setf(ios::fixed);
    7. cout.precision(2);
    8. cout <<"Gearbeite Stunden: ";
    9. cin >>Stundenanzahl;
    10. cout <<"Stundenlohn: ";
    11. cin >>Stundenlohn;
    12. float Angestellt, Monatslohn;
    13. cout <<"\nFuer Auszubildender die 0, Fuer Angestellter die 1 : "<<endl;
    14. cin >>Angestellt;
    15. if (Angestellt == 1)
    16. { float Fahrkostenpauschale;
    17. Fahrkostenpauschale = 200;}
    18. else
    19. { float Fahrkostenpauschale = 150; }
    20. if (Stundenanzahl > 160)
    21. {
    22. float Ueberstunden = Stundenanzahl - 160;
    23. float Ueberstundengehalt = Ueberstunden * Stundenlohn / 2;
    24. float Monatslohn = Stundenlohn * 160 + Ueberstundengehalt;
    25. }
    26. else
    27. {
    28. float Monatslohn = Stundenlohn * Stundenanzahl;
    29. float Ueberstundengehalt = 0;
    30. }
    31. float Endgeld = Monatslohn + Fahrkostenpauschale;
    32. cout <<"Monatslohn"<<setw(24)<<"Ueberstundengehalt"<<setw(24)<<"Fahrkostenpauschale"<<endl;
    33. cout <<Monatslohn<<setw(24)<<Ueberstundengehalt<<setw(24)<<Fahrkostenpauschale<<endl;
    34. cout <<"**********************************************************"<<endl;
    35. cout <<"Der Monatsverdiest beträgt "<<Endgeld<<" Euro";
    36. cout <<"\n\n";
    37. return 0;}
    Alles anzeigen



    Wenn ich compilen will kommt der error:
    H:\non musik\TW\msvcpp\Arbeitslohn\main.cpp(47) : error C2065: 'Fahrkostenpauschale' : nichtdeklarierter Bezeichner

    Also ein Problem mit der Variable, ich hab die halt nur in der If schleife definiert, aber anders gehts nicht.

    Das Program soll den Monatsgehalt erechnen, aus der anzhal der Arbeitsstunden und dem Stundenlohn. Außerden sollen die Überstunden (ab 160 Stunden sinds Überstunden) mal der hälfte des Stundenlohns zum Monatsgehalt dazugerechnet werden. Außerdem sollen wir noch die Fahrkostenpauschale einbauen, für Azubis 160€ für Angestellte 200€.

    wäre nett wenn mir jemand schnell sagen kann was genau ich falsch gemacht habe

    edit:
    benutzte MS Visual C++ 6.0 Pro

    mfg Micha
  • ohne mir deinen code im detail anzuschauen oder gar den compiler anzuwerfen, hab ich einfach mal alle floats nach oben gezogen

    Quellcode

    1. int main ()
    2. {
    3. float Stundenanzahl, Stundenlohn, Ueberstundengehalt, Fahrkostenpauschale, Ueberstunden, Ueberstundengehalt, Monatslohn, Angestellt, Endgeld;
    4. cout.setf(ios::fixed);
    5. cout.precision(2);
    6. cout <<"Gearbeite Stunden: ";
    7. cin >> Stundenanzahl;
    8. cout <<"Stundenlohn: ";
    9. cin >> Stundenlohn;
    10. cout <<"\nFuer Auszubildender die 0, Fuer Angestellter die 1 : "<<endl;
    11. cin >> Angestellt;
    12. if (Angestellt == 1) {
    13. Fahrkostenpauschale = 200;
    14. } else {
    15. Fahrkostenpauschale = 150;
    16. }
    17. if (Stundenanzahl > 160) {
    18. Ueberstunden = Stundenanzahl - 160;
    19. Ueberstundengehalt = Ueberstunden * Stundenlohn / 2;
    20. Monatslohn = Stundenlohn * 160 + Ueberstundengehalt;
    21. } else {
    22. Monatslohn = Stundenlohn * Stundenanzahl;
    23. Ueberstundengehalt = 0;
    24. }
    25. Endgeld = Monatslohn + Fahrkostenpauschale;
    26. cout <<"Monatslohn"<<setw(24)<<"Ueberstundengehalt"<<setw(24)<<"Fahrkostenpauschale"<<endl;
    27. cout << Monatslohn <<setw(24)<< Ueberstundengehalt<< setw(24)<< Fahrkostenpauschale<< endl;
    28. cout <<"**********************************************************"<<endl;
    29. cout <<"Der Monatsverdiest beträgt "<<Endgeld<<" Euro";
    30. cout <<"\n\n";
    31. return 0;
    32. }
    Alles anzeigen
  • Hi,
    für Angestellt solltest du den Datentyp int anstelle von float nehmen.
    Vergleiche mit Gleitkommazahlen sind,aufgrund ihrer internen Darstellung, problematisch.

    Quellcode

    1. if (Stundenanzahl > 160)
    2. {
    3. float Ueberstunden = Stundenanzahl - 160;
    4. float Ueberstundengehalt = Ueberstunden * Stundenlohn / 2;
    5. float Monatslohn = Stundenlohn * 160 + Ueberstundengehalt;
    6. }
    7. else
    8. {
    9. float Monatslohn = Stundenlohn * Stundenanzahl;
    10. float Ueberstundengehalt = 0;
    11. }
    Alles anzeigen

    Hier legst du innerhalb der Blöcke lokale Variablen Überstundengehalt und Monatslohn an.Diese überdecken die Sichtbarkeit der Variablen die du weiter oben deklariert hast.Beim Verlassen des Blocks sind die lokalen Variablen mitsamt deinen Berechnungsergebnissen Geschichte. Nimm die floats davor weg damit die Werte deiner Berechnung den richtigen Variablen zugewiesen werden.

    Gruß void
    "Probleme kann man niemals mit derselben Denkweise lösen,
    durch die sie entstanden sind." (A. Einstein)
  • @d0nUt:
    Ich setze auch meist die Variablendeklarationen an den Anfang von Funktionen.
    Allerdings nur die,die ich auch wirklich in dem kompletten Scope brauche.
    Alles was nur lokal benötigt wird,wird auch lokal deklariert.
    Im aktuellen Fall z.B. Ueberstunden.
    Es gibt keinen Grund warum die Lebensdauer von Ueberstunden sich über die ganze main ziehen sollte.Ist ja nur nen lokal benötigtes Zwischenergebnis.
    Streng genommen bräuchte man Überstunden natürlich garnicht ist aber für die Lesbarkeit imho vorteilhaft.

    Gruß void
    "Probleme kann man niemals mit derselben Denkweise lösen,
    durch die sie entstanden sind." (A. Einstein)
  • omg ...
    mein system ist einfahc mal so abgestürtzt.. egal jetzt hab ichs fertig:

    Quellcode

    1. //**************************************************
    2. //************** Programm: main.cpp ****************
    3. //************ Aufgabe: Preisberechnung ************
    4. //****** Autor, Datum: Micha, Welter 13.11.06 ******
    5. //**************************************************
    6. #include <iostream.h>
    7. #include <iomanip.h>
    8. int main ()
    9. {
    10. float Stundenanzahl, Stundenlohn, Endgeld, Ueberstundenlohn, Ueberstunden, Ueberstundengehalt, Fahrkostenpauschale, Monatslohn;
    11. int Angestellt; //Definition aller Variablen
    12. cout.setf(ios::fixed);
    13. cout.precision(2); //2 Nachkommastellen anzeigen
    14. cout <<"Gearbeite Stunden: ";
    15. cin >>Stundenanzahl; //Eingabe der gearbeiteten Stunden
    16. cout <<"Stundenlohn: ";
    17. cin >>Stundenlohn; //Eingabe des Stundenlohns
    18. cout <<"\nF\201r Auszubildender die 0, F\201r Angestellter die 1 : "<<endl;
    19. cin >>Angestellt; //Abfrage, ob Angestellter oder Azubi
    20. if (Angestellt == 1)
    21. { Fahrkostenpauschale = 200; }
    22. else
    23. {
    24. if (Angestellt == 0)
    25. { Fahrkostenpauschale = 150; }
    26. else
    27. { cout <<"Falsche Eingabe, starten Sie das Programm erneut.";
    28. return 0; }
    29. } //Deklaration des Fahrpreises
    30. if (Stundenanzahl > 160)
    31. { Ueberstunden = Stundenanzahl - 160;
    32. Ueberstundenlohn = Stundenlohn / 2;
    33. Ueberstundengehalt = Ueberstunden * Ueberstundenlohn;
    34. Monatslohn = Stundenlohn * 160 + Ueberstundengehalt; } //Berechnung des Monatslohns inklusive des Überstundengehalts
    35. else
    36. { Monatslohn = Stundenlohn * Stundenanzahl;
    37. Ueberstundengehalt = 0;
    38. Ueberstundenlohn = 0; } //Berechnung des Monatslohns
    39. Endgeld = Monatslohn + Fahrkostenpauschale; //Berechnung des Endgelds
    40. cout <<"\n\nMonatslohn:"<<setw(28)<<Monatslohn<<" Euro"<<endl;
    41. cout <<"Davon \232berstundengehalt:"<<setw(15)<<Ueberstundengehalt<<" Euro"<<endl;
    42. cout <<"Fahrkostenpauschale:"<<setw(19)<<Fahrkostenpauschale<<" Euro"<<endl;
    43. cout <<"********************************************"<<endl;
    44. cout <<"Das Endgehalt betr\204gt"<<setw(18)<<Endgeld<<" Euro"; //Ausgabe der Beträge
    45. cout <<"\n\n";
    46. return 0;}
    Alles anzeigen



    vielen Dank für Eure Hilfe

    MFG Micha