Benutzer mit den meisten Antworten
methode gerechtfertigt?

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.
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 ...
- Als Antwort markiert Tom Lambert (Koopakiller)Moderator Sonntag, 20. Juli 2014 01:21
-
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- Als Antwort vorgeschlagen Elmar BoyeEditor Donnerstag, 12. Juni 2014 20:26
- Als Antwort markiert Tom Lambert (Koopakiller)Moderator Sonntag, 20. Juli 2014 01:21
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- Als Antwort vorgeschlagen Elmar BoyeEditor Donnerstag, 12. Juni 2014 20:26
- Als Antwort markiert Tom Lambert (Koopakiller)Moderator Sonntag, 20. Juli 2014 01:21
-
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 ...
- Als Antwort markiert Tom Lambert (Koopakiller)Moderator Sonntag, 20. Juli 2014 01:21
-
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