hi,
ich hab mal angefangen einen parser zu schreiben, der mir imaginär und realteil trennt. is zwar chaotisch und wahrscheinlich der am schlimmsten programmierte quellcode der hier bisher gepostet wird, aber ich kanns net besser und steh bisher noch dazu. falls ihr verbesserungsvorschläge habt, bin ich offen für alles.
Delphi-Quellcode:
function imaginaerteil_bestimmen(komplex:string):string;
var
imaginaer,real,merker,vz:string;
bimag:boolean;
i:integer;
offene_klammer:integer;
begin
offene_klammer:=0;
bimag := false;
real := '';
imaginaer :='';
vz:='+';
for i:=1to length(komplex)+1 do
begin
if (komplex[i] = '(')then
offene_klammer := offene_klammer +1;
if (komplex[i]=')')then
offene_klammer := offene_klammer -1;
if(offene_klammer =0) then //wenn an stelle i keine klammer offen ist
begin
if ((komplex[i] <> '+') and (komplex[i]<>'-')and (i<=length(komplex))) then //wenn inerhalb der punkt vor strich rechnung
begin
merker := merker+komplex[i];
if komplex[i]='i' then
begin
bimag := true;
end;
end
else if i>1 then//wenn plus oder minus kommt die volle gleichung in imaginaerteil oder realteil speichern
begin
if bimag = true then
begin
imaginaer := imaginaer +vz+ merker;
bimag := false;
end
else
begin
real := real+vz+merker;
end;
merker := '';
end;
//aktuelles vorzeichen merken
if komplex[i]='-' then
begin
vz:='-';
end;
if komplex[i]='+' then
begin
vz:='+';
end;
end
else//inerhalb einer oder mehreren klammern
begin
merker := merker + komplex[i];//klammer wird prinzipiell als ganzes betrachtet
//markieren wenn imaginaere zahl
if komplex[i]='i' then
begin
bimag := true;
end;
end;
end;
imaginaerteil_bestimmen := 'realteil: '+real + #13 +'imaginaerteil: '+ imaginaer;
end;
PS:mir fiel gerade auf dass es sehr verwirrend is dass die schleifenvariable i heißt und ich ständig nach i suche, ich glaube das sollte ich so schnell wie möglich ändern
gruß
stutz