Addition großer Zahlen?
-
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".
-
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