Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Exakte Addition langer Zahlen (https://www.delphipraxis.net/131140-exakte-addition-langer-zahlen.html)

ginimausi 19. Mär 2009 14:13


Exakte Addition langer Zahlen
 
Hallo ihr da draussen!
Ich habe folgendes Problem.
Im Rahmen einer Projektarbeit is es meibne Aufgabe,
ein Programm in Delphi zu schreiben, welches zwei
natürliche Zahlen die man eingibt adddiert.
So weit so einfach, das schwierige dabei ist,
dass beide Zahlen eine Länge von 200
Stellen haben dürfen.
Der Rechner soll die exakte (addierte)
Zahl dann ausgeben.

Delphi-Quellcode:
procedure TForm4.Button1Click(Sender: TObject);
var x, y,z: real;
begin
x:=StrToFloat(Edit1.text);
y:=StrToFloat(Edit2.Text);
z:=x+y;
Listbox1.Items.Add(FloatToStr(z));


end;

Soweit hab ich das Programm jetzt,
es läuft auch bloß ab (10) Stellen addiert es die Zahlen nicht mehr genau,
es kommt eine Zahl 1,55457847E22 oder so heraus
(als Beispiel)

Meine Frage ist deshalb: Wie schreibe ich das Programm das die Zahlen 200 Stellen haben können?
Und dann der exakte Wert ausgegeben wird?

Vielen Dank im Voraus für eure Hilfe ;-)

[edit=mkinzler]Tag gefixt Mfg, mkinzler[/edit]

mkinzler 19. Mär 2009 14:18

Re: Exakte Addition langer Zahlen
 
Du brauchst einen Implementierung für große Zahlen. Such mal nach BigInt (z.B. aus DEC)

mr_emre_d 19. Mär 2009 14:21

Re: Exakte Addition langer Zahlen
 
mkinzler:
Ich dachte mir, das Ziel sei, es selbst zu machen ? :gruebel:

Ein (sehr blöder) Ansatz meinerseits wäre die Strings manuell aufzuaddieren :P

MfG

Billa 19. Mär 2009 14:22

Re: Exakte Addition langer Zahlen
 
So blöd ist die Idee von mr_emre_d doch gar nicht:

die beiden Zahlen "von Hand", also Stelle für Stelle von hinten addieren, den resultierenden "Einer" wegschreiben und mit dem "Überlauf" und der nächsten Stelle links fortfahren, bis Deine Ausgangszahlen keine Stellen mehr übrig haben. Selbst wenn es Datentypen gibt, der 200-stellige Ganzzahlen enthält, könnte der Aufgabensteller (Lehrer??) auf die Idee kommen, 500-stellige Zahlen haben zu wollen.....

ginimausi 19. Mär 2009 14:30

Re: Exakte Addition langer Zahlen
 
Würde es theoretisch so gehen(mit dem addieren per Hand),
dass ich die Zahlen in ein Array schreibe?
also jede Stelle der Zahl kommt in ein einzelnes Array-Teilfach?

Billa 19. Mär 2009 14:34

Re: Exakte Addition langer Zahlen
 
Kann man machen, aber Zeichenketten reichen eigentlich, da ja auch im String einzelne Zeichen mit einem Index angesprochen werden. Kleiner Tipp, um sich das Leben etwas leichter zu machen: Erstmal beide Zahlen auf die gleiche Länge bringen (vorangestellte "0"), dann spart man sich jede Menge Sonderfälle ...

mr_emre_d 19. Mär 2009 14:34

Re: Exakte Addition langer Zahlen
 
OK. Ich habe "meine Idee" ausprogrammiert und muss sagen, es funzt super :)

Gini: Versuchs mal, so zu machen, wie ich vorgeschlagen habe.

MfG

jfheins 19. Mär 2009 14:39

Re: Exakte Addition langer Zahlen
 
Du kannst auf die Ziffern bereits Array-mäßig zugreifen ;)=

Also ungefähr so:
Delphi-Quellcode:
zahl1 := Edit1.Text;
zahl2 := Edit2.Text;

while (zahl1.length < zahl2.length)
  zahl1 := '0' + zahl1;

while (zahl2.length < zahl1.length)
  zahl2 := '0' + zahl2;

setlength(Result, zahl1.length);
temp := 0;
carry := 0;


for i := zahl1.length downto 1 do
begin
  temp := strtoint(zahl1[i]) + strtoint(zahl2[i]) + carry;
  Result[i] := temp mod 10;
  carry := temp div 10;
end;

if carry > 0 then
  Result := inttostr(carry) + Result;
Edit: Diverse Verbesssungen :oops:

ginimausi 19. Mär 2009 14:41

Re: Exakte Addition langer Zahlen
 
Ich versteh nicht so ganz was "manuell aufaddieren "
heist?^^
Wenn ich weiß was es heißt werde ich das ausprobieren
=)
Sry, bin blond;-)

Billa 19. Mär 2009 14:41

Re: Exakte Addition langer Zahlen
 
...ohne es auszuprobieren: könnte RESULT nicht eine Stelle mehr enthalten? Überlauf?

SORRY! hatte nicht richtig gelesen: da steht ja schon " + 1"!!!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:59 Uhr.
Seite 1 von 5  1 23     Letzte »    

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