Page 2 of 4<1234> Show 40 post(s) from this thread on one page

Go4Expert (http://www.go4expert.com/)
-   C++ (http://www.go4expert.com/articles/cpp-tutorials/)
-   -   Magic Square (http://www.go4expert.com/articles/magic-square-t8690/)

Re: Magic Square

Quote:
 Originally Posted by Obaid Admin, do you think this should be an Article because it does not work correctly
On that time i did'nt think for even order as raised ny Alramesh. I was working on that. but in these days i was busy so to give for even order may be late.

Quote:
 Originally Posted by Obaid as well as Nothing is explained.
Really i dont know how much explain of any topic should be. I think people will ask If intrested then i will explain.

 coderzone 11Feb2008 11:15

Re: Magic Square

Quote:
 Originally Posted by asadullah.ansari Really i dont know how much explain of any topic should be. I think people will ask If intrested then i will explain.
There is nothing personal against you but just my expectation from the Articles from this site is quite high. Look at some of the articles by Shabbir, Pradeep, bashamsc, Karpov2007 and they have code which is well commented and easy to understand even for a layman like me.

Re: Magic Square

Sorry to all of you for delayed ... Now this code will work for all order . I have tested on Unix/ solaris

Code:

```#include <vector> #include<iostream.h> using namespace std; //There two series will be on even in case of magic square // One of even order will be for multiple of 4 void BuildDoublyEvenMagicSquare(vector<vector<int> > &mat, int Order); //Other of even order will be for multiple of 2 void SinglyEvenMagicSquare(vector<vector<int> > &mat, int order); // For odd order void BuildOddMagicSquare(vector<vector<int> > &mat, int Order); // For odd order void BuildOddMagicSquare(vector<vector<int> > &mat, int Order) {   int SqrOfOrder = Order * Order;   int start=0, mid=Order/2;    // start position   for (int loop=1; loop<=SqrOfOrder; ++loop)   {     mat[start--][mid++] = loop;     if (loop % Order == 0)     {       start += 2;       --mid;     }     else     {              if (mid==Order)         mid -= Order;       else if (start<0)         start += Order;     }      }    }             void BuildDoublyEvenMagicSquare(vector<vector<int> > &mat, int Order) {   vector<vector<int> > A(Order, vector<int> (Order, 0));   vector<vector<int> > B(Order, vector<int> (Order, 0));   int i, j;   //Building of matrixes I and  J   int index=1;   for (i=0; i<Order; i++)     for (j=0; j<Order; j++)     {       A[i][j]=((i+1)%4)/2;       B[j][i]=((i+1)%4)/2;       mat[i][j]=index;       index++;     }   for (i=0; i<Order; i++)     for (j=0; j<Order; j++)     {       if (A[i][j]==B[i][j])         mat[i][j]=Order*Order+1-mat[i][j];     } } void BuildSinglyEvenMagicSquare(vector<vector<int> > &mat, int order) {   int ho=order/2;   vector<vector<int> > C(ho, vector<int> (ho, 0));   // For Order is Odd     if (order%2==1)       BuildOddMagicSquare(C, order);   // For Order is Even   else   {     //For Order is Doubly Even Order     if (order % 4==0)       BuildDoublyEvenMagicSquare(C, order);     //For Order is Singly Even Order     else       BuildSinglyEvenMagicSquare(C, order);   }   int i, j, k;   for (i=0; i<ho; i++)     for (j=0; j<ho; j++)     {       mat[i][j]=C[i][j];       mat[i+ho][j]=C[i][j]+3*ho*ho;       mat[i][j+ho]=C[i][j]+2*ho*ho;       mat[i+ho][j+ho]=C[i][j]+ho*ho;     }   if (order==2)     return;   vector<int> A(ho, 0);   vector<int> B;   for (i=0; i<ho; i++)     A[i]=i+1;   k=(order-2)/4;   for (i=1; i<=k; i++)     B.push_back(i);   for (i=order-k+2; i<=order; i++)     B.push_back(i);   int temp;   for (i=1; i<=ho; i++)     for (j=1; j<=B.size(); j++)     {       temp=mat[i-1][B[j-1]-1];       mat[i-1][B[j-1]-1]=mat[i+ho-1][B[j-1]-1];       mat[i+ho-1][B[j-1]-1]=temp;     }   i=k;   j=0;   temp=mat[i][j]; mat[i][j]=mat[i+ho][j]; mat[i+ho][j]=temp;   j=i;   temp=mat[i+ho][j]; mat[i+ho][j]=mat[i][j]; mat[i][j]=temp; } int main() {   int Order;   cout<<"Enter the order of square which you wanna: ";   cin>>Order;   vector<vector<int> > mat(Order, vector<int> (Order, 0));   // For order less than 3 is meaningless so printing error   if (Order<3)   {     cout<<" Order Of Square must be greater than 2";     return -1;   }   // For Order is Odd     if (Order%2==1)       BuildOddMagicSquare(mat, Order);   // For Order is Even   else   {     //For Order is Doubly Even Order     if (Order % 4==0)       BuildDoublyEvenMagicSquare(mat, Order);     //For Order is Singly Even Order     else       BuildSinglyEvenMagicSquare(mat, Order);   }   // Display Results   for (int i=0; i<Order; i++)   {     for (int j=0; j<Order; j++)     {       cout<< mat[i][j]<<"  " ;     }     cout<<endl;   }   return 0; }```

 imrantechi 13Feb2008 14:13

Re: Magic Square

can you please try it out again and post it back,

i feel it was a good topic

 debleena_doll2002 13Feb2008 15:07

Re: Magic Square

Quote:
 Originally Posted by imrantechi can you please try it out again and post it back, i feel it was a good topic
Already explained!!! I dont think so that it should be post back.

Re: Magic Square

 crazytolearn57 26Feb2008 18:35

Re: Magic Square

good one

 shabbir 5Mar2008 09:42

Re: Magic Square

Nominate your favorite article of the month for Feb 2008

 aisha.ansari84 5Mar2008 17:24

Re: Magic Square

i feel its a nice article i suppose you can post back the one without any problems