Autor Beitrag
Bloomquist
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Do 20.01.11 16:20 
Hallo,

da dies mein erstes Posting ist, hier kurz eine Vorstellung.

Mein Name ist Björn und bin 15 Jahre alt.

Ein paar Bekannte und ich sind eigentlich eher im Bereich der "Filmproduktion" (wir machen kleinere Filmchen, inkl. 3D-Animation, Sound, usw.) aktiv.
Da ein Mitglied unserer Gruppe (welcher für die Programmierung von Tools und Expressions verantwortlich war) leider ausscheiden musste, wurde ich verdonnert, da ich mich schon länger scripte, bzw. programmiere (ist übertrieben ;) hatte früher in ARexx und etwas in Delphi gespielt, wobei dort eher zusammengeklickt).

Deshalb beginne ich nun von vorne und zwar mit C# (weil wir ein paar kleinere Tools benötigen).

In einer Hausaufgabe ;) bekamen wir die Aufgabe, ein kleines Tool zu schreiben, welches uns einen gegebenen Rabatt in Prozent ausrechnet.
Hierbei war eigentlich nur die Bedingung vorgegeben, dass Falscheingaben abgefangen werden.

Dies ist mein fertiges Programm, ich habe es schon abgegeben und ein ok bekommen (wurde nicht benotet):

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:
45:
46:
47:
48:
do
            {
                double dblOriginal;
                do
                {
                    Console.Write("Bitte geben Sie den ursprünglichen Preis ein: ");
                    if (double.TryParse(Console.ReadLine(), out dblOriginal))
                        break;
                    else
                        Console.WriteLine("\nFalsche Eingabe. Geben Sie eine Zahl ein!\n");
                }
                while (true);

                double dblEndpreis;
                do
                {
                    Console.Write("Bitte geben Sie den bezahlten Preis ein: ");
                    if (double.TryParse(Console.ReadLine(), out dblEndpreis))
                        break;
                    else
                        Console.WriteLine("\nFalsche Eingabe. Geben Sie eine Zahl ein!\n");
                }
                while (true);

                double dblErgebnis;
                if (dblEndpreis < dblOriginal)
                {
                    dblErgebnis = Berechne(dblOriginal, dblEndpreis);
                    Console.WriteLine("\n==========================================\n");
                    Console.WriteLine("Sie haben {0:F2}% Nachlass erhalten.", dblErgebnis);
                    break;
                }
                else
                {
                    Console.WriteLine("\nDer eingegebene Endpreis muss kleiner als der Originalpreis sein!");
                    Console.WriteLine("Berechnen Sie bitte neu!\n");
                }
            }
            while (true);
            
            Console.ReadLine();

        }

        static double Berechne(double dblOriginal, double dblEndpreis)
        {
            return 100 - (dblEndpreis * 100 / dblOriginal);
        }


Meine Frage:

Mir gefällt das Ganze mit den 3 Schleifen nicht so ganz. Irgendwie stelle ich mir vor, dass es bestimmt besser geht.

Könntet ihr mir bitte ein paar Tipps für effizientere Programmabläufe geben?

Ich werde in der näheren Zeit wohl mehrere Tools schreiben müssen, welche vom Ablauf her ähnlich aufgebaut sein werden (natürlich nicht so klein wie dieses).


Vielen Dank.

Björn
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 20.01.11 16:41 
Hi,

dein Code sieht schonmal sehr übersichtlich aus.
Du könntest natürlich die Schleife in eine eigene Methode auslagern, z.B.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
double ReadValue(string sText)
{
    double dbl;

    while(true// anstatt do-while-Schleife, da es hier keinen Unterschied macht -)
    {
        Console.Write(sText);
        if (double.TryParse(Console.ReadLine(), out dbl))
             break;
        else
             Console.WriteLine("\nFalsche Eingabe. Geben Sie eine Zahl ein!\n");
    }

    return dbl;
}

Und Aufruf dann einfach so
ausblenden C#-Quelltext
1:
2:
3:
double dblOriginal = ReadValue("Bitte geben Sie den ursprünglichen Preis ein: ");

double dblEndpreis = ReadValue("Bitte geben Sie den bezahlten Preis ein: ");


Als generellen Tipp kann ich dir noch das EVA-Prinzip nahelagen, d.h. der Trennung von Eingabe, Verarbeitung und Ausgabe.
Für die Berechnung (Verarbeitung) hast du ja schon eine eigene Methode erstellt, und meine ReadValue-Methode entspricht dann der Eingabe, dann fehlt nur noch die Ausgabe als eigene Methode zu erstellen.
Bei komplexeren Programmen solltest du dann auch versuchen, eigene Klassen zu erstellen und die Funktionalität dorthin auszulagern (anstatt nacher eine große Main-Methode zu haben).

Viel Erfolg weiterhin...