Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

da li je iko vec rjesavao? (magicni kvadrat problem)

[es] :: C/C++ programiranje :: C/C++ za početnike :: da li je iko vec rjesavao? (magicni kvadrat problem)

[ Pregleda: 3566 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

SuperC

Član broj: 120719
Poruke: 124
*.cs.univie.ac.at.



Profil

icon da li je iko vec rjesavao? (magicni kvadrat problem)20.11.2006. u 09:14 - pre 212 meseci
problem magicnog kvadrata u c++? Npr. da je dato

16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1

ovdje je zbir po vertikali i horizontali i dijagonali 34, i potrebno je znaci napisati kod koji ce za bilo broj od 1 do n^2 praviti isto.
 
Odgovor na temu

SuperC

Član broj: 120719
Poruke: 124
*.cs.univie.ac.at.



Profil

icon Re: da li je iko vec rjesavao? (magicni kvadrat problem)20.11.2006. u 09:37 - pre 212 meseci
koliko ja shvatam, ovdje bi trebao imati tri varijable: h, v i d za horizontalu , vertikalu i dijagonalu i onda napraviti kao niz [4] koji ce se uporedjivati, odnosno ne oni, nego njihov zbir. kako da to bude uvijek magicni kvadrat?
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.3dnet.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: da li je iko vec rjesavao? (magicni kvadrat problem)20.11.2006. u 09:39 - pre 212 meseci
SuperC,

Shvati da su pravila ovog foruma (koja nisam ja ustanovio) da se OBRIŠU svi
zahtevi da neko uradi nečiji domaći zadatak od POČETKA do KRAJA.

Niko ovde nije ničja besplatna tehnička podrška, i dogovor je da ne želimo da
[ES] postane besplatna berza za izradu domaćih zadataka.

Takođe, zadaci se postavljaju u temama C/C++ za početnike.

95% domaćih zadataka koje profesori postavljaju su generičkog tipa, što će
reći sigurno se negde već urađeni.

Evo, na google-u, ukucaj ključne reči:

c++ Magic square

i dobićeš sijaset rešenja, kao na primer:
http://www.codeproject.com/cpp/Magic_Square.asp
 
Odgovor na temu

SuperC

Član broj: 120719
Poruke: 124
*.cs.univie.ac.at.



Profil

icon Re: da li je iko vec rjesavao? (magicni kvadrat problem)20.11.2006. u 09:44 - pre 212 meseci
x-files nisam te ja kritikovao :)) daleko od toga. hvala svima koji mi pomazu da naucim osnove c++. ja nisam prije znao za ovu stranicu, tako da sam novi, u nekim drugim oblastima mozda i ja nesto mogu da pomognem.

uputstvo procitano i zabiljezeno. :))



update; hvala za link, ja sam trazio preko njemackog jezika ili preko nasih jezika, no znaci bolje je na engleskom, ima logike :)) hvala jos jednom
 
Odgovor na temu

SuperC

Član broj: 120719
Poruke: 124
*.cs.univie.ac.at.



Profil

icon Re: da li je iko vec rjesavao? (magicni kvadrat problem)20.11.2006. u 11:21 - pre 212 meseci
analiza koda, da zajedno sa mnom prodje kroz kod, bio bih mu zahvalan:

Code:
#include "iostream"
#include <vector>
using namespace std;

void OddMagicSquare(vector<vector<int> > &matrix, int n);
void DoublyEvenMagicSquare(vector<vector<int> > &matrix, int n);
void SinglyEvenMagicSquare(vector<vector<int> > &matrix, int n);
void MagicSquare(vector<vector<int> > &matrix, int n);
void PrintMagicSquare(vector<vector<int> > &matrix, int n);


int main(int argc, char* argv[])
{
  int n;
  printf("Unesite broj/Geben Sie ein Zahl");
  scanf("%d", &n);

  vector<vector<int> > matrix(n, vector<int> (n, 0));

  if (n<3)
  {
    printf("\nError: n muss sein groesser als/ mora biti vece od  2\n\n");
    return -1;
  }


  MagicSquare(matrix, n);  
  //rezultati stampanja
  PrintMagicSquare(matrix, n);
  return 0;
}

void MagicSquare(vector<vector<int> > &matrix,int n)
{
  if (n%2==1)        //n is Odd
    OddMagicSquare(matrix, n);
  else          //n is even
    if (n%4==0)    //doubly even order
      DoublyEvenMagicSquare(matrix, n);
    else      //singly even order
      SinglyEvenMagicSquare(matrix, n);
}

void OddMagicSquare(vector<vector<int> > &matrix, int n)
{
  int nsqr = n * n;
  int i=0, j=n/2;     // pocetna pozicija
  for (int k=1; k<=nsqr; ++k) 
  {

matrix[i][j] = k;
i--;
j++;
if (k%n == 0) 
   { 
      i += 2; 
      --j; 
    }
    else 
    {
      if (j==n) 
        j -= n;
      else if (i<0) 
        i += n;
    }
  }

}

void DoublyEvenMagicSquare(vector<vector<int> > &matrix, int n)
{
  vector<vector<int> > I(n, vector<int> (n, 0));
  vector<vector<int> > J(n, vector<int> (n, 0));

  int i, j;
  //pripremi I, J
  int index=1;
  for (i=0; i<n; i++)
    for (j=0; j<n; j++)
    {
      I[i][j]=((i+1)%4)/2;
      J[j][i]=((i+1)%4)/2;
      matrix[i][j]=index;
      index++;
    }

   for (i=0; i<n; i++)
    for (j=0; j<n; j++)
    {
      if (I[i][j]==J[i][j])
        matrix[i][j]=n*n+1-matrix[i][j];
    }
}

void SinglyEvenMagicSquare(vector<vector<int> > &matrix, int n)
{
 int p=n/2;


  vector<vector<int> > M(p, vector<int> (p, 0));
  MagicSquare(M, p);
  int i, j, k;

   for (i=0; i<p; i++)
    for (j=0; j<p; j++)
    {
      matrix[i][j]=M[i][j];
      matrix[i+p][j]=M[i][j]+3*p*p;
      matrix[i][j+p]=M[i][j]+2*p*p;
      matrix[i+p][j+p]=M[i][j]+p*p;
    }


  if (n==2)
    return;   

  vector<int> I(p, 0);
  vector<int> J;
  for (i=0; i<p; i++)
    I[i]=i+1;

  k=(n-2)/4;  

  for (i=1; i<=k; i++)
    J.push_back(i);

 
  for (i=n-k+2; i<=n; i++)
    J.push_back(i);

  int temp;
  for (i=1; i<=p; i++)
    for (j=1; j<=J.size(); j++)
    {
      temp=matrix[i-1][J[j-1]-1];
      matrix[i-1][J[j-1]-1]=matrix[i+p-1][J[j-1]-1];
      matrix[i+p-1][J[j-1]-1]=temp;
    }

  //j=1, i
  //i=k+1, k+1+p
 i=k; 
  j=0;
  temp=matrix[i][j]; matrix[i][j]=matrix[i+p][j]; matrix[i+p][j]=temp;
  j=i;
  temp=matrix[i+p][j]; matrix[i+p][j]=matrix[i][j]; matrix[i][j]=temp;
}

 

 

void PrintMagicSquare(vector<vector<int> > &matrix, int n)
{
  for (int i=0; i<n; i++) 
  {
    for (int j=0; j<n; j++)
      printf(" %3d", matrix[i][j]);
    printf("\n");
  }
  printf("\n\n");
}
 
Odgovor na temu

SuperC

Član broj: 120719
Poruke: 124
*.cs.univie.ac.at.



Profil

icon Re: da li je iko vec rjesavao? (magicni kvadrat problem)20.11.2006. u 13:15 - pre 212 meseci
shvatih najvecim dijelom program, osim dijela u kojem pravi if petlju na doubly i na simply? moze li mi neko objasniti zasto je to potrebno?
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: da li je iko vec rjesavao? (magicni kvadrat problem)

[ Pregleda: 3566 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.