Autor Beitrag
thixo
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 02.02.09 18:20 
Hi,

ich bräucht eure Hilfe :) (wie wohl ziemlich viele^^)

Ich mich in die IF Thematik selber eingelesen und mir auch eine Aufgabe gesucht, die wie folgt lautet:

Die Mitarbeiter der X-AG erhalten in diesem Jahr eine Prämie in Abhänigkeit ihres Vorjahreseinkommens und der Dauer ihrer Betriebszugehörigkeit. Folgende Prämiensätze sind hierzu gültig:

0 bis unter 2 Jahren 5% Prämie
2 bis unter 5 Jahren 10% Prämie
5 bis unter 15 Jahren 15% Prämie
15 und mehr Jahre 20% Prämie

Erstellen Sie ein Programm, das nach Eingabe des Vorjahreseinkommens und der Betriebszugehörigkeit die jeweilige Prämie ermittelt. Auf dem Bildschirm sollen die Eingabedaten und die Prämie ausgegeben werden.

So, ich habe nun das Programm soweit fertig geschrieben, habe aber leider ein kleines Problem.
Eine Variable wird nur als zugewiesene Variable erkannt, obwohl ich sie deklariert habe.

Hier mal mein Quelltext (Konsolenanwendung, VisualStudioExpress2008):

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Prämie
{
    class Program
    {
        static void Main(string[] args)
        {
            double prämie;

            Console.WriteLine("Berechnung der Prämie für Mitarbeiter der Firma X-AG");
            Console.WriteLine("====================================================");

            Console.Write("Bitte geben Sie Ihre Betriebszugehörigkeit an (in Jahren): ");
            double zugehörigkeit = Convert.ToDouble(Console.ReadLine());

            Console.Write("Bitte geben Sie Ihr Vorjahreseinkommen an (in Euro): ");
            double einkommenvorjahr = Convert.ToDouble(Console.ReadLine());

            if (zugehörigkeit > 0 && zugehörigkeit < 2)
                prämie = 0.05;

            else if (zugehörigkeit > 2 && zugehörigkeit < 5)
                prämie = 0.1;

            else if (zugehörigkeit > 5 && zugehörigkeit < 15)
                prämie = 0.15;

            else if (zugehörigkeit > 15)
                prämie = 0.2;

            double prämie1 = einkommenvorjahr * prämie;  // Fehler tritt hier bei prämie auf

            Console.WriteLine("\nSie erhalten eine Prämie über: {0} EUR", prämie1);

            Console.ReadKey();


        }
    }
}


Hatte das Problem schon bei einem Programm, das ich vorher geschrieben habe, konnte es auch da nicht finden und hab mich an einem neuen versucht, aber leider same shit as before :(

Ich danke euch schonmal für eure Hilfe.

Moderiert von user profile iconKha: Code- durch C#-Tags ersetzt
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Mo 02.02.09 18:40 
Hallo,

du hast die Variable deklariert, aber nicht zugewiesen (es kann sein, dass keiner der Bedinungen true ist und dann wird der Variable prämie nie was zugewiesen).

Deklaration: double prämie;
Zuweisung: prämie = 0;
Deklaration+Zuweisung: double prämie = 0;

Ausserdem stimmen die Bereiche nicht zu denen im Aufgabentext (5 bis .. heißt zugehoerigkeit >= 5).

Mein Vorschlag:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
double prämie = 0.05;

if (zugehörigkeit >= 15)
   prämie = 0.2;
else if (zugehörigkeit >= 5)
   prämie = 0.15;
else if (zugehörigkeit >= 2)
   prämie = 0.1;


Gruß Daniel

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
ilwaka
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 48

Win Vista
C# (VS 2008)
BeitragVerfasst: Mo 02.02.09 18:48 
Hallo
ok frage wurde beantwortet.
Aber darf ich dir noch einen Tipp geben
Wenn man keine gültige Double Zahl eingibt stürzt das Programm ab
Deswegen würde ich vorschlagen das du Tryparse nimmst.
Beispiel:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
double zugehörigkeit 
string zugehörigkeiteingabe=Console.ReadLine();
if(Int32.Tryparse(zugehörigkeiteingabe,out zugehörigkeit))
{
//da kommen die sachen hin und du wiederholst das mit dem gehalt
}

Hoffe du verstehst was ich meine
thixo Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 02.02.09 18:59 
Hi,
erstmal danke für eure antworten.

Mit dem double prämie = 0; hab ichs schon versucht, schuckt mir aber leider immer eine Prämie von 0 aus.

zu der Sache mit dem Tryparse:
Ähm, versteh ich leider nicht ganz, aber ich glaube es wäre ganz interessant zu wissen, was dieses tryparse macht bzw. für was das steht (sorry, bin ein totaler anfänger und lern das grad von grund auf ;) )

danke schon mal

:)
ilwaka
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 48

Win Vista
C# (VS 2008)
BeitragVerfasst: Mo 02.02.09 19:06 
Das Problem hatte ich auch.
Aber dank JüTho weis ich das man bei so einem Problem im Visual Studio F1 drückt.
:D :)
da müsste alles drinstehen. Wenn du es dann noch nicht verstehst,dann frag nochmal nach.
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mo 02.02.09 20:11 
user profile iconilwaka hat folgendes geschrieben Zum zitierten Posting springen:
Das Problem hatte ich auch.
Aber dank JüTho weis ich das man bei so einem Problem im Visual Studio F1 drückt.

So ist es! :D Es ist generell sehr nützlich, in der SDK-Doku/MSDN per Index zu einer Klasse die "Informationen zur" und "Alle Member" durchzulesen, was es alles so gibt.

Im konkreten Fall muss natürlich auch double.TryParse genommen werden, wobei die Zugehörigkeit nach den Bedingungen auch als int verwendet werden kann.

Gruß Jürgen
Raffa1989
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Di 03.02.09 10:06 
das erste was mir auffällt
es gibt ne prämie von 0 - 2 jahren und du hast
ausblenden C#-Quelltext
1:
2:
if (zugehörigkeit > 0 && zugehörigkeit < 2)
                prämie = 0.05;

also bei dir würde man jetzt nur bei 1 jahr zugehörigkeit ne prämie erhalten ^^
ausblenden C#-Quelltext
1:
2:
3:
4:
if (zugehörigkeit >= 0 || zugehörigkeit < 2)
{
  prämie = 0.05;
}

so wärs richtig ;)
ich kenne die if schleife so das nach der abfrage geschweifte klammern folgen und darin dann die anweisung :)
und du nimmst hier die und Anweisung d.h es müssen beide abfragen zutreffen in dem ersten bsp kannste die sogar nehmen aber ich finde die oder anweisung besser ^^
mfg Raffa
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Di 03.02.09 10:37 
user profile iconRaffa1989 hat folgendes geschrieben Zum zitierten Posting springen:
ich kenne die if schleife so das nach der abfrage geschweifte klammern folgen und darin dann die anweisung

if-Schleife :roll:

Beides ist richtig, sofern nur eine einzelne Anweisung folgt. Die geschweiften Klammern umfassen einen Block von einer oder mehreren Anweisungen. Bei einer einzelnen Anweisung können die Klammern entfallen; sie sind aber auch dann nützlich, weil die Zusammengehörigkeit und der Geltungsbereich von Variablen sofort deutlich werden und weil damit spätere Änderungen einfacher vorgenommen werden können.

user profile iconRaffa1989 hat folgendes geschrieben Zum zitierten Posting springen:
und du nimmst hier die und Anweisung d.h es müssen beide abfragen zutreffen in dem ersten bsp kannste die sogar nehmen aber ich finde die oder anweisung besser

Das ist falsch. Zum einen gibt es bei der Überlegung "und" gegenüber "oder" nicht die Entscheidung, was besser und was schlechter ist, sondern nur, was bei einer bestimmten Prüfung richtig und was falsch ist. Zum anderen geht es hier wirklich um "und": Bei "oder" wäre die erste Bedingung "> 0" auch erfüllt bei einer Zugehörigkeit von 20 Jahren, aber nach der Festlegung von 5% Prämie würden alle else-Zweige übersprungen.

Gerade bei solchen verschachtelten Abfragen muss wirklich genau überlegt werden:
  • Welche Abfrage sollte als erste kommen, welche danach und welche zuletzt?
  • Wie setze ich "größer" bzw. "kleiner" am besten ein?
  • Wo brauche ich "größer/gleich" bzw. "kleiner/gleich" und wo darf "gleich" nicht benutzt werden?
  • Wie berücksichtige ich einen Vorgabewert?

Insofern passt Daniels Vorschlag am ehesten (evtl. mit einem letzten else-Zweig für den default-Wert, aber das ist durch die Initialisierung nebensächlich).

Gruß Jürgen