ich habe deinen vorschlag ausprobiert. anscheinend sind meine anderen funktionen nicht dafür geeignet. - das ergebnis stimmt fast nie.
ich gebe mal die weiteren fkts mit, vlt versteckt sich dort ein fehler ( ich konnte keinen finden, da die fkts an sich ihren dienst ordnungsgemäß erfüllen)
-----------------------------------------------------------------------------------------------------
Delphi-Quellcode:
function summe(a,b:ansistring):ansistring;
var i,l:longint;
u:longint;
begin
//mit Nullen auffüllen:
l:=length(a);
while l<length(b) do
begin
a:='0'+a;
l:=l+1;
end;
l:=length(b);
if length(a)>length(b)
then
while length(a)>length(b) do
begin
b:='0'+b;
l:=l+1;
end
else
if length(b)>length(a)
then
while length(b)>length(a) do
begin
a:='0'+a;
l:=l+1;
end;
u:=0;
//Maximallänge festlegen
if length(a)>=length(b)
then i:=length(a)
else i:=length(b);
while i>=1 do
begin
//addition a+b+u
result:=inttostr((strtoint(a[i])+strtoint(b[i])+u)mod 10)+result;
//berechnung u
u:=(u+strtoint(a[i])+strtoint(b[i]) )div 10;
i:=i-1;
end;
i:=1;
result:=inttostr(u)+result;
a:=result;
//führende '0' löschen
while a[1]='0' do
delete(a,1,1);
result:=a;
end;
function differenz(a,b:ansistring):ansistring;
var u,i,j,la,lb:longint;
c:ansistring;
begin
//zwei gleiche Zahlen:
if a=b
then result:='0'
else
//a>b?
if (vergleich(a,b)<>0 )and(a<>b)
then
begin
showmessage('Subtraktion nicht möglich.');
exit;
end
else
begin
//initialisieren
result:='';
la:=length(a);
lb:=length(b);
//anfangsübertrag setzen
u:=0;
j:=1;
//mit nullen füllen
if la<lb
then
while la<lb do
begin
a:='0'+a;
la:=la+1;
end
else if lb<la
then
while length(a)>length(b) do
begin
b:='0'+b;
lb:=lb+1;
end;
//subtraktion beginnen - vgl. schriftliches rechnen
i:=length(b);
//von vorne nach hinten
while i>=1 do
begin
//übertrag?
if u=0
then
begin
//neuen übertrag setzen
if strtoint(a[i])<strtoint(b[i])
then u:=10
else u:=0;
// nächste stelle des ergebnisses berechnen
result:=inttostr((strtoint(a[i])+u-strtoint(b[i]))mod 10)+result;
end
else
begin
//wenn übertrag vorhanden:
if strtoint(a[i])<strtoint(b[i])+1
then u:=10
else u:=0;
//bei der nächten stelle eines subtrahieren,da übertrag; einerstelle zum ergebnis
//hinzufügen
result:=inttostr((strtoint(a[i])+u-1-strtoint(b[i])mod 10))+result
end;
i:=i-1;
end;
//führende nullen löschen
c:=result;
while c[1]='0' do
delete(c,1,1);
result:=c
end;
end;
[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]