Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 25
  1. #1
    Bugbear Wurm Avatar von lolly
    Registriert seit
    21.08.2008
    Beiträge
    258

    Standard Wo ist mein Fehler? C++

    Hey Leute,
    sorry für den doofen Threadtitel, mir ist kein besserer eingefallen.
    Das Problem ist folgendes:

    Wenn man alle Zahlen von 1 - 1000000 aneinanderreiht, und aus der dann entstehenden Zahl die Quersumme nehmen will, was ist das Ergebnis?
    Naja ich gebe zu, ich bin kein Mathejunky und habe deshalb die Aufgabenstellung genutzt um mein C++ ein bisschen zu verbessern. Ich schätze mein Stil ist grauenhaft und irgendwo muss ein Fehler in meinem Denken gewesen sein. Es wäre super nett wenn irgendwer mal über den Source guckt und vielleicht meinen Denkfehler entdeckt. Ich persönlich komme gar nicht mehr klar

    Code:
    #include <iostream>
    #include <math.h>
    
    int Ziffern(int zahl){
    
    int stellen = 0;
    	while(zahl > 0){
    
    		zahl /= 10;
    		stellen++;
    	
    	}
    return stellen;
    }
    
    int qsum(int zahl){
    
    	int stellen = 0, mod = 10,a = 0, b = 0, qsum = 0;
    	stellen = Ziffern(zahl);
    	while(stellen > 0){
    		a = (int)pow(mod,stellen);
    		b = (zahl % a) / (a/mod);
    		qsum += b;
    		stellen -= 1;
    	}
    
    return qsum;
    }
    
    int main(void){
    
    int i,a;
    i = 0;
    a = 0;
    	while(i < 1000000){
    		a += qsum(i);
    		i++;
    	}
    std::cout << a << std::endl;
    return 0;
    
    }
    Ich möchte keine Lösung für die Aufgabe, sondern eine Hilfestellung für den Quelltext.

    MfG
    lolly

  2. #2
    Master of Porn Avatar von sp1nny
    Registriert seit
    28.05.2007
    Beiträge
    533

    Standard

    Könntest du nochmals erläutern wie genau die Aufgabe lautet? Die wird mir nicht wirklich klar. Desweiteren könnte der Typ Int zu klein werden, was zu Problemen führen wird und du hast wirklich einen sehr "merkwürdigen" Stil.

    Beispiele:
    - keine Funktionsprototypen, sondern Funktionen über der Main Funktion
    - while-Schleifen bei denen For-Schleifen viel besser passen würde
    ...und und und.

    Ich würde dir empfehlen ein Buch zu kaufen und dir dann eine ordentlichen Stil anzugewöhnen. Insgesamt hilft ein Buch auch für viel besseres Verständnis.
    XMPP: sp1nny @ exploit.im
    MAIL: sp1nny @ tuta.io

    PGP:

    Wir müssen wissen — wir werden wissen.


  3. #3
    Bugbear Wurm Avatar von lolly
    Registriert seit
    21.08.2008
    Beiträge
    258

    Standard

    Ja sorry^^ Habe seit >1Jahr kein C++ mehr geschrieben und dachte ich schaus mir mal wieder an...

    Also du schreibst alle Zahlen von 1-1000000 aneinander ohne Punkt und Komma.
    123456789101112...1000000
    Und nimmst daraus die Quersumme. Ich lasse in der Funktion qsum jedes mal die Quersumme einzeln berechnen gerade aus dem von dir genannten Problem mit der Größe des Integer.

    Ich hoffe die Erklärung war besser.

  4. #4
    Stanley Jobson Avatar von GregorSamsa
    Registriert seit
    23.08.2008
    Beiträge
    729

    Standard

    Ich verstehe gerade nicht so ganz die Aufgabe, wie sp1nny schon sagte.

    Und was genau rechnest du da? Das Ergebnis wäre 50000 - wenn ich mich gerade nicht Vertue.

    Du kannst mithilfe der Gauß'schen Summenformel alle Zahlen von 1-1000000 addieren, und dann durch 1000000 teilen. Das ist doch einfacher... Oder?

    //Edit: Sorry, ich hab gepostet während du gepostet hast ^^

    Ich hatte mal eine ähnliche Aufgabenstellung - die Lösung weiß ich nicht mehr, aber du konntest das "Problem" logisch lösen und nicht mit Mathe. Denk nochmal drüber nach, wie die bloße Anordnung der Zahlen sich zueinander verhält...

  5. #5
    Bugbear Wurm Avatar von lolly
    Registriert seit
    21.08.2008
    Beiträge
    258

    Standard

    Ich glaube die Gauß'sche Summenformel ist nicht ganz passend, oder ich bin noch ein wenig durcheinander. Ich habe das Ganze mal anhand der Zahlen von 1-10 durchgespielt. Ich addiere alle zahlen und erhalte 55 teile das durch 10 und habe 5... meine gesuchte Zahl war aber 46.

    Oder drehe ich grad komplett durch?

  6. #6
    Master of Porn Avatar von sp1nny
    Registriert seit
    28.05.2007
    Beiträge
    533

    Standard

    Ich habe hier mal ein Beispiel gemacht wie ich Quersummen bilden würde ( keine Ahnung was du für eine Akrobatik machst ):

    Code:
    #include <iostream>
    using namespace std;
    
    //--------------------------------------------------------------------------
    
    int csum(int);
    
    //--------------------------------------------------------------------------
    
    int main(void){
    
        int iNumber;
    
        cout << "Bitte eine Zahl eingeben zu der die Quersumme berechnet werden soll!" << endl;
        cout << "Zahl: " ;
    
        if(!(cin >> iNumber))
            exit(1);
    
        cout << "\n\nDie Quersumme von " << iNumber << " ist : " << csum(iNumber) << endl;
    
        cin.ignore();
        cin.get();
    
        return 0;
    }
    
    //--------------------------------------------------------------------------
    
    int csum(int iNumber){
        
        int iChecksum = 0;
    
        do{
            iChecksum += iNumber % 10;
            iNumber /= 10;
        }while(iNumber > 0);
    
    return iChecksum;
    }
    Geändert von sp1nny (07.04.2010 um 23:33 Uhr)
    XMPP: sp1nny @ exploit.im
    MAIL: sp1nny @ tuta.io

    PGP:

    Wir müssen wissen — wir werden wissen.


  7. #7
    Stanley Jobson Avatar von GregorSamsa
    Registriert seit
    23.08.2008
    Beiträge
    729

    Standard

    Nene, ich hatte geschrieben, während lolly gepostet hat - daher hab ich das "richtige" nicht mitbekommen.. ^^

    Man beachte meinen Edit...

  8. #8
    Anfänger Avatar von rogger
    Registriert seit
    21.03.2009
    Beiträge
    17

    Standard

    So wie ich dem Fragensteller verstehen geht es eher um ein aneinanderreihen á la String ( "1" + "2"= "12" ) und kein addiren.
    deswegen würde ich eher sowas mit vorschlagen:
    python (ungetestet):
    Code:
    grossezahlstr=""
    for i in range(0,100000):
         grossezahlstr+=str(i)
    grossezahl=int(grossezahlstr)
    quersumme=qsum(grossezahl)
    ich bin doch einfach python fan

    //edit
    wobei mir gerade noch einfällt, dass es vielleicht bei sehr grossen Zahlen schneller geht wenn man in der schleife die quersummer der einzelnen Zahl berechnet und aufaddiert so muss man nicht die quersummer von der großen Zahlberechnen, wobei das ja eigentlich auch keine großen unterschied ausmachen müsste...
    ich glaube es ist heute schon etwas zu spät für Matheakrobatik...
    weil so ganz sicher bin ich mir jetzt da auch nicht
    Geändert von rogger (07.04.2010 um 23:41 Uhr)

  9. #9
    Master of Porn Avatar von sp1nny
    Registriert seit
    28.05.2007
    Beiträge
    533

    Standard

    Und wie bildet man Quersummen ohne zu addieren?
    Von der langen Zahl soll dieser nämlich gebildet werden.
    XMPP: sp1nny @ exploit.im
    MAIL: sp1nny @ tuta.io

    PGP:

    Wir müssen wissen — wir werden wissen.


  10. #10
    Anfänger Avatar von rogger
    Registriert seit
    21.03.2009
    Beiträge
    17

    Standard

    @sp1nny bezieht sich deine Antwort auf meinen Post?
    weil ich ja nur die Quersummen funktion aufrufe ich habe ja jetzt keine selber geschrieben.

    aber ich finde so eine Aufgabenstellung ist einfach prädestiniert dazu in Python umgesetzt zu werden...

Seite 1 von 3 123 LetzteLetzte

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •