I need the program to display This is a magic square or This
I need the program to display \"This is a magic square\" or \"This is not a magic square\" using boolean. I am having trouble so could someone please help me. I have the instructions as well as my code.
// ********************************************************
// The isValidGrid function accepts a two-dimensional int
// array as an argument, and returns true if each value
// in the range 1 through N_COL*N_ROWS appears once and only once.
// Otherwise, it returns false.
// ********************************************************
bool isValidGrid(int values[][N_COLS]);
// ********************************************************
// The allSumsAreEqual function accepts a two-dimensional int
// array as an argument, and returns true if the sum of
// each row, each column and each diagonal all add up
// to the same value
// Otherwise, it returns false.
// ********************************************************
bool allSumsAreEqual(int values[][N_COLS]);
// ********************************************************
// The isMagicSquare function accepts a two-dimensional
// int array as an argument, and returns true if the
// array meets all the requirements of a magic square.
// Otherwise, it returns false.
// This function calls the isValidGrid() and
// allSumsAreEqual() functions
// ********************************************************
bool isMagicSquare(int values[][N_COLS]);
Here is my code:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define N_COLS 3
#define N_ROWS 3
void printArray(short int[][N_COLS], int);
void printArray2(short int[][N_COLS], int);
void printArray3(short int[][N_COLS], int);
void printArray4(short int[][N_COLS], int);
int main()
{
short int array1[][N_COLS] = { { 4, 9, 2 }, { 3, 5, 7 }, { 8, 1, 6 }};
short int array2[][N_COLS] = { { 2, 2, 3 }, { 4, 1, 6 }, { 7, 8, 5 }};
short int array3[][N_COLS] = { { 4, 3, 8 }, { 9, 5, 1 }, { 2, 7, 6 }};
short int array4[][N_COLS] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }};
printf(\"==========================\ \");
printArray(array1, 3);
printf(\"==========================\ \");
printArray2(array2, 3);
printf(\"==========================\ \");
printArray3(array3, 3);
printf(\"==========================\ \");
printArray4(array4, 3);
puts(\"\");
bool isValidGrid(int values[][N_COLS]);
bool allSumsAreEqual(int values[][N_COLS]);
bool isMagicSquare(int values[][N_COLS]);
return 0;
}
void printArray(short int arr[][N_COLS], int size)
{
for (size_t row = 0; row < (size_t) size ; row++)
{
for (size_t col = 0; col < 3 ; col++)
printf(\"%5d\", arr[row][col]);
puts(\"\");
}
}
void printArray2(short int arr2[][N_COLS], int size)
{
for (size_t row = 0; row < (size_t) size ; row++)
{
for (size_t col = 0; col < 3 ; col++)
printf(\"%5d\", arr2[row][col]);
puts(\"\");
}
}
void printArray3(short int arr3[][N_COLS], int size)
{
for (size_t row = 0; row < (size_t) size ; row++)
{
for (size_t col = 0; col < 3 ; col++)
printf(\"%5d\", arr3[row][col]);
puts(\"\");
}
}
void printArray4(short int arr4[][N_COLS], int size)
{
for (size_t row = 0; row < (size_t) size ; row++)
{
for (size_t col = 0; col < 3 ; col++)
printf(\"%5d\", arr4[row][col]);
puts(\"\");
}
}
Solution
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define N_COLS 3
#define N_ROWS 3
void printArray(short int[][N_COLS], int);
void printArray2(short int[][N_COLS], int);
void printArray3(short int[][N_COLS], int);
void printArray4(short int[][N_COLS], int);
void printArray(short int values[][N_COLS], int size)
{
size_t row=0;
size_t col = 0;
for (row = 0; row < (size_t) size ; row++)
{
for (col = 0; col < 3 ; col++)
printf(\"%5d\", values[row][col]);
puts(\"\");
}
}
bool isValidGridFunction(short int values[][N_COLS])
{
int array[9];
int i,j,c=0;
for(i=0;i<N_ROWS;i++)
{
for(j=0;j<N_COLS;j++)
{
array[c]=values[i][j];
//printf(\"%d\ \",values[i][j]);
c++;
}
}
for (i = 0; i < c-1; i++) { // read comment by @nbro
for (j = i + 1; j < c; j++) {
if (array[i] == array[j]) {
return false;
}
}
}
return true;
}
bool isSumEqualFunction(short int values[][N_COLS])
{
int sum, sum1, sum2;
int flag = 0;
int row,col,size=3;
sum = 0;
for (row = 0; row < size; row++) {
for (col = 0; col < size; col++) {
if (row == col)
sum = sum + values[row][col];
}
}
//For Rows
for (row = 0; row < size; row++) {
sum1 = 0;
for (col = 0; col < size; col++) {
sum1 = sum1 + values[row][col];
}
if (sum == sum1)
flag = 1;
else {
flag = 0;
break;
}
}
//For cols
for (row = 0; row < size; row++) {
sum2 = 0;
for (col = 0; col < size; col++) {
sum2 = sum2 + values[col][row];
}
if (sum == sum2)
flag = 1;
else {
flag = 0;
break;
}
}
if (flag == 1)
return true;
else
return false;
}
void isMagicFunction(bool isGrid,bool isEqualSum)
{
if(isGrid==true && isEqualSum==true) printf(\"Is magic square\ \");
else printf(\"Not magic square\ \");;
}
int main()
{
short int array1[][N_COLS] = { { 4, 9, 2 }, { 3, 5, 7 }, { 8, 1, 6 }};
short int array2[][N_COLS] = { { 2, 2, 3 }, { 4, 1, 6 }, { 7, 8, 5 }};
short int array3[][N_COLS] = { { 4, 3, 8 }, { 9, 5, 1 }, { 2, 7, 6 }};
short int array4[][N_COLS] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }};
bool isGrid,isEqualSum;
printf(\"==========================\ \");
printArray(array1, 3);
isGrid=isValidGridFunction(array1);
isEqualSum=isSumEqualFunction(array1);
isMagicFunction(isGrid,isEqualSum);
printf(\"==========================\ \");
printArray(array2, 3);
isGrid=isValidGridFunction(array2);
isEqualSum=isSumEqualFunction(array2);
isMagicFunction(isGrid,isEqualSum);
printf(\"==========================\ \");
printArray(array3, 3);
isGrid=isValidGridFunction(array3);
isEqualSum=isSumEqualFunction(array3);
isMagicFunction(isGrid,isEqualSum);
printf(\"==========================\ \");
printArray(array4, 3);
isGrid=isValidGridFunction(array4);
isEqualSum=isSumEqualFunction(array4);
isMagicFunction(isGrid,isEqualSum);
puts(\"\");
//printf(\"%d\ \",isGrid);
//printf(\"%d\ \",isEqualSum);
//printf(\"%d\ \",isMagic);
return 0;
}




