Thema: Delphi Threads hier sinnvoll?

Einzelnen Beitrag anzeigen

Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#7
  Alt 18. Okt 2002, 13:21
warum der Code nicht läuft hat diesen Grund: ich habe ein Paar Zeilen rausgeschmissen, mit Funktionen, die noch nicht funktionieren oder die hier nicht relevant sind, vermutlich ist halt noch ein end zuviel oder zuwenig drine.
Der Code läuft ja, nur halt langsam. Aber evtl. habt ihr recht und es liegt an meiner TermtoReal funktion. Hier mal die gesamte Funktion:
Code:
function pos0(c:char;s:string):integer;
//pos0 findet das Zeichen "+","-" ... nicht innerhalb von Klammern
  var k,z:integer; //z:=Anzahl der Klammern
begin
  z:=0;
  for k:=1 to length(s) do Begin
    if s[k]='(' then inc(z);
    if s[k]=')' then dec(z);
    if (z=0) and (s[k]=c) then BEgin
      result:=k; //Treffer
      exit;
    ENd;
  End;
  result:=0; //nichts gefunden
end;


function anfang(s:string;c:char):string;
begin
  anfang:=copy(s,1,pos0(c,s)-1);
end;

function copyab(const s:string; const i:integer):string;
  begin result:=copy(s,i,length(s)-i+1) end;

function ende(s:string; c:char):string;
begin
  ende:=copyab(s,pos0(c,s)+1)
end;

function hoch(x,y:real):real;
begin
  result:=Power(x,y); //=e      = (e  ) =x
end;

function Wurzel(Value, WurzelNum: Extended): Extended;
begin

try
Result := Power(Value, 1 / WurzelNum)
except
result := 0;
end;

end;

function sinus( aWinkel : extended ) : extended;
begin
  Result:= sin( DegToRad(aWinkel) );
end;

function cosinus( aWinkel : extended ) : extended;
begin
  Result:= cos( DegToRad(aWinkel) );
end;

function tangens( aWinkel : extended ) : extended;
begin
  Result:= tan( DegToRad(aWinkel) );
end;

function TermToReal(s:string):real;
//  {Bisher '+' '-' '*' '/' Klammern und 'x' integriert,
//   d.h. gebrochen rationale Funktionen werden ausgewertet
begin
  //showmessage(s); Empfehlenswert zum Verständnis
  if pos0('+',s)>0  then result:=TermToReal(anfang(s,'+'))+TermToReal(ende(s,'+')) else
  if pos0('-',s)>0  then result:=TermToReal(anfang(s,'-'))-TermToReal(ende(s,'-')) else
  if pos0('*',s)>0 then result:=TermToReal(anfang(s,'*'))*TermToReal(ende(s,'*')) else
  if pos0('/',s)>0 then result:=TermToReal(anfang(s,'/'))/TermToReal(ende(s,'/')) else
  if pos0('^',s)>0 then result:=hoch(TermToReal(anfang(s,'^')),TermToReal(ende(s,'^'))) else
  if pos0('$',s)>0 then result:=wurzel(TermToReal(anfang(s,'$')),TermToReal(ende(s,'$'))) else
  if pos0('s',s)>0 then result:=sinus(TermToReal(ende(s,'s'))) else
  if pos0('c',s)>0 then result:=cosinus(TermToReal(ende(s,'c'))) else
  if pos0('t',s)>0 then result:=tangens(TermToReal(ende(s,'t'))) else

  if (s>'') and (s[1]='(') then Begin //Am Anfang und Ende eine Klammer
    s:=copy(s,2,length(s)-2);
    result:=TermToReal(s)
  End else
  if s='x' then result:=x else //oder TermToReal(Form1.Ex.text)
  result:=StrToFloat(s);
end;
der Code stammt alleridngs nicht von mir, sondern aus dem INet, wer einen besseren hat, nur her damit!
Dieser hier hat eh mehrer Fehler. So erkennt er z.b. "2x" nicht und auch ein Minus am Anfang führt zum Abbruch!
  Mit Zitat antworten Zitat