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]