Einzelnen Beitrag anzeigen

Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#14

Re: magisches quadrat, brauch ne idee...

  Alt 14. Okt 2004, 18:56
Sooo...nach einigem überlegen, um- und neuschreiben ist nun folgender code rausgekommen:

Delphi-Quellcode:
procedure TForm1.setfield;
var i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16:integer;
begin
  for i1:=1 to 16 do begin
   quadrat[1,1]:=getunusedzahl(1,i1);
   for i2:=1 to 15 do begin
    quadrat[1,2]:=getunusedzahl(2,i2);
    for i3:=1 to 14 do begin
     quadrat[1,3]:=getunusedzahl(3,i3);
     for i4:=1 to 13 do begin
      quadrat[1,4]:=getunusedzahl(4,i4);
//vorzeitiger stop bei falscher reihe für bessere performance
      if (quadrat[1,1]+quadrat[1,2]+quadrat[1,3]+quadrat[1,4]=34) then
       begin
       for i5:=1 to 12 do begin
        quadrat[2,1]:=getunusedzahl(5,i5);
        for i6:=1 to 11 do begin
         quadrat[2,2]:=getunusedzahl(6,i6);
         for i7:=1 to 10 do begin
          quadrat[2,3]:=getunusedzahl(7,i7);
          for i8:=1 to 9 do begin
           quadrat[2,4]:=getunusedzahl(8,i8);
//s.o.
           if (quadrat[2,1]+quadrat[2,2]+quadrat[2,3]+quadrat[2,4]=34) then
            begin
            for i9:=1 to 8 do begin
             quadrat[3,1]:=getunusedzahl(9,i9);
             for i10:=1 to 7 do begin
              quadrat[3,2]:=getunusedzahl(10,i10);
              for i11:=1 to 6 do begin
               quadrat[3,3]:=getunusedzahl(11,i11);
               for i12:=1 to 5 do begin
                quadrat[3,4]:=getunusedzahl(12,i12);
//s.o.
                if (quadrat[3,1]+quadrat[3,2]+quadrat[3,3]+quadrat[3,4]=34) then
                 begin
                 for i13:=1 to 4 do begin
                  quadrat[4,1]:=getunusedzahl(13,i13);
                  for i14:=1 to 3 do begin
                   quadrat[4,2]:=getunusedzahl(14,i14);
                   for i15:=1 to 2 do begin
                    quadrat[4,3]:=getunusedzahl(15,i15);
                    for i16:=1 to 1 do begin
                     quadrat[4,4]:=getunusedzahl(16,i16);
//s.o.
                     if (quadrat[4,1]+quadrat[4,2]+quadrat[4,3]+quadrat[4,4]=34) then
                      begin
                      if (isCorrect) and (ListBox1.Items.IndexOf(getfieldstring)=-1)
                      then ListBox1.Items.Add(getfieldstring);
                      end;
                     end;
                    end;
                   end;
//status
                  Label2.Caption:=getfieldstring;
                  Application.ProcessMessages;
                  end;
                 end;
                end;
               end;
              end;
             end;
            end;
           end;
          end;
         end;
        end;
       end;
      end;
     end;
    end;
   end;
end;
sieht schlimm aus, isses aber nicht

hat einer noch vorschläge wies noch schneller geht?
oder wie mans doch rekursiv machen kann?

[*weg damit*] und noch was: ich hab irgendwie mal ergebnisse bis zu 20fach bekommen....
[*weg damit*] weiss einer warum? (oder war das noch ein anderer code? )
es war ein anderer code
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat