AGB  ·  Datenschutz  ·  Impressum  







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

qwertz543221 kleine String-Math-Lib

Ein Thema von qwertz543221 · begonnen am 11. Jun 2009 · letzter Beitrag vom 14. Jun 2009
Antwort Antwort
Seite 3 von 3     123   
mkinzler
(Moderator)

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

Re: qwertz543221 kleine String-Math-Lib

  Alt 12. Jun 2009, 22:56
@qwertz543221: Die Aufforderung Delphi-Tags zu verwenden und den Code richtig einzurücken war ernst gemeint. Bitte mache dies in der Zukunft!
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#22

Re: qwertz543221 kleine String-Math-Lib

  Alt 13. Jun 2009, 13:57
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:
  //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
//a>b? <> (vergleich(a,b)<>0 )and(a<>b)
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
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#23

Re: qwertz543221 kleine String-Math-Lib

  Alt 14. Jun 2009, 07:09
Zitat von qwertz543221:
Hallo himitsu,
leider habe ich deinen letzten beitrag nicht ganz nachvollziehen können.
Bei der Verwendung der subtr. fkt zur durchführung einer division befindet sich das programm in einer endlosschleife.
lad dochj mal ein komplettest Testprojekt hoch, damit man das Schleifchen auch mal sehen kann ... eigentlich sollte da ja keines sein
Zitat:
Delphi-Quellcode:
//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
if a=b » brich ab, wenn gleich ... vergleich(a,b)<>0 bzw. a<>b » brich ab, wenn ungleich

also alles danach wird niemal abgearbeitet
Delphi-Quellcode:
if vergleich(a,b)<0
  then
Zitat von himitsu:
Mein Tipp: einen Breakpoint setzen und dann intensive Nutzung der Taste F7
auf die erste Zeile der Quotient-Funktion gehen F5 drücken,
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 von qwertz543221:
gibt es vlt einen effizienteren algorithmus zur modulo-bestimmung, dann bräuchte ich die division gar nicht?? - das ganze soll ja irgendwann für RSA dienen, bei dem die zahlen über alle normalen delphi-variablentypen hinausgehen.
Und das ist schon ein recht effektiver Algo dafür
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.
$2B or not $2B
  Mit Zitat antworten Zitat
qwertz543221
(Gast)

n/a Beiträge
 
#24

Re: qwertz543221 kleine String-Math-Lib

  Alt 14. Jun 2009, 12:42
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
Angehängte Dateien
Dateityp: rar taschenrechner_131.rar (189,1 KB, 6x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#25

Re: qwertz543221 kleine String-Math-Lib

  Alt 14. Jun 2009, 15:45
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
while vergleich(b, a) <= 0 do dieses hier
while vergleich(b, a) >= 1 do ich hoff das stimmt dann



standard:
0 a=b
-1 a<b
1 a>b

und zum Auswerten dann
Delphi-Quellcode:
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
du siehst ... so verhält sich dann a zu b wie "vergleich" zu 0

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
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#26

Re: qwertz543221 kleine String-Math-Lib

  Alt 14. Jun 2009, 19:23
also das sollte jetzt bei dir Laufen ...
Delphi-Quellcode:
function tform1.Quotient(a, b: AnsiString): AnsiString;
var
  c: Int64;
begin
  if b = '0then 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;
es gibt nur ein Problem ...
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? )

[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
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 12:37 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