AGB  ·  Datenschutz  ·  Impressum  







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

Automatisch Rechnen

Ein Thema von bixi400 · begonnen am 30. Mai 2003 · letzter Beitrag vom 30. Mai 2003
Antwort Antwort
Benutzerbild von bixi400
bixi400

Registriert seit: 19. Mai 2003
179 Beiträge
 
Turbo Delphi für Win32
 
#1

Automatisch Rechnen

  Alt 30. Mai 2003, 05:40
Hi!

Ich habe hier ein Edit.
Und ich möchte das man in das Edit eine Rechnung Schreiben kann (z.B. 542+48*(154-895)...).
Wie kann ich das machen???
(oder geht das überhaupt?)
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#2
  Alt 30. Mai 2003, 07:55
kuck dir mal die Funktionen POS und COPY und vielleicht DELETE an. Sollten dir weiter helfen.
Alexander
  Mit Zitat antworten Zitat
Mario

Registriert seit: 7. Apr 2003
567 Beiträge
 
Delphi 2006 Enterprise
 
#3
  Alt 30. Mai 2003, 09:23
Du kannst auch mal das probieren:
http://www.tmssoftware.com/calcedit.htm
Schöne Grüße,
Mario Noack
  Mit Zitat antworten Zitat
Benutzerbild von flomei
flomei

Registriert seit: 17. Jan 2003
Ort: Schieder-Schwalenberg
2.094 Beiträge
 
Delphi 2005 Personal
 
#4
  Alt 30. Mai 2003, 11:38
Du willst wahrscheinlich auch einen Taschenrechner schreiben, bei dem man alles in ein Edit eingibt und er anfängt zu rechnen. Das ist ganz schön kompliziert! Du musst den Term zerlegen und dann musst du ihm beibringen wie er z.B. mit Klammern umzugehen hat...
Sowas will ich auch machen aber das ist verdammt kompliziert und deshalb nach hinten in meiner To-Try List gerutscht.

MfG Florian
Florian Meier
... ist raus.
Vielen Dank für die Zeit mit euch!
http://www.flomei.de -- http://www.md5hash.de
  Mit Zitat antworten Zitat
Mario

Registriert seit: 7. Apr 2003
567 Beiträge
 
Delphi 2006 Enterprise
 
#5
  Alt 30. Mai 2003, 11:47
Das habe ich vor ner Weile mal geschrieben:
Delphi-Quellcode:
function ParseStr(Value: String): Double;

 function GetKlammerZuPos(SubValue: PChar): Integer;
 var KlammerCount: Integer;
 begin
  KlammerCount := 1;
  for Result := 0 {0 ist 1. Klammer auf} to Length(SubValue) -1
   do
    begin // for
     if (SubValue + Result)[0] = '(THEN inc(KlammerCount);
     if (SubValue + Result)[0] = ')THEN dec(KlammerCount);
     if KlammerCount = 0 THEN Exit;
    end; // for
  Raise Exception.Create('Die Klammer wurd nicht wieder geschlossen: '+SubValue);
 end;

Var iPos, jPos: Integer;
    modValue : String;

begin
 modValue := Value;
 WHILE Pos('(',modValue) > 0 DO
  BEGIN
   iPos := Pos('(',modValue);
   jPos := GetKlammerZuPos(Pchar(modValue) + iPos);
   modValue := Copy(modValue,0,iPos-1) +
               FloatToStr(ParseStr(Copy(modValue,iPos+1,jPos))) +
               Copy(modValue,iPos+jPos+2,9999);
  END;

 if (Pos('-',modValue) > 0) OR
    (Pos('+',modValue) > 0)
  then
   begin // strichrechnung
     iPos := Pos('-',modValue);
     IF iPos <> 0
      THEN
       BEGIN
        Result := ParseStr(Copy(modValue,0,iPos-1)) - ParseStr(Copy(modValue,iPos+1,9999));
        Exit;
       END;

     iPos := Pos('+',modValue);
     IF iPos <> 0
      THEN
       BEGIN
        Result := ParseStr(Copy(modValue,0,iPos-1)) + ParseStr(Copy(modValue,iPos+1,9999));
        Exit;
       END;
     Raise Exception.Create('Programmierfehler !');
   end; // strichrechnung

 if (Pos('/',modValue) > 0) OR
    (Pos('*',modValue) > 0)
  then
   begin // punktrechnung
     iPos := Pos('/',modValue);
     IF iPos <> 0
      THEN
       BEGIN
        Result := ParseStr(Copy(modValue,0,iPos-1)) / ParseStr(Copy(modValue,iPos+1,9999));
        Exit;
       END;

     iPos := Pos('*',modValue);
     IF iPos <> 0
      THEN
       BEGIN
        Result := ParseStr(Copy(modValue,0,iPos-1)) * ParseStr(Copy(modValue,iPos+1,9999));
        Exit;
       END;
     Raise Exception.Create('Programmierfehler !');
   end; // punktrechnung

 // keine Rechnung mehr zum Auflösen gewesen
 Result := StrToFloat(modValue);
end;
Es war nur mal ein wenig Spielerei und darum auch nie im echten Einsatz getestet. Aber Punkt vor Strich und Klammern sollten schon gehen...
Schöne Grüße,
Mario Noack
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:39 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