// checks if an input array is a `magic square' #include const int maxsquare = 15, TRUE=1, FALSE=0; void readmagsq(int& size, int ms[][maxsquare]); /*pre: size the array size; post: ms contains size by size array*/ void writesq(int size, int ms[][maxsquare], int& isms); /*pre: size the array size; isms true if a Magic Square post: the array written with a message*/ void checkrows(int sum, int size, int ms[][maxsquare], int& isms); /* pre: isms true; sum has value; ms has values post: isms true only if all rows sum to sum*/ void checkcols(int sum, int size, int ms[][maxsquare], int& isms); /*pre: isms true; sum has value; msType has values post: isms true only if all cols sum to sum*/ void checkdiags(int sum, int size, int ms[][maxsquare], int& isms); /*pre: isms true; Sum has value; msType has values post: isms true only if both diagonals sum to sum*/ int main() {int size, sum, j, magic, ms[maxsquare][maxsquare]; cout << "input square size ( <" << maxsquare << ") >"; cin >> size; readmagsq(size,ms); sum = 0; for (j = 0; j < size; j++) sum = sum + ms[1][j]; magic = TRUE; checkrows(sum,size,ms,magic); if (magic) checkcols(sum,size,ms,magic); if (magic) checkdiags(sum,size,ms,magic); writesq(size,ms,magic); return (0); } void readmagsq(int& size, int ms[][maxsquare]) {int i, j; cout << "Type in " << size << " rows of " << size << " integers\n"; for (i = 0; i < size; i++) { for (j = 0; j < size; j++) cin >> ms[i][j] ; };/*for i*/ cout << endl; }/*ReadMagSq*/ void writesq(int size, int ms[][maxsquare], int& isms) {int i,j; if (isms) cout << "The square below is a Latin square\n\n"; else cout << "The square below is not a Latin square\n\n"; for (i = 0; i < size; i++) { for (j = 0; j < size; j++) {cout.width(3); cout << ms[i][j];}; cout << endl ; };//for i }//WriteMagSq void checkrows(int sum, int size, int ms[][maxsquare], int& isms) {int rowsum, i, j; i = 2; while ((i <= size)&&(isms)) { rowsum = 0; for (j = 0; j < size; j++) rowsum = rowsum + ms[i][j]; if (rowsum != sum) isms = FALSE; i++; };//while }//Checkrows void checkcols(int sum, int size, int ms[][maxsquare], int& isms) {int colsum, i, j; j = 0; while ((j <= size)&&(isms)) { colsum = 0; for (i = 0; i<= size;i++) colsum = colsum + ms[i][j]; if (colsum != sum) isms = FALSE; j++; };//while };/*CheckCols*/ void checkdiags(int sum, int size, int ms[][maxsquare], int& isms) {int diagsum, i; diagsum = 0; for (i = 0; i < size; i++) diagsum = diagsum + ms[i][i]; if (diagsum != sum) isms = FALSE; if (isms) { diagsum = 0; for (i = 0; i < size; i++) diagsum = diagsum + ms[size + 1 - i][i]; if (diagsum != sum) isms = FALSE; };//if isms }//Checkdiags