Thema: Delphi String als Rechenzeichen

Einzelnen Beitrag anzeigen

Benutzerbild von SimonRap
SimonRap

Registriert seit: 17. Okt 2009
Ort: Mahlow
147 Beiträge
 
Delphi 6 Personal
 
#9

Re: String als Rechenzeichen

  Alt 25. Mai 2010, 23:10
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:
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;
dann die möglichkeiten innerhalb einer Rechnung:
Delphi-Quellcode:
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;
und dann als timer im interval 1 abfragen:
Delphi-Quellcode:
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;
keine fehler oder so... nur falsch... ich bekomme: 4 2 5 3 + * + (oder auch 4 3 5 2 + * - )<- auch 17
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]
Simon
  Mit Zitat antworten Zitat