none
methode gerechtfertigt? RRS feed

  • Frage

  • Hallo

    bei einem Testbeispiel

    wo wir eine methode schreiben mussten die die ziffernsumme bestimmt hab ich folgene methode geschrieben

           static int ziffernsumme(int zahl)
            {
                int x = 0, zs = 0, rest = 0;
                x = zahl;
                do
                {
                    rest = x % 10;
                    zs = rest + zs;
                    x = x - rest;
    
                    rest = x % 100;
                    x = x - rest;
                    rest = rest / 10;
                    zs = rest + zs;
    
                    rest = x % 1000;
                    x = x - rest;
                    rest = rest / 100;
                    zs = rest + zs;
                } while (x != 0);
                return zs;
            }

    der Lehrer hat mir 10% abgezogen von 100% , was ich sehr viel finde,dafür das ich bei der methode eine do while schleife habe.

    mit der schleife wollte ich nur bezwecken falls x != 0 ist das er das immer und immer wieder machen soll.

    natürlich wäre sie hier unnötig,aber sie führt trotzdem die gewünschte aufgabe , die ziffernsumme auszurechnen genauso aus wie wenn dafür keine schleife da wäre.

    Wollt ich fragen ob die 10% abzug gerechtfertig sind oder ob es doch etwas sehr streng war.

    ich weiß das mein der code nicht gut ist , aber erfüllt immerhin den zweck.

    Donnerstag, 12. Juni 2014 19:14

Antworten

  • Hallo,

    Mit Aussagen wie ich weiß das mein der code nicht gut ist , aber erfüllt immerhin den zweck. magst Du Dir zwar einreden, alles ist schon gut... Im richtigen Leben wirst Du früher oder später feststellen, das dem nicht so ist.

    Tatsache ist:

    Ein Abzug von 10 % wäre angemessen, wenn die Schleife nur nutzlos wäre. Aber Deine Schleife ist fehlerhaft und damit ist der Code falsch.

    foreach (int zahl in new int[] { 0, 1, 123, -123, 999, 9876, 54321 })
    {
    	Console.WriteLine("{0} => {1}", zahl, ziffernsumme(zahl));
    }
    Console.WriteLine("Der Kandidat hat 100 Punkte.");

    Anders ausgedrückt: Würde dieses Programm in Deinem Kopf ablaufen, würdest es endlos im Kreise laufen - Deine Punkte würdest Du gar nicht erfahren ;)

    Gruß Elmar

    P. S.: Du magst Orthografie und Grammatik für überflüssigen Kram halten, aber auch dabei forderst Du von den anderen Leistung, die Du selbst nicht zu erbringen gewillt bist ...

    Donnerstag, 12. Juni 2014 20:26
    Beantworter
  • Hallo,
    ich frage mich bei deinem Code eigentlich nur, was genau die Anforderungen waren. Solange die Zahlen nur Dreistellig sind, ist das kein Problem, bei größeren Zahlen scheitert deine Methode. Wenn also die Anforderung war...

    • ... nur maximal 3 Stellige Zahlen zu verarbeiten, dann ist die Schleife ein Fehler, da sinnlos.
    • ... die Anforderung war die Methode unabhängig von der Anzahl der der Ziffern zu erstellen, dann ist die Schleife zumindest ein Ansatz. Dann wäre allerdings der Inhalt nicht zu Ende gedacht und die Schleife würde wieder keinen Sinn ergeben. (Ok, je nach bewertung würdest du vielleicht trotzdem einen "Gnadenpunkt" bekommen, weil du weißt das eine Schleiufe da sein muss.

    Ich würde die Quersumme wie folgt berechnen:

    static int ziffernsumme(int zahl)
    {
        int summe = 0;
        while (zahl != 0)
        {
            summe += zahl % 10;
            zahl /= 10;
        }
        return summe;
    }

    Hier ist es effektiver while statt do...while zu benutzen. Denn wenn du 0 übergibst wird nicht erst dividierd, sondern gleich 0 zurück gegeben.


    Tom Lambert - C# MVP
    Bitte bewertet- und markiert Beiträge als Antwort. Danke.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Donnerstag, 12. Juni 2014 19:29
    Moderator

Alle Antworten

  • Hallo,
    ich frage mich bei deinem Code eigentlich nur, was genau die Anforderungen waren. Solange die Zahlen nur Dreistellig sind, ist das kein Problem, bei größeren Zahlen scheitert deine Methode. Wenn also die Anforderung war...

    • ... nur maximal 3 Stellige Zahlen zu verarbeiten, dann ist die Schleife ein Fehler, da sinnlos.
    • ... die Anforderung war die Methode unabhängig von der Anzahl der der Ziffern zu erstellen, dann ist die Schleife zumindest ein Ansatz. Dann wäre allerdings der Inhalt nicht zu Ende gedacht und die Schleife würde wieder keinen Sinn ergeben. (Ok, je nach bewertung würdest du vielleicht trotzdem einen "Gnadenpunkt" bekommen, weil du weißt das eine Schleiufe da sein muss.

    Ich würde die Quersumme wie folgt berechnen:

    static int ziffernsumme(int zahl)
    {
        int summe = 0;
        while (zahl != 0)
        {
            summe += zahl % 10;
            zahl /= 10;
        }
        return summe;
    }

    Hier ist es effektiver while statt do...while zu benutzen. Denn wenn du 0 übergibst wird nicht erst dividierd, sondern gleich 0 zurück gegeben.


    Tom Lambert - C# MVP
    Bitte bewertet- und markiert Beiträge als Antwort. Danke.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Donnerstag, 12. Juni 2014 19:29
    Moderator
  • Hallo,

    Mit Aussagen wie ich weiß das mein der code nicht gut ist , aber erfüllt immerhin den zweck. magst Du Dir zwar einreden, alles ist schon gut... Im richtigen Leben wirst Du früher oder später feststellen, das dem nicht so ist.

    Tatsache ist:

    Ein Abzug von 10 % wäre angemessen, wenn die Schleife nur nutzlos wäre. Aber Deine Schleife ist fehlerhaft und damit ist der Code falsch.

    foreach (int zahl in new int[] { 0, 1, 123, -123, 999, 9876, 54321 })
    {
    	Console.WriteLine("{0} => {1}", zahl, ziffernsumme(zahl));
    }
    Console.WriteLine("Der Kandidat hat 100 Punkte.");

    Anders ausgedrückt: Würde dieses Programm in Deinem Kopf ablaufen, würdest es endlos im Kreise laufen - Deine Punkte würdest Du gar nicht erfahren ;)

    Gruß Elmar

    P. S.: Du magst Orthografie und Grammatik für überflüssigen Kram halten, aber auch dabei forderst Du von den anderen Leistung, die Du selbst nicht zu erbringen gewillt bist ...

    Donnerstag, 12. Juni 2014 20:26
    Beantworter
  • Hallo Das Einlesen hat eine andere Methode übernommen und es sollen nur zahlen zwischen 0-999 sein , die wie gesagt Eine andere Methode übernommen hat Die Methode ziffernsumme sollte nur die ziffernsumme ausrechen Mit freundlichen Grüßen
    Freitag, 13. Juni 2014 04:07
  • Hi Ephaltes,

    wie du selbst geschrieben hast weißt, du das die Lösung nicht gut ist (Punkte über 80%), wenn überhaupt befriedigend (Punkte über 67%) oder eher ausreichend ( Punkte über 50%). Grundlegend ist ja die nutzlose Schleife ein offensichtlicher Mangel (5)( Punkt über 30%)

    Hier ist also eher die Frage, wie so dein Lehre die Lösung noch als gut interpretiert.  

    MFG

    Björn

    Freitag, 13. Juni 2014 14:18