AGB  ·  Datenschutz  ·  Impressum  







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

Threads hier sinnvoll?

Ein Thema von theomega · begonnen am 17. Okt 2002 · letzter Beitrag vom 18. Okt 2002
 
Benutzerbild von theomega
theomega

Registriert seit: 18. Jun 2002
684 Beiträge
 
#7
  Alt 18. Okt 2002, 14: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
 


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 22:27 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 by Thomas Breitkreuz