A magic square is a 2D matrix of integers with the following
A magic square is a 2D matrix of integers with the following properties: The number of rows (n) = the number of columns The sum of the elements in each row, each column and each primary diagonal is equal to n(n2 + 1)/2. You are provided with an input file called input.txt in which each line represents the values in a 4 x 4 square to be tested. Write a C program that reads in a 4 x 4 square matrix from a line of the input file and outputs true if it is or false if the matrix is not a magic square.
Hint: You could write functions to test each condition – example checkRows, checkColumns, checkprimaryDiagonal1 and checkprimaryDiagonal2 2
Restrictions: 1. Your program must read the values form the testdata file and process the data one lines at a time
2. You program should handle square matrices of size 4 x 4 3. Your input file can have any number of lines of data; but the testdata file will always terminate with a line with the number 0.
Sample testdata.txt file
1 15 14 4 10 11 8 5 7 6 9 12 16 2 3 13
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1 3 4 5 6 7 12 8 9 15 7 9 4 3 12 13
0
Sample Run Test Result ---------------------------------------
1 True
2 False
3 False
Solution
ANSWER:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *myFile;
myFile = fopen(\"file.txt\", \"r\");
int line;
//read file into array
int numberArray[4][4];
int i, j;
if (myFile == NULL)
{
printf(\"Error Reading File\ \");
exit (0);
}
printf(\"Run Test Result \ \");
for(line = 0; line < 3 ; line++)
{
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
fscanf(myFile, \"%d,\", &numberArray[i][j] );
}
}
if(checkRows(numberArray,4,34)) {
if(checkColumns(numberArray,4,34)) {
if(checkprimaryDiagonal1(numberArray,4,34)) {
if(checkprimaryDiagonal2(numberArray,4,34)) {
printf(\" %d True\ \", line+1); }
else {
printf(\" %d False\ \", line+1);
}
} else {
printf(\" %d False\ \", line+1);
}
} else {
printf(\" %d False\ \", line+1);
}
} else {
printf(\" %d False\ \", line+1);
}
}
fclose(myFile);
getchar();
return 0;
}
int checkRows(int arr[4][4], int size, int val)
{
int row, col;
int count=0, sum=0;
for(row=0;row<size;row++)
{
sum=0;
for(col=0;col<size;col++)
{
sum = sum + arr[row][col];
}
if(val == sum)
count++;
}
if(count == size)
return 1;
else
return 0;
}
int checkColumns(int arr[4][4], int size, int val)
{
int row, col;
int count=0, sum=0;
for(row=0;row<size;row++)
{
sum=0;
for(col=0;col<size;col++)
{
sum = sum + arr[col][row];
}
if(val == sum)
count++;
}
if(count == size)
return 1;
else
return 0;
}
int checkprimaryDiagonal1(int arr[4][4], int size, int val)
{
int diagonal;
int sum = 0;
for(diagonal=0;diagonal<size;diagonal++)
sum = sum + arr[diagonal][diagonal];
if(sum == val)
return 1;
else
return 0;
}
int checkprimaryDiagonal2(int arr[4][4], int size, int val)
{
int row, col, skip, replace;
int count=0, sum=0;
for(row=0, skip=size-1 ;row<size;row++, skip--)
{
sum=0;
for(col=0;col<size;col++)
{
replace = skip;
if(replace == 0)
{
sum = sum + arr[row][col];
}
replace--;
}
if(val == sum)
count++;
}
if(sum == val)
return 1;
else
return 0;
}
Explanation:
1.


