![]() |
Re: qwertz543221 kleine String-Math-Lib
@qwertz543221: Die Aufforderung Delphi-Tags zu verwenden und den Code richtig einzurücken war ernst gemeint. Bitte mache dies in der Zukunft! :warn:
|
Re: qwertz543221 kleine String-Math-Lib
Die das letzte Quotient-Funktion entspricht etwa meiner ... nur etwas gekürzt
summe scheint schonmal richtig zu laufen Und kann es sein, daß zugfällig diese Meldung angezeigt wird? Denn dieses sollte immer "wahr" / True melden und auslösen, da hier A immer <> B ist.
Delphi-Quellcode:
//a>b? <> (vergleich(a,b)<>0 )and(a<>b)
//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 Ich vermute mal du wolltes da ein > und nicht <> verwenden. obwohl es bei dir eigentlich < sein müßte ... a<b, da dann ein negatives Ergebnis rauskommen täte. Und warum einmal Stringvergleich und zusätzlich per Funktion? Mein Tipp: einen Breakpoint setzen und dann intensive Nutzung der Taste F7 :angel: |
Re: qwertz543221 kleine String-Math-Lib
Zitat:
Zitat:
also alles danach wird niemal abgearbeitet
Delphi-Quellcode:
if vergleich(a,b)<0
then Zitat:
dann mit F7 in Ruhe die Funktion abarbeiten und dabei schauen was mit den ganzen Variablen passiert dafür gibt es unter Strg+Alt+W ein Fenster, wo man Variablennamen eintragen kann oder man höllt die Maus mal ein paar Sekündchen über eine Variable im Code und bekommt so ihren Inhalt angezeigt. Zitat:
gut, da es sich hier ja, aus Sicht des PCs um "alleinstehende" einzelne Dezimalzahlen handelt, müssen wir diese halt auch komplett behandeln und dann jeweils um eine ganze verschieben. Bei einer "rein" binären Lib, hätte man hier Bitweise gehen können und dann schön über shl die ganzen Bits verschieben können. Problem ist halt, daß soeine auf Strings aufbauende Lib nunmal nicht ganz mit dem Wort Effizienz vereinbar ist. |
Re: qwertz543221 kleine String-Math-Lib
Liste der Anhänge anzeigen (Anzahl: 1)
hallo, ich habe das projekt einmal als rar hochgeladen, dann kannst du es testen
vlt liegt es nur an einer kleinigkeit - das ist ja meistens so beim programmieren - oder ich habe deine vorschläge einfach falsch interpretiert. mfG |
Re: qwertz543221 kleine String-Math-Lib
OK, das kommt davon, wenn man bei seiner Vergleichsfunktion fernab von jeglichen Standards seine Rückgabewerte definiert ... hatte ganz übersehen, daß diese anders vergleicht.
mach mal aus dem
Delphi-Quellcode:
dieses hier
while vergleich(b, a) <= 0 do
Delphi-Quellcode:
ich hoff das stimmt dann
while vergleich(b, a) >= 1 do
standard: 0 a=b -1 a<b 1 a>b und zum Auswerten dann
Delphi-Quellcode:
du siehst ... so verhält sich dann a zu b wie "vergleich" zu 0
if vergleich(a, b) < 0 then a < b if vergleich(a, b) = -1 then
if vergleich(a, b) <= 0 then a <= b if vergleich(a, b) = 0 then a = b if vergleich(a, b) >= 0 then a >= b if vergleich(a, b) > 0 then a > b if vergleich(a, b) = 1 then if vergleich(a, b) <> 0 then a <> b oder man nutzt bei seiner Vergleichs-Funktion das TValueRelationship aus der Unit Types (wie vorher schonmal vorgeschlagen), dann fällt zusätzlich noch auf, daß auch sowas geht
Delphi-Quellcode:
if vergleich(a, b) = LessThanValue then a < b
if vergleich(a, b) <> GreaterThanValue then a <= b if vergleich(a, b) = EqualsValue then a = b if vergleich(a, b) <> LessThanValue then a >= b if vergleich(a, b) = GreaterThanValue then a > b if vergleich(a, b) <> EqualsValue then a <> b |
Re: qwertz543221 kleine String-Math-Lib
also das sollte jetzt bei dir Laufen ...
Delphi-Quellcode:
es gibt nur ein Problem ...
function tform1.Quotient(a, b: AnsiString): AnsiString;
var c: Int64; begin if b = '0' then System.Error(reDivByZero); Result := '0'; c := 0; while Length(b) < Length(a) do begin c := c + 1; b := b + '0'; // b := produkt(b, '10'); end; while c >= 0 do begin while vergleich(b, a) <> 0 do begin Result := summe(Result, inttostr(trunc(power(10, c)))); a := differenz(a, b); end; c := c - 1; Delete(b, Length(b), 1); // b := quotient(b, '10'); end; end; die Funktion summe rechnet falsch ... und zwar wenn man sie einzeln benutzt, dann 1+1=2 aber in der schleife 0+1=1 ... 1+1=21 ... 21+1=221 ..... da ich aber bei deiner Summenfunktion einfach nicht durchseh, mußt'e den Fehler da wohl selber finden (hat vielleicht was mit den gloablen Variablen zu tun? :gruebel: ) [add] Problem gefunden ... du hast in Summe das result nicht initialisiert:!: ein result:=''; vor der Berechnung liefert Abhilfe. und noch einen Tipp: das result wurde auch in anderen Funktionen nicht initialisert :zwinker: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz