PASCAL - Zadaci, resenja, problemi, izazovi...

Magicni kvadrat n-tog reda je kvadratna shema n×n brojeva od 1 do n2 u kojoj je zbir u svakoj vrsti, koloni i dijagonali jednak.

Primjer:

imgres
 
Aha, zaboravio sam skroz da se to zove magicni kvadrat. Ja sam jednom cuo algoritam za resavanje magicnog kvadrata koji izgleda funkcionise, ali ne znam da dokazem da je to tako. Potrebno je recimo za (crveni)magicni kvadrat (5x5) sa slike napraviti ovo prosirenje i redom upisivati brojeve od 1 do 25 kao na slici(crni) a zatim sve one koji su van kvadrata premestiti na njihovo mesto tako sto se ovi koji su levo od kvadrata pomere za 5 polja u desno, ovi koji su desno od kvadrata za 5 polja u levo, itd.

Untitled.png


Ispostavlja se, mada me opet mrzi da dokazujem, da sledece parce koda rasporedjuje briojeve na trazeni nacin ako se za kvadrat nxn posmatra matrica [0..n-1]x[0..n-1].

Kod:
y:=n div 2;
x:=y+1;
for i:=1 to n*n do begin
   kvadrat[x,y]:=i;
   if i MOD n=0 then
      x:=(x+2) MOD n;
   else begin
      x:=(x+1) MOD n;
      y:=(y+1) MOD n;
   end;
end;
 
Poslednja izmena:
Ja ne znam sta se tacno trazi u zadatku. Ja sam ti dao deo koda koji popunjava matricu kvadrat za neko proizvoljno n tako sto u polja [0,0] do [n-1,n-1] rasporedi ove trazene brojeve. Ako trebas da ispises matricu, napravi proceduru koja to radi, ak otreba da ucitas n, ucitaj n i sl. Ja sam ti dao deo koda koji radi to sto si ti trazio kako sam ja razumeo. Ono za cime ne vidim potrebu je ucitavanje matrice jer matricu, koliko sam razumeo, ti treba da popunis.
 
Ja ne znam sta se tacno trazi u zadatku. Ja sam ti dao deo koda koji popunjava matricu kvadrat za neko proizvoljno n tako sto u polja [0,0] do [n-1,n-1] rasporedi ove trazene brojeve. Ako trebas da ispises matricu, napravi proceduru koja to radi, ak otreba da ucitas n, ucitaj n i sl. Ja sam ti dao deo koda koji radi to sto si ti trazio kako sam ja razumeo. Ono za cime ne vidim potrebu je ucitavanje matrice jer matricu, koliko sam razumeo, ti treba da popunis.
-- Znas kako, treba da mi izbaci poruku ('Unevi broj vrsta i broj kolona matrice nxn:');
i ja tu da unesem npr. 3x3, 5x5...nebitno, i program onda da mi sam izbaci sve mogucnosti matrice npr.3x3 ili 5x5 tako da zbir kolona vrsta i dijagonale bude jednak: primjer:

8 1 6 (=15)
3 5 7 (=15) Ovo je za matricu 3x3.
4 9 2 (=15)
(=15)

17 24 1 8 15 (=65)
3 5 7 14 16 (=65)
4 6 13 20 22 (=65) Ovo je za matricu 5x5.
10 12 19 21 3 (=65)
11 18 25 2 9 (=65)
(=65)
 
Da l' sam nesposoban.
Isprobao sam ovaj bubble, i u teoriji on radi, i radi za nizove, ali na matrice ne umem da ga primenim.
Sve sam isprobao. :)

Desi se da ili obriše jednu vrstu, ili istumba kolone:
početne vrednosti:
1 | 2
3 | 4
5 | 6

posle sortiranja:
1 | 4
3 | 6
5 | 2

Moguće je i da je problem što radim u delfiju, pa zajebem neki deo..
 
Kod:
procedure TForm1.Button2Click(Sender: TObject);
  var i, k, s, n, m: integer;
  pom: string;
begin
  m := StringGrid1.ColCount;
  n := StringGrid1.RowCount;

  for i := 1 to n do
    for s := 1 to m - 1 do
      for k := s + 1 to m do
      if StringGrid1.Cells[i,s] > StringGrid1.Cells[i,k] then
      begin
        pom := StringGrid1.Cells[i,s];
        StringGrid1.Cells[i,s] := StringGrid1.Cells[i,k];
        StringGrid1.Cells[i,k] := pom;
      end;
end;
 
Ne znam sta se desava, deluje ok ovako na prvi pogled. Probaj malo da testiras na jednostavnijim primerima da vidis sta se desava ili da ubacis u sam sort neko stampanje medjurezultata pa da vidis zasto to radi. Jedina stvar koja meni pada na pamet je da si mozda obrnuo indekse tj da prvi indeks oznacava kolonu a drugi red pa proveri da nije to u pitanju. Ako nije tu problem, stvarno ne znam sta je u pitanju, sve mi deluje ok.
 

Back
Top