Quersummenberechnung


  • Mod

    Signum schrieb:

    Wenn man das Ergebnis der Quersumme einfach ins Dezimalsystem umrechnen kann wäre mir schon geholfen!

    Nein, das ist nicht möglich, eine Quersumme zwischen Systemen umzurechnen. Entweder kannst du mit der Quersumme in 256 auch das machen was du was du mit der 10er-Quersumme machen willst, oder nicht.



  • sei doch nicht so dünnhäutig!



  • Signum schrieb:

    @bashar
    Versuche folgende Quersumme zu berechnen, ohne für magnitude integrale datentypen zu verwenden:

    void main(void)
    {
    unsigned char magnitude[5] = {0x7F, 0x88, 0x32, 0x46, 0x78};
    // Dezimal: 547745842808
    int size = sizeof(magnitude) / sizeof(magnitude[0]);
    int Your_Crossfoot = 0;
    int Correct_Crossfoot = 62; // 5+4+7+7+4+5+8+4+2+8+0+8
    unsigned char digit;
    
        // ...so gehts nicht!
        for(int i = 0; i < size; i++)
        {
            digit = magnitude[i];
            while(digit != 0x00)
            {
                Your_Crossfoot += digit % 10;
                digit /= 10;
            }
        }
        
        assert(Your_Crossfoot == Correct_Crossfoot);
    }
    

    Versteh ich nicht. Was hat dein Code mit irgendwas, das ich gesagt habe, zu tun? Du musst die ganze Zahl durch 10 teilen, nicht jedes Byte für sich.



  • Ich bin garantiert nicht dünnhäutig. Aber wenn dem Threadersteller eine Zeile der gescheiten Erläuterung zu aufwändig ist, behalt ich meine Lösungsansätze für mich 🕶



  • Bashar schrieb:

    Signum schrieb:

    @bashar
    Versuche folgende Quersumme zu berechnen, ohne für magnitude integrale datentypen zu verwenden:

    void main(void)
    {
    unsigned char magnitude[5] = {0x7F, 0x88, 0x32, 0x46, 0x78};
    // Dezimal: 547745842808
    int size = sizeof(magnitude) / sizeof(magnitude[0]);
    int Your_Crossfoot = 0;
    int Correct_Crossfoot = 62; // 5+4+7+7+4+5+8+4+2+8+0+8
    unsigned char digit;
    
        // ...so gehts nicht!
        for(int i = 0; i < size; i++)
        {
            digit = magnitude[i];
            while(digit != 0x00)
            {
                Your_Crossfoot += digit % 10;
                digit /= 10;
            }
        }
        
        assert(Your_Crossfoot == Correct_Crossfoot);
    }
    

    Versteh ich nicht. Was hat dein Code mit irgendwas, das ich gesagt habe, zu tun? Du musst die ganze Zahl durch 10 teilen, nicht jedes Byte für sich.

    ...na dann machs halt mal!



  • Heimelchen schrieb:

    Ich bin garantiert nicht dünnhäutig. Aber wenn dem Threadersteller eine Zeile der gescheiten Erläuterung zu aufwändig ist, behalt ich meine Lösungsansätze für mich 🕶

    ...wenn Dein Ansatz funzt, krigste 'n Lutscher 🙂



  • Bashar schrieb:

    Versteh ich nicht. Was hat dein Code mit irgendwas, das ich gesagt habe, zu tun? Du musst die ganze Zahl durch 10 teilen, nicht jedes Byte für sich.

    ja das versteh ich schon... wenn du python code im ansi c forum postest 😉

    @Signum dir wird hier sicher keiner ne bignum lib coden wär ja auch noch schöner! ist auch nicht so als gäbs das noch nicht...



  • Ach, du hast die Grundrechenarten noch nicht implementiert? Dann mach das erstmal, bevor du dir über die Quersumme Gedanken machst.



  • Signum schrieb:

    ...wenn Dein Ansatz funzt, krigste 'n Lutscher 🙂

    meine eltern haben immer gesagt ich darf von fremden keine süßigkeiten annehmen :p



  • Naja, hab jetzt nicht bis unendlich durchgetestet, aber bis 128 Bit funktioniert meine Lösung. Wenn ihr euch die mathematischen Grundsätze für Quersummen, Zahlensysteme und ExOr-Operationen anschaut, kommt ihr bestimmt auch drauf...
    Krieg ich den Lutscher auch per Post? Steh auf Lutscher!



  • Bashar schrieb:

    Ach, du hast die Grundrechenarten noch nicht implementiert? Dann mach das erstmal, bevor du dir über die Quersumme Gedanken machst.

    ???



  • Mal ganz nebenbei: Du machst ne Bignum-Klasse und postest im ANSI-C-Forum? Oder meinst du ein Struct?



  • Signum schrieb:

    Bashar schrieb:

    Ach, du hast die Grundrechenarten noch nicht implementiert? Dann mach das erstmal, bevor du dir über die Quersumme Gedanken machst.

    ???

    Wieso verlangst du sonst von mir, dass ich dir eine Division durch 10 schreibe? Das sollte schon gehen!



  • Bashar schrieb:

    Signum schrieb:

    Bashar schrieb:

    Ach, du hast die Grundrechenarten noch nicht implementiert? Dann mach das erstmal, bevor du dir über die Quersumme Gedanken machst.

    ???

    Wieso verlangst du sonst von mir, dass ich dir eine Division durch 10 schreibe? Das sollte schon gehen!

    ...damit Du das Problem verstehst!
    Also, probier es mal, die Quersumme aus dem gepostetem Code zu errechnen, OHNE integrale datentypen (byte, short int, long int,...)!

    void test_09(void)
    {
    unsigned char magnitude[5] = {0x7F, 0x88, 0x32, 0x46, 0x78}; // Dezimal: 547745842808
    int size = sizeof(magnitude) / sizeof(magnitude[0]);
    int Your_Crossfoot = 0;
    int Correct_Crossfoot = 62; // 5+4+7+7+4+5+8+4+2+8+0+8
    unsigned char digit;
    
        // ...your code!    
        assert(Your_Crossfoot == Correct_Crossfoot);
    }
    


  • wxSkip schrieb:

    Mal ganz nebenbei: Du machst ne Bignum-Klasse und postest im ANSI-C-Forum? Oder meinst du ein Struct?

    ...weder noch, ich suche einen Algo (siehe erstes posting des Threads)



  • Signum schrieb:

    wxSkip schrieb:

    Mal ganz nebenbei: Du machst ne Bignum-Klasse und postest im ANSI-C-Forum? Oder meinst du ein Struct?

    ...weder noch, ich suche einen Algo (siehe erstes posting des Threads)

    Und der soll in C verfasst sein und C++-Klassen verwenden, oder stehe ich auf dem Schlauch? 😉



  • Heimelchen schrieb:

    Naja, hab jetzt nicht bis unendlich durchgetestet, aber bis 128 Bit funktioniert meine Lösung. Wenn ihr euch die mathematischen Grundsätze für Quersummen, Zahlensysteme und ExOr-Operationen anschaut, kommt ihr bestimmt auch drauf...
    Krieg ich den Lutscher auch per Post? Steh auf Lutscher!

    ...na komm schon, lass mich nicht doof sterben. Vielleicht taugt der Ansatz
    ja wirklich was.
    ...und ja, wenn Du willst per Einschreiben 🙂



  • Signum schrieb:

    ...na komm schon, lass mich nicht doof sterben. Vielleicht taugt der Ansatz ja wirklich was.

    Manche Schulen unterscheiden beim Teilbarkeitstest durch 9 nicht zwischen der Quersumme, was nur die Summe der Ziffern ist und der Endquersumme der Quersummen, was dem Divisionsrest bei Division durch 9 entspricht.
    Ich schätze, er berechnet nur den Divisionsrest bei Division durch 9.



  • wxSkip schrieb:

    Signum schrieb:

    wxSkip schrieb:

    Mal ganz nebenbei: Du machst ne Bignum-Klasse und postest im ANSI-C-Forum? Oder meinst du ein Struct?

    ...weder noch, ich suche einen Algo (siehe erstes posting des Threads)

    Und der soll in C verfasst sein und C++-Klassen verwenden, oder stehe ich auf dem Schlauch? 😉

    ...welche funktionen werden denn wohl in C++ Klassen benutzt?
    Achtung: Hab in meinen Klassen mit den MFC Klassen NIX am Hut.
    Ich benutze memcpy(), strcpy() und alle anderen C funktionen wie in jedem anderen Programm, nur eben gekapselt. Wo ist da der Unterschied.
    Ausserdem suche ich hier einen Algorithmus, am besten in C implementiert.

    Zitat Wikipedia:
    "Ein Algorithmus (auch Lösungsverfahren) ist eine formale Handlungsvorschrift zur Lösung eines Problems oder einer bestimmten Art von Problemen in endlich vielen Schritten"

    Also nochmals:
    - Ich will keine Klasse
    - Ich will keine BigNum implementation
    - Ich will eine Lösung eines allgemenen Problems, wenn es eine solche gibt!



  • volkard schrieb:

    Signum schrieb:

    ...na komm schon, lass mich nicht doof sterben. Vielleicht taugt der Ansatz ja wirklich was.

    Manche Schulen unterscheiden beim Teilbarkeitstest durch 9 nicht zwischen der Quersumme, was nur die Summe der Ziffern ist und der Endquersumme der Quersummen, was dem Divisionsrest bei Division durch 9 entspricht.
    Ich schätze, er berechnet nur den Divisionsrest bei Division durch 9.

    ...also wenn Du mich meinst:
    Ich berechne nix. Aber das würde ich gerne!
    Wen ich erst mal soweit wäre, dann kann ich mir über die unterschiedlichen
    Interprätationen der Quersummen immer noch Gedanken machen.


Anmelden zum Antworten