Assignment Lo Shu Magic Square The Lo Shu Magic Square is a grid with 3 rows and
ID: 3800201 • Letter: A
Question
Assignment
Lo Shu Magic Square
The Lo Shu Magic Square is a grid with 3 rows and 3 Columns shown in the figure
The Lo Shu Magic Square has the following porperties.
The grid contains the numbers 1 through 9 exactly.
The sum of each row, each column, and each diagonal all add up to the same number. This is show in the figure below.
The sum is 15 for all.
Write a program in C++, that you can simulate a magic square using a two- dimensional array. Write a function taht accept a two dimensional array as an argument, and determines whether the array is a Lo Shu Magic Square. Test the function in the Program. Please include the Pseudocode also for the entire program.
4 9 2 3 5 7 8 1 6Explanation / Answer
#include<stdio.h>
#include<string.h>
// A function to generate odd sized magic squares
void generateSquare(int n)
{
int magicSquare[n][n];
// set all slots as 0
memset(magicSquare, 0, sizeof(magicSquare));
// Initialize position for 1
int i = n/2;
int j = n-1;
// One by one put all values in magic square
for (int num=1; num <= n*n; )
{
if (i==-1 && j==n) //3rd condition
{
j = n-2;
i = 0;
}
else
{
//1st condition helper if next number goes to out of square's right side
if (j == n)
j = 0;
//1st condition helper if next number is goes to out of square's upper side
if (i < 0)
i=n-1;
}
if (magicSquare[i][j]) //2nd condition
{
j -= 2;
i++;
continue;
}
else
magicSquare[i][j] = num++; //set number
j++; i--; //1st condition
}
// print magic square
printf("The Magic Square for n=%d: Sum of each row or column %d: ",
n, n*(n*n+1)/2);
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
printf("%3d ", magicSquare[i][j]);
printf(" ");
}
}
//function to check if the passed matrix is a Magic Square or not
void checkMagic(int matrix[3][3]){
int size = 3;
int row, column = 0;
int sum, sum1, sum2;
int flag = 0;
sum = 0;
//For diagonals
for (row = 0; row < size; row++) {
for (column = 0; column < size; column++) {
if (row == column)
sum = sum + matrix[row][column];
}
}
//For Rows
for (row = 0; row < size; row++) {
sum1 = 0;
for (column = 0; column < size; column++) {
sum1 = sum1 + matrix[row][column];
}
if (sum == sum1)
flag = 1;
else {
flag = 0;
break;
}
}
//For Columns
for (row = 0; row < size; row++) {
sum2 = 0;
for (column = 0; column < size; column++) {
sum2 = sum2 + matrix[column][row];
}
if (sum == sum2)
flag = 1;
else {
flag = 0;
break;
}
}
if (flag == 1)
printf(" Magic square");
else
printf(" Not a Magic square");
}
// program to test above functions
int main()
{
int n = 3; // Works only when n is odd
generateSquare (n);
int matrix[3][3] = {{4,9,2},{3,5,7},{8,1,6}};
checkMagic(matrix);
return 0;
}
PSEUDO-CODE FOR GENERATING A MAGIC SQUARE:
For a Matrix to be a Magic Square three conditions hold:
1. The position of next number is calculated by decrementing row number of previous number by 1, and incrementing the column number of previous number by 1. At any time, if the calculated row position becomes -1, it will wrap around to n-1. Similarly, if the calculated column position becomes n, it will wrap around to 0.
2. If the magic square already contains a number at the calculated position, calculated column position will be decremented by 2, and calculated row position will be incremented by 1.
3. If the calculated row position is -1 & calculated column position is n, the new position would be: (0, n-2).
Magic Square of size 3
----------------------
2 7 6
9 5 1
4 3 8
Steps:
1. position of number 1 = (3/2, 3-1) = (1, 2)
2. position of number 2 = (1-1, 2+1) = (0, 0)
3. position of number 3 = (0-1, 0+1) = (3-1, 1) = (2, 1)
4. position of number 4 = (2-1, 1+1) = (1, 2)
Since, at this position, 1 is there. So, apply condition 2.
new position=(1+1,2-2)=(2,0)
5. position of number 5=(2-1,0+1)=(1,1)
6. position of number 6=(1-1,1+1)=(0,2)
7. position of number 7 = (0-1, 2+1) = (-1,3) // this is tricky, see condition 3
new position = (0, 3-2) = (0,1)
8. position of number 8=(0-1,1+1)=(-1,2)=(2,2) //wrap around
I HOPE THIS WILL HELP.
Thank you for using CHEGG.
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.