AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Exakte Addition langer Zahlen

Ein Thema von ginimausi · begonnen am 19. Mär 2009 · letzter Beitrag vom 25. Mär 2009
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    
ginimausi

Registriert seit: 22. Feb 2009
15 Beiträge
 
#1

Exakte Addition langer Zahlen

  Alt 19. Mär 2009, 14:13
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]
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Exakte Addition langer Zahlen

  Alt 19. Mär 2009, 14:18
Du brauchst einen Implementierung für große Zahlen. Such mal nach BigInt (z.B. aus DEC)
Markus Kinzler
  Mit Zitat antworten Zitat
mr_emre_d
(Gast)

n/a Beiträge
 
#3

Re: Exakte Addition langer Zahlen

  Alt 19. Mär 2009, 14:21
mkinzler:
Ich dachte mir, das Ziel sei, es selbst zu machen ?

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

MfG
  Mit Zitat antworten Zitat
Benutzerbild von Billa
Billa

Registriert seit: 11. Aug 2003
237 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: Exakte Addition langer Zahlen

  Alt 19. Mär 2009, 14:22
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.....
Gruß Billa

Nur weil ich paranoid bin, heißt das nicht, daß die da draussen nicht hinter mir her sind....
  Mit Zitat antworten Zitat
ginimausi

Registriert seit: 22. Feb 2009
15 Beiträge
 
#5

Re: Exakte Addition langer Zahlen

  Alt 19. Mär 2009, 14:30
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?
  Mit Zitat antworten Zitat
Benutzerbild von Billa
Billa

Registriert seit: 11. Aug 2003
237 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: Exakte Addition langer Zahlen

  Alt 19. Mär 2009, 14:34
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 ...
Gruß Billa

Nur weil ich paranoid bin, heißt das nicht, daß die da draussen nicht hinter mir her sind....
  Mit Zitat antworten Zitat
mr_emre_d
(Gast)

n/a Beiträge
 
#7

Re: Exakte Addition langer Zahlen

  Alt 19. Mär 2009, 14:34
OK. Ich habe "meine Idee" ausprogrammiert und muss sagen, es funzt super

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

MfG
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#8

Re: Exakte Addition langer Zahlen

  Alt 19. Mär 2009, 14:39
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
  Mit Zitat antworten Zitat
ginimausi

Registriert seit: 22. Feb 2009
15 Beiträge
 
#9

Re: Exakte Addition langer Zahlen

  Alt 19. Mär 2009, 14:41
Ich versteh nicht so ganz was "manuell aufaddieren "
heist?^^
Wenn ich weiß was es heißt werde ich das ausprobieren
=)
Sry, bin blond
  Mit Zitat antworten Zitat
Benutzerbild von Billa
Billa

Registriert seit: 11. Aug 2003
237 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

Re: Exakte Addition langer Zahlen

  Alt 19. Mär 2009, 14:41
...ohne es auszuprobieren: könnte RESULT nicht eine Stelle mehr enthalten? Überlauf?

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

Nur weil ich paranoid bin, heißt das nicht, daß die da draussen nicht hinter mir her sind....
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:22 Uhr.
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