Avatar billede supermichael Nybegynder
16. januar 2005 - 14:24 Der er 6 kommentarer og
1 løsning

lommeregnerlav string om til int resultat

Jeg er igang med at lave en lommeregner, og tænkte om der var en let måde at lave en string om til integer. Så vidt jeg ved virker StrToInt() kun når man skal lave en string men ene tal ('2354') om til integer.

Hvad skal jeg gøre for at lave en string som f.eks. '-4+5*(8+2)' om til en integer som skal blive resultatet?

Det virker jo fint hvis man bruger en integer variabel og sætter den til at være -4+5*(8+2), altså

  Sum := -4+5*(8+2);

Men hvordan får jeg udregningen fra en string og så til integer?
Avatar billede delphi Nybegynder
16. januar 2005 - 16:27 #1
Der er læssevis af den slags algoritmer på nettet.  Det er normen at man bruger Gentaget (Omvendt) Polsk Notation ((Reverse) Recurrent Polish Notation= RPN) til den slags.  Søg fx. på Google efter "Delphi RPN Source" og se hvad du får.  Fx. er der så vidt jeg lige kan se med et hurtigt kik på sitet http://mathmatrix.narod.ru/Algor.html en udemærkert forklaring samt noget Delphi source til en Calculator unit (den har jeg dog ikke hentet ned).

NIP
Avatar billede supermichael Nybegynder
17. januar 2005 - 08:24 #2
Jeg tænkte på om der ikke er nogen der vil give mig et kode eksempel?

Jeg har disse to variabler:

  Streng: string;
  Sum:    integer;

  Streng := '-4+5*(8+2)';
 
Det jeg vil er at finde en metode for at regne denne string om til integer, eller float. I hvert fald et resultat

  Sum := -4+5*(8+2);

Summen er dette vil være 46, men jeg kan ikke finde ud af hvordan jeg overføre værdien fra string til integer. Man kan jo ikke bruge StrToInt() da der er + - * og (). Hvilken funktion skal jeg bruge, eller hvad skal jeg gøre?

PS. Svar skal helst være kodeeksempler.
Avatar billede borrisholt Novice
17. januar 2005 - 13:07 #3
1)
  Download http://borrisholt.com/eksperten/parser.zip
2)
  prøv der her :

var
  Valid: Boolean;
  e: Extended;
begin
  e := GetExpr('4+3*2', Valid);
  if Valid then
    CalcEdit.Caption := FloatToStr(E);
end;


Jens B
Avatar billede supermichael Nybegynder
17. januar 2005 - 19:00 #4
Øhm.. zipfilen parser.zip er tom.. og jeg ved så ikke om det er derfor, men delphi kan ikke kende GetExpr.
Avatar billede nop Nybegynder
18. januar 2005 - 13:52 #5
http://www.eksperten.dk/spm/571979

Der er det hele.

Og jeg må indrømme at det er svært at bruge søgningen ordentligt.
Prøv at søge på "lommeregner".
Avatar billede borrisholt Novice
18. januar 2005 - 17:06 #6
Min firewall spiser den .... Skriv til Jens@Borrisholt.com og spørg efter parser.zip så skal du få et færdigt kørende ekspempel. Der kan regne ud hvad 2*3+4 er !!!

Jens B
Avatar billede supermichael Nybegynder
20. januar 2005 - 15:30 #7
Tak for svarende..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester