tutorials.de Buch-Aktion 05/2012
Seite 2 von 2 ErsteErste 12
Like Tree6Danke
ERLEDIGT
NEIN
ANTWORTEN
20
ZUGRIFFE
872
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #16
    Arvenius Arvenius ist offline Mitglied
    Registriert seit
    Jul 2011
    Beiträge
    13
    Also das mit dem Prüfen mache ich im Normalfall auch, indem ich die einzelnen Arrays abfrage. Allerdings wird der Code ein wenig zu unübersichtlich wenn ich das hier posten würde, deshalb beschränke ich mich hier aufs eigentliche Problem.
    Das mit der Zahl versteh ich nicht. Ich lese doch bei char einzelne Ziffern ins Arrays ein oder nicht? Da habe ich sie ja quasi schon zerlegt (was im ersten Teil ja auch super funktioniert hat, das Problem liegt ja eher an der Schleife).
    Geändert von Arvenius (19.07.11 um 23:03 Uhr)
     

  2. #17
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    cin kann auch Zahlen (mehrziffrig) gleich in eine int-Variable einlesen, die ja speziell für Zahlen gedacht ist.

    Als String hast du zwar alles schon ziffernweise, jedoch im Ascii (die Sache mit dem -48) und es können auch andere Sachen dabei sein. Buchstaben, die nicht dazugehören etc...
    cin überprüft die Zahl beim int-einlesen auch gleich, ob es wirklich eine Zahl ist.

    Falls du doch beim String bleibst (und auch sonst): Was ist an der Schleife das Problem?
    Statt zahl[0]+zahl[1]+... schreibst du eine Schleife, in der du zahl[x] immer zu einer Variable dazuaddierst (diese am Anfang auf 0 setzen)
     

  3. #18
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von Arvenius Beitrag anzeigen
    Also das mit dem Prüfen mache ich im Normalfall auch, indem ich die einzelnen Arrays abfrage.
    Damit kannst du aber nicht erkennen ob wirklich etwas eingelesen wurde. Zumal du das Array nicht initialisiert hast und somit zufällige Werte drin stehen.
    Zitat Zitat von Arvenius Beitrag anzeigen
    Allerdings wird der Code ein wenig zu unübersichtlich wenn ich das hier posten würde, deshalb beschränke ich mich hier aufs eigentliche Problem.
    Das mit der Zahl versteh ich nicht. Ich lese doch bei char einzelne Ziffern ins Arrays ein oder nicht? Da habe ich sie ja quasi schon zerlegt (was im ersten Teil ja auch super funktioniert hat, das Problem liegt ja eher an der Schleife).
    Ja, aber wenn du es als Zahl einliest sparst du dir die Überprüfung ob der Benutzer auch wirklich eine Zahl eingeben hat.

    Und in der Regel berechnet man die Quersumme einer Zahl mit Hilfe der Ganzzahldivision mit Rest.

    Um eine Schleife zu bauen, brauchst du dann nur 2 einfache Regeln:

    1. Quersumme von 0 ist 0.
    2. anderenfalls, Quersumme = Quersumme von zahl / 10 + zahl % 10.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  4. #19
    Arvenius Arvenius ist offline Mitglied
    Registriert seit
    Jul 2011
    Beiträge
    13
    Irgendwas stimmt aber doch an deiner Erklärung nicht. Es macht doch keinen Sinn eine Quersumme zu berechnen, indem ich die Quersumme benutze... Das wäre doch doppelt gemoppelt... außerdem les ich deinen Text so:
    (Quersumme der Zahl 1234 geteilt durch 10 = 1) + (zahl % 10 = 4) = 5...
    5 ist aber nicht die dezimale Quersumme von 1234 sondern 10.
    Vielleicht hab ich dich auch gänzlich falsch verstanden!?
     

  5. #20
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Hi

    das Ganze ist ja auch in einer Schleife bzw. rekursiv gedacht.

    Vielleicht wirds ja mit Code klarer:
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    
    int zahl = 1234;
    ...
    int x = 0;
    while (zahl != 0)
    {
        x += zahl % 10;
        zahl /= 10;
    }

    Gruß
     

  6. #21
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von Arvenius Beitrag anzeigen
    Irgendwas stimmt aber doch an deiner Erklärung nicht. Es macht doch keinen Sinn eine Quersumme zu berechnen, indem ich die Quersumme benutze... Das wäre doch doppelt gemoppelt...
    Doch, es macht sehr viel Sinn. Diese Art von (rekursiver) Definition ist auch in der Mathematik durchaus üblich (Stichwort Folgen).

    Um die Quersumme von 1234 zu berechnen:

    Quersumme(1234) = Quersumme(1234 / 10) + 1234 % 10 = Quersumme(123) + 4
    Quersumme(123) = Quersumme(12) + 3
    Quersumme(12) = Quersumme(1) + 2
    Quersumme(1) = Quersumme(0) + 1
    Quersumme(0) = 0
    Zitat Zitat von Arvenius Beitrag anzeigen
    außerdem les ich deinen Text so:
    (Quersumme der Zahl 1234 geteilt durch 10 = 1) + (zahl % 10 = 4) = 5...
    5 ist aber nicht die dezimale Quersumme von 1234 sondern 10.
    Vielleicht hab ich dich auch gänzlich falsch verstanden!?
    Allerdings.

    Wie man es in C iterativ implementieren kann, hat sheel ja bereits verraten. Man kann noch etwas optimieren, indem man die Bedingung etwas anpasst:

    1. Quersumme einer Zahl n ist gleich n, falls 0 <= n < 10
    2. anderenfalls (n > 10), wie oben

    Gruß
    Geändert von deepthroat (20.07.11 um 09:56 Uhr)
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

Ähnliche Themen

  1. Highscore
    Von ShadowDomE im Forum PHP
    Antworten: 1
    Letzter Beitrag: 01.06.10, 21:06
  2. Highscore
    Von knapper im Forum C/C++
    Antworten: 7
    Letzter Beitrag: 16.08.06, 07:09
  3. Lösung von einer Aufgabe
    Von SMoeller im Forum Java
    Antworten: 5
    Letzter Beitrag: 27.01.06, 15:00
  4. Highscore?
    Von ICEWeasel im Forum C/C++
    Antworten: 6
    Letzter Beitrag: 25.10.03, 00:39
  5. Highscore mit PHP?
    Von fraus im Forum PHP
    Antworten: 2
    Letzter Beitrag: 07.07.01, 20:35