Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Addition zweier beliebig großer Zahlen (https://www.delphipraxis.net/3437-addition-zweier-beliebig-grosser-zahlen.html)

VeeJay 12. Mär 2003 15:59


Addition zweier beliebig großer Zahlen
 
Hi Leute,
leider brauche ich noch mehr Hilfe mit meiner Klausur.
Ich brauche einen Ansatz für diese Aufgabe, die mein Lehrer wahrscheinlich aus dem Delphi Kochbuch geklaut hat.

Es sollen zwei Zahlen mit beliebiger (aber gleicher) Stellenzahl addiert werden.( Erzeuge zB. zwei 100 stellige Zufallszahlen )
Wir speichern die Ziffern als 'char' mit den Einern zuerst jeweils in einem Keller.Beim Auskellern werden die Ziffern stellenrichtig addiert unter Berücksichtigung des Übertrages.


Wenn ihr ne Idee habt, wie man das hinkriegen kann, dann könnt ich die Hilfe gut gebrauchen.
Mein erste Idee war mit "div" und "mod" zu arbeiten, um die Einzelstellen zu in Zehner und Einer einzuteilen, aber ich bin schon beim Erzeugen der 100-Stelligen Zahlen gescheitert.

Danke! :spin:

Jan 12. Mär 2003 16:26

Hallo VeeJay,
Ich würde das Problem nach der Grundschul aditionsmethode machen:

Man wandle die beiden Zahlen in strings um, dann fängst du von ganz hinten an und addierst immer die jeweiligen Ziffern an der Stelle der schleifenvariable. Wenn mehr als 10 rauskommt, dann speicherst du eine 1 in einer variable, und addierst die dann beim nächsten Mal mit dazu.
Alles was bei der Addition der beiden Ziffern über 10 geht, bei 16 also 6 ist dann der neue Wert. Den speicherst d udann immer in einen neuen string an der selben Stelle. Und am Ende Wandelst du dann einfach den String wieder in einen Integer oder Longint um.
Gruß
Jan

[edit] ups, hatte das:
Zitat:

Wir speichern die Ziffern als 'char' mit den Einern zuerst jeweils in einem Keller.Beim Auskellern werden die Ziffern stellenrichtig addiert unter Berücksichtigung des Übertrages.
übersehen. Naja, vielleicht hilft es dir trotzdem weiter.
BB
Jan

RomanK 12. Mär 2003 16:33

Hoi
also wenn ich das richtig verstanden habe:
Nimm doch eine Forschleife:
Delphi-Quellcode:
for i:=1 to 100 do
begin
zahl1 := zahl1 + inttostr(random(9));
end;

Christian Seehase 14. Mär 2003 19:16

Moin VeeJay,

sollte so gehen:

Delphi-Quellcode:
var
  acNum1   : array [1..100] of char;
  acNum2   : array [1..100] of char;
  acResult : array [1..101] of char; // Das Ergebnis kann eine Stelle länger sein!
  bCarry  : byte;
  bDigit1  : byte;
  bDigit2  : byte;
  i       : integer;

begin
  // Zufällige einhunderstellige Zahlen erzeugen
  Randomize;
  for i := 1 to 100 do
  begin
    // ASCII Code von 0 bis 9 = 48 bis 57, deshalb + 48
    acNum1[i] := chr(Random(10)+48);
    acNum2[i] := chr(Random(10)+48);
  end;
  bCarry := 0; // Übertrag initialisieren
  for i := high(acNum1) downto low(acNum2) do
  begin
    // Ziffern auslesen
    bDigit1       := ord(acNum1[i])-48;
    bDigit2       := ord(acNum2[i])-48;
    // Addieren, aber nur die letzte Ziffer ins Ergebnis schreiben
    acResult[i+1] := chr(((bDigit1+bDigit2+bCarry) mod 10)+48);
    // ggf. den Übertrag auf 1 setzen
    bCarry       := ord((bDigit1+bDigit2+bCarry) > 9);
    // Variante:
    // bCarry       := (bDigit1+bDigit2+bCarry) div 10;
  end;
  // den Wert für die höchste Stelle setzen
  acResult[1] := chr(bCarry+48);
  ShowMessage('Zahl1: '+acNum1+#13#10+'Zahl2: '+acNum2+#13#10+'Summe: '+acResult);
end;
Ich hoffe es ist einigermassen verständlich.

Jan 14. Mär 2003 20:36

Was dann ja so ziemlich genau das ist, was ich vorgeschlagen hatte, nur als Code präsentiert :D
BB
Jan

Christian Seehase 14. Mär 2003 20:47

Moin Jan,

stimmt.
Da ich schon mal eine Bibliothek für grosse Zahlen angefangen hatte, hatte ich das nur schon, einigermassen, fertig vorliegen.

@VeeJay
Was ist eigentlich mit "Keller" gemeint?

Jan 14. Mär 2003 20:50

Zitat:

@VeeJay
Was ist eigentlich mit "Keller" gemeint?
Genau das hatte ich mich auch gefragt.
Keller kenne ich als Speicher bei theoretischer Befassung von Alphabeten, z.B. die Klammersetzung in Delphi.
Wenn ihr jetzt keinen Schimmer habt, wovon ich rede, dann ist das auch egal :]
Gruß
Jan

VeeJay 15. Mär 2003 09:44

Erstmal danke für die Antworten.
Also den Begriff "Keller" hab ich mir nicht selbst ausgedacht. Mein Info-Lehrer nennt eine dynamische Pointerkette, die aus aneinander gereiten Records besteht und nach dem LastInFirstOut Prinzip ausliest, Keller. Weil er denkt, in einem Keller holt man auch als erstes das raus, was man als letztes hereingelegt hat. Das liegt halt am nächsten zum Eingang.
Da er aber immer nur Keller sagt, kenn ich den richtigen Begriff nicht ;)

MFG
Tim

Hansa 15. Mär 2003 10:17

Zitat:

Zitat von VeeJay
...Da er aber immer nur Keller sagt, kenn ich den richtigen Begriff nicht.

Das heißt echt Keller, es gibt noch deutsche Wörter. Was heißt Keller eigentlich auf englich :?: :mrgreen:

sakura 15. Mär 2003 10:18

Zitat:

Zitat von Hansa
Was heißt Keller eigentlich auf englich :?: :mrgreen:

cellar bzw. basement, wobei letzteres aber auch eine bewohnbare Fläche sein kann.

...:cat:...


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:55 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz