Rechnen mit großen Zahlen

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

John hat geschrieben:Also ich meinte damit:
Nehmen wir an ich hätte die Zahl 7,6*10^2 im Editfeld stehen.
Wie könnte ich die in Extended einlesen? Also das er die Zahl richtig einliest.
jetzt verstanden?

John

Du suchst den String einfach nach dem '^'-Zeichen ab und interpretierst die Zeichen danach als die gesuchte Zahl.

Gruß, Euklid

John
Beiträge: 273
Registriert: Mo 30. Jul 2007, 19:55

Beitrag von John »

Ok das mit dem absuchen würde ich so machen:

Code: Alles auswählen

StringReplace(Meinevariablealsstring , '^','*power(10, ??)',[rfReplaceAll, rfIgnoreCase]);
aber wie nehme ich dann hier am besten die Zahl dahinter(Hochzahl) mit rein? mit lastpos? Oder gibt es eine sinvollere variante?

John

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

was soll das bringen das du im string das ^ durch power(10,??) ersetzt willst das dann dem benutzer anzeigen damit ers ausrechnen kann ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

John
Beiträge: 273
Registriert: Mo 30. Jul 2007, 19:55

Beitrag von John »

naja als ?? könnte man ja theoretisch davor nen string festlegen der die letzten beiden zwei, bis drei zeichen(falls ein -) des Edits einliest,
und dann danach hier einsetzt(als dieses ??) einliest. Aber da ist eben imho mein Problem und ich weiß nicht wie sinnvoll die lösung wäre.


John

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Ich würde den STring mit einer for-Schleife durchlaufen lassen, und nach dem ^ dann alle Zeichen in einen Exponent-String speichern. Mit StrToFloat o.ä. kannst du die Zahl dann umwandeln.

John
Beiträge: 273
Registriert: Mo 30. Jul 2007, 19:55

Beitrag von John »

Euklid hat geschrieben: ^ dann alle Zeichen in einen Exponent-String speichern. Mit StrToFloat o.ä. kannst du die Zahl dann umwandeln.
Und wie suche ich da am sinnvollsten? Mit der Funktion Copy würde ich jetzt vermuteten, bin mir aber nicht ganz sicher. :oops:
Ich weiß die Frage ist Noobig aber das gesamte "kapitel" ist etwas wo ich mich kaum auskenne

John

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Was ihr immer rumrätselt ist mir ein Rätsel ;-)
Ich hab doch gesagt, nimm nen Parser.
Der hier http://www.dow.wau.nl/aew/ParseExpr.html" onclick="window.open(this.href);return false; geht tipp topp.
Hab's eben getestet:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var MyParser: TExpressionParser;
var i:integer;
begin
 MyParser:=TExpressionParser.Create;
 i:=MyParser.AddExpression('(7.6*10)^2');
 Caption:=MyParser.AsString[i];
 MyParser.Free;
end;

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Aber mal eine ganz allgemeine Information:

Wenn du das i-te Zeichen eines Strings s in einem String/Char a gespeichert haben willst, geht das am Besten mit

Code: Alles auswählen

a:= s[i];
Auf diese Weise kannst du die "Zahl hinter dem ^" auslesen, wenn du nicht Theos Parser verwenden willst.

John
Beiträge: 273
Registriert: Mo 30. Jul 2007, 19:55

Beitrag von John »

Erstmal danke Theo! Mich interressiert aber trotzdem wie man es ohne Parser einbauen könnte. Werde zwar den Parser für das Programm benutzen aber mich interressiert trotzdem Euklids Variante. Rein aus Wissensdrang
Da die Zahl ja immer schwankt( es kann ja 5,676767676^2 sein oder 5,6^2 sein, und da könnte man nicht sagen das diese und jene(z.b. 2. oder 3. Ziffer) Ziffer die ist nach dem ^. Oder meintest du etwas anderes?

John

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Nun, du musst den String natürlich jeder mal vom neuen nach dem "^"-Zeichen absuchen. Nach dem Absuchen weißt du dann ja, an welcher Stelle zu es anfindest :)

Hilfreich ist für dich vielleicht noch der Befehl rightstr, schau mal in der Online-Hilfe...

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

John hat geschrieben:Erstmal danke Theo! Mich interressiert aber trotzdem wie man es ohne Parser einbauen könnte. Werde zwar den Parser für das Programm benutzen aber mich interressiert trotzdem Euklids Variante. Rein aus Wissensdrang
Es gibt keine andere Variante.
Was ihr macht, klappt ja höchstens für den immer gleichen Ausdruck.
Da könnt ihr gleich drei TEdit nehmen und den Rest hardcoden.

Zu Ende gedacht, werdet ihr auch bei einem Parser landen, und den gibt's schon.
Kannst dir ja mal die Sourcen von dem Expressionparser anschauen, um deinen Wissendsrang zu befriedigen. ;-)

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

theo hat geschrieben: Zu Ende gedacht, werdet ihr auch bei einem Parser landen, und den gibt's schon.
Kannst dir ja mal die Sourcen von dem Expressionparser anschauen, um deinen Wissendsrang zu befriedigen. ;-)
Ja, zuende gedacht kam Lexart bei raus ;) Mit selbstgebasteltem Parser...

Antworten