My program only ouputs the correct magic square sum totals for the number 15.If I enter any odd number smaller than 15 my sum totals are incorrect. I have define "size" to 15. How or what do I change so that my program will output the magic square results for the odd numbers 1 through 15 without having to change the value in my "#define size 15"?Or do I need to get rid of this define statement? How do I define my array size to be the max 15 by 15. Then, input the size of the array that I want to build?
Thanks,
J.J.
#include<stdio.h>
#define size 15
void input_square (int order, int magic)
{
int row,column;
int entry = 1;
printf("Enter the size of the odd Magic Square : " );
scanf("%d",&order);
printf ("\n");
if ( order % 2 ) {
row = 0;
column = (order - 1) / 2;
while (entry <= order * order) {
magic[row][column] = entry;
if (entry == order * (entry / order)) {
row++;
}
else {
row--;
column++;
if (row < 0) {
row = order - 1;
}
if (column > order - 1) {
column = 0;
}
}
entry++;
}
printf("Magic square appears as follows:\n");
printf ("\n");
for(row = 0; row < order; row++)
{
for (column = 0; column < order; column++)
printf("%4d",magic[row][column]);
printf("\n");
}
}
else {
printf ("\nThe number: %d is not Odd\n", order);
printf ("\n");
}
}
void print_sum (int order,int magic )
{
int row, column;
int magic_number;
int count = 1;
int count_2 = 1;
magic_number = 0;
for (row = 0; row < order; row++)
magic_number += magic[row][0];
for (column = 0; column < order; column++) {
printf("\nThe Sum for Column %d is %d.\n", count, magic_number);
count++;
}
magic_number = 0;
for (column = 0; column < order; column++)
magic_number += magic[0][column];
for (row = 0; row < order; row++) {
printf("\nThe Sum for Row %d is %d.\n", count_2, magic_number);
count_2++;
}
magic_number = 0;
row = 0;
column = 0;
while (row < order && column < order) {
magic_number += magic[row][column];
row++;
column++;
}
printf("\nThe Sum for Diagonal from top left to bottom right is %d.\n",magic_number);
magic_number = 0;
row = order - 1;
column = 0;
while (row <= order && column < order) {
magic_number += magic[row][column];
row--;
column++;
}
printf("\nThe Sum for Diagonal from bottom left to top right is %d.\n",magic_number);
printf("\n");
magic_number = 0;
}
main()
{
int order = size;
int magic;
input_square (order, magic);
print_sum (order, magic);
}