Addition großer Zahlen?



  • Warum das denn? Wenn ich 3 Zahlen addieren will, addier ich eben erst die ersten beiden Zahlen, und dann das Ergebnis mit der 3. Zahl. Dann hab ich immer nur 2 Zahlen addiert..



  • Eine MLU Informatik Hausaufgabe von Jopsi, aha:

    Beispiel:

    523,256 und 4652,895

    523+4652=5175

    1. Array: 256
    2. Array: 895
    3. Array: 151 --> Übertrag 1 --> 5175+1

    Ergebnis: 5176,151

    1. Ganzzahlteil vor dem Komma als long oder double einlesne und addieren
    2. Für 3 Arrays Speicher reservieren (malloc)
    3. Dezimalteil jeder Zahl in eine jeweiliges Array
    4. Schriftliches addieren der Dezimalstellen mit Hilfe der beiden Arrays
    5. Übertrag beachten
    6. Jeweilige Ergebnisse in 3. Array speichern
    7. Restübertrag auf Ganzzahlergebnis umlegen

    Umsetzung in C ist nicht schwer führt hier aber zu weit.

    Gruß



  • Danke erstmal!!!
    Ja ich studiere an der MLU Wirtschaftsmathematik. Leider brauch ich einen Info 1 Schein. Jedoch habe ich bisher nur in Turbo Pascal programmiert. Und das ist auch schon 2 Jahre her. Wir haben gleich nach der ersten Vorlesung Programmieraufgaben bekommen. Er ist Holländer und spricht mit leichtem Akzent. Er hat zwar auch ein Script doch das ist 260 Seiten lang und auf Englisch. Wirkt etwas demotivierend. 😞

    Aber wieder zur Aufgabe. Ich muss die Zahl also trennen. In vor und nach dem Komma. Das Problem ist jetzt das die Zahl unendlich lang sein soll. Muss ich das jetzt mit einer Schleifen machen, so daß er von Stelle zu Stelle geht und beide Zahlen addiert? (gegebenenfalls den Übertrag übernehmen)

    Danke auf jeden Fall für eure Hilfe.



  • 12polizei schrieb:

    Aber wieder zur Aufgabe. Ich muss die Zahl also trennen. In vor und nach dem Komma. Das Problem ist jetzt das die Zahl unendlich lang sein soll. Muss ich das jetzt mit einer Schleifen machen, so daß er von Stelle zu Stelle geht und beide Zahlen addiert? (gegebenenfalls den Übertrag übernehmen)

    Unendlich lang geht nicht. Sowas langes passt in deinen endlichen Rechner nicht rein. Beliebig lang klingt besser. Schleife, die Ziffernweise addiert und die
    Überträge mit nimmt klingt doch schon sehr fein. Musst nur aufpassen, dass du
    die richtigen Stellen addierst 🙂



  • Gibt es im Netz Tutorials zu C die man empfehlen kann? Bin nämlich noch ziemlicher anfänger. Befasse mich erst seit ca. zwei Wochen etwas mit C. Der Rest der Zeit geht für Algebra und Analysis drauf.



  • Scrol man n bissl die Seite rauf, rechts oben findest du den Link "Tuturials",
    gleich neben den "Büchern".

    http://www.c-plusplus.net/tutorials.htm



  • Er hat zwar auch ein Script doch das ist 260 Seiten lang und auf Englisch. Wirkt
    etwas demotivierend. 😞

    Du wirst dich noch wundern wenn du Info 2 bei Prof. Dr. Zimmermann hast. DAS Skript ist demotivierend ;).

    bye

    tt



  • Hallo,

    sitze an der gleichen Aufgabe. Die Erklärung klingt ja ganz logisch. Mir war aber nie klar welche Art von Zahlen gemeint sind. In der Spezifikation steht was von Dezimalstellen und unter Randbedingungen steht das die Zahlen ganz und >= 0 sind ???

    AUsgehend von einer Dezimalzahl mit Komma fangen die Probleme schon an. Wie ich das Komma finde krieg ich noch hin. Aber wie sage ich ihm das er die Zahlen vor dem Komma nach dort und die Zahlen danach nach hier speichern soll?

    Vielleicht gibts ja ein paar Ideen. Ist immer schwer für Neulinge die Funktionsweise eines Programms vorzustellen.

    Viele Grüße



  • TheTester schrieb:

    Er hat zwar auch ein Script doch das ist 260 Seiten lang und auf Englisch. Wirkt
    etwas demotivierend. 😞

    Du wirst dich noch wundern wenn du Info 2 bei Prof. Dr. Zimmermann hast. DAS Skript ist demotivierend ;).

    bye

    tt

    Zum Glück brauche ich nur Info 1. :p



  • Hab das Programm gerade von einem Bekannten bekommen. Versuche es gerade nachzuvollziehen.

    Jeder Anfang ist schwer.



  • HI, hab den Quelltext.
    Der Kompiler streikt aber bei einer bestimmten stelle.
    Kann mir aber nicht erklären warun er gerade dort streikt.
    [code]
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>

    int zero(char *string,const int len)
    {
    int stellen = (int)strlen(string);
    if (len-stellen ==0) return 0;
    memmove (&string[len-stellen], string, stellen+1);
    memset(string, '0', len-stellen);
    };

    int main()
    {
    char *string1, *string2, *temp;
    int len, i, carry, zahl1, zahl2;

    //Eingabe
    printf("\nlen: "); scanf("%d" , &len);
    string1 = malloc(len +2);
    string2 = malloc(len +2);
    printf("\nerste Zahl: "); scanf("%s", string1);
    printf("\nzweite Zahl: "); scanf("%s", string2);

    //anführende Nullen "setzen"
    zero(string1, len+1);
    zero(string2, len+1);

    //--------Addition-------
    carry=0;
    for (i=len; i>=0, i--); <--(HIER ZEIGT ER EINEN FEHLER AN)
    {
    zahl1 = string1[i]-`0`;
    zahl2 = string2[i]-'0';

    if (zahl1 +zahl2 + carry > 9)
    {string[i] = zahl1+zahl2+carry-10+'0'; carry=1;}
    else
    {string1[i] = zahl1+zahl2+carry+'0'; carry=0}
    };
    //anführende Nullen "löschen"

    temp = string1;
    while (*temp == '0') temp++;
    //Ausgabe
    printf("\nDas Ergebnis ist %s\n",temp);
    //Freigabe
    free(string1);
    free(string2);
    };

    Aber aus dem was ich jetzt schon mitbekommen habe müsste das doch stimmen.



  • Hab den Fehler schon gefunden. Hab statt einem Semikolon ein Komma gesetzt. Irgendwie sucht man nach größeren Fehlern. Aber jetzt bleibe ich bei nächsten Punkt hängen.
    zahl1 = string1[i]-'0'; <-----------------
    zahl2 = string2[i]-'0';

    if (zahl1 +zahl2 + carry > 9)
    {string[i] = zahl1+zahl2+carry-10+'0'; carry=1;}
    else
    {string1[i] = zahl1+zahl2+carry+'0'; carry=0}
    };
    //anführende Nullen "löschen"

    temp = string1;
    while (*temp == '0') temp++;
    //Ausgabe
    printf("\nDas Ergebnis ist %s\n",temp);
    //Freigabe
    free(string1);
    free(string2);
    };



  • Welche Fehlermeldung? Versuchs mal mit Code-Tags.

    Ansonsten hast du hinter deiner for schleife (wo der erste Fehler war) direkt ein Semikolon, und dann kommt ein Block in geschweiften Klammern, der sicherlich zu der for-schleife gehört. Da muss das Semikolon weg! Da sind eh insgesamt ein paar viele Semikolons (oder wie auch immer der Plural da sein mag):

    [cpp]for (i=len; i>=0, i--); <--(HIER ZEIGT ER EINEN FEHLER AN)
    {
    zahl1 = string1[i]-`0`; // die hochkommas da sind die falschen!
    zahl2 = string2[i]-'0'; // die sind besser!

    if (zahl1 +zahl2 + carry > 9)
    {
    string[i] = zahl1+zahl2+carry-10+'0'; carry=1;
    }
    else
    {
    string1[i] = zahl1+zahl2+carry+'0'; carry=0**;** // hier fehlt n semikolon
    }
    }; [/cpp]

    hab ma alles unterstrichen was falsch ist.

    EDIT: zumindest alles um die for-schleife rum 😉


Anmelden zum Antworten