![]() |
String als Rechenzeichen
Hi Leute,
ich habe mal ne komische Frage: Kann man Strings als Rechenzeichen benutzen? Also
Delphi-Quellcode:
versteht ihr was ich meine?
...
VAR s:STRING; N,n2:INTEGER; ... s:='*'; n2:=n(s[0])n; ... Irgendsowas? So das dann n*n raus kommt? Das wär echt praktisch Meine Suche war bisher erfolglos... Bitte um schnelle Antwort MfG Simon |
Re: String als Rechenzeichen
Du musst schon abfragen, um welches Zeichen es sich handelt und das dann selbst machen.
Delphi-Quellcode:
Du könntest das Ganz auch noch via einer case-Anweisung machen.
var
op : Char; begin op := '*'; if (op = '*') then n := n1 * n2 else if (op = '+') then n := n1 + n2 { usw.} end; Zitat:
|
Re: String als Rechenzeichen
genau das usw.
is das Problem... ich hab das nich mit VAR n sondern mit n1,n2,n3,n4,n5,..., bis zu n100 und * und + und - und / Und das soll alles dynamisch von User kommen können... da werden das schon paar 100 Zeilen Code |
Re: String als Rechenzeichen
Kurz: Nein, geht nicht
Lang: Hört sich so an als suchst du sowas wie Skripting. Sonst bleibt nur eine Fallunterscheidung wie gerade gepostet wurde. |
Re: String als Rechenzeichen
Irgendwas stimmt an deinem Konzept nicht.
Schreibe die Variablen doch in ein Array und gehe es in einer Schleife durch o.ä. 100 einzelne Variablen sind garantiert nicht notwendig.
Delphi-Quellcode:
var
n: array[1..100] of string; // bzw var n: array of string; SetLength(n, 100); for i := Low(n) to High(n) do begin // ... end; |
Re: String als Rechenzeichen
se geht nich so sehr um die anzahl der variablen, sondern um die rechenoperationen...
|
Re: String als Rechenzeichen
Zitat:
Usereingabe oder fester Ablauf? |
Re: String als Rechenzeichen
user (oder random^^)
aber dieser hat nur die wahl zwischen *,+,- und / |
Re: String als Rechenzeichen
Ok habs bisschen abgeändert...
Zahlen von 2 bis 5 (4 stück, keine doppelt, jede einmal) sollen mit den 4 Grundrechenarten !beliebig gerechnet werden... Bis z.B. 18 rauskommt... Also, da Punkt- vor Strich-Rechnung geht muss man erstmal ermitteln was das is //nich wundern, der quellcode is verwirrend... liegt daran, dass ich ihn geschrieben habe^^
Delphi-Quellcode:
dann die möglichkeiten innerhalb einer Rechnung:
function stri(char:char):BOOLEAN;
begin result:=false; if char='+'then result:=true; if char='-'then result:=true; if char='*'then result:=false; if char='/'then result:=false; end; function punk(char:char):BOOLEAN; begin result:=false; if char='+'then result:=false; if char='-'then result:=false; if char='*'then result:=true; if char='/'then result:=true; end;
Delphi-Quellcode:
und dann als timer im interval 1 abfragen:
function op(VAR c1,c2,c3:CHAR):INTEGER;
begin result:=0; if (stri(c1))and (punk(c2))and (stri(c3)) then result:=1; if (punk(c1))and (punk(c2))and (punk(c3)) then result:=2; if (stri(c1))and (stri(c2))and (stri(c3)) then result:=3; if (punk(c1))and (stri(c2))and (punk(c3)) then result:=4; if (punk(c1))and (punk(c2))and (stri(c3)) then result:=5; if (stri(c1))and (stri(c2))and (punk(c3)) then result:=6; end;
Delphi-Quellcode:
keine fehler oder so... nur falsch... ich bekomme: 4 2 5 3 + * + (oder auch 4 3 5 2 + * - )<- auch 17
VAR n1,n2,n3,n4:INTEGER; c1,c2,c3:CHAR; nc1,nc2,nc3:INTEGER; res:INTEGER; z1,z2,z3,z4,z5,z6:INTEGER; erg:INTEGER;
begin application.ProcessMessages; n1:=random(4)+2; n2:=random(4)+2; n3:=random(4)+2; n4:=random(4)+2; nc1:=random(3)+1; nc2:=random(3)+1; nc3:=random(3)+1; c1:=itc(nc1); c2:=itc(nc2); c3:=itc(nc3); res:=op(c1,c2,c3); if res=4 then // ausversehen 4 und 1 verstauscht begin if c1='+' then z1:=n1+n2; if c1='-' then z1:=n1-n2; if c3='+' then z2:=n3+n4; if c3='-' then z2:=n3-n4; if c2='*' then erg:=z1*z2; if c2='/' then erg:=round(z1*z2); end; if res=2 then begin if c1='*' then z1:=n1*n2; if c1='/' then z1:=round(n1/n2); if c2='*' then z2:=n3*z1; if c2='/' then z2:=round(z1/n3); if c3='*' then erg:=n4*z2; if c3='/' then erg:=round(z2/n4); end; if res=3 then begin if c1='+' then z1:=n1+n2; if c1='-' then z1:=n1-n2; if c2='+' then z2:=n3+z1; if c2='-' then z2:=z1-n3; if c3='+' then erg:=n4+z2; if c3='-' then erg:=z2-n4; end; if res=1 then begin if c2='*' then z1:=n2*n3; if c2='-' then z1:=round(n2/n3); if c1='+' then z2:=n3+z1; if c1='-' then z2:=n3-z1; if c3='+' then erg:=n4+z2; if c3='-' then erg:=z2-n4; end;// jetzt müsste es mit res=5 weitergehen, aber das funzt ja schon nich! if erg=18 then if (n1<>n2) and(n1<>n3) and (n1<>n4) and (n2<>n1) and(n2<>n3) and (n2<>n4) and (n3<>n1) and(n3<>n2) and (n3<>n4) and (n4<>n1) and(n4<>n2) and (n4<>n3) then begin timer1.Enabled:=false; listbox1.Items.Add(inttostr(n1)+' '+inttostr(n2)+' '+inttostr(n3)+' '+inttostr(n4)+' '+c1+' '+c2+' '+c3); end; end; Moment... 2*5=10; 10+4=14; 14+3=17... Wo ist mein Fehler? Kann da einer helfen? mfg simon p.s. wie immer... nich meckern... so programmier ich nunmal^^ [edit]auf die aufgabe kam ich weil jemand mir das rätsel gestellt hatte^^[/e] |
Re: String als Rechenzeichen
Was Du haben willst, ist ein 'Mathe-Parser', oder auch 'Evaluator'. Das ist ein Programm, das mathematische Ausdrücke in Stringform der Art "8+3*(5/2-1)" ausrechnen kann.
Das ist gar nicht so leicht, denn Du musst ja z.B. auch Klammern mitzählen usw. Such mal nach den Begriffen hier im Forum. Da wirst Du ziemlich schnell fündig. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:38 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