Неправильная работа программы определения "магического квадрата" - C (СИ)
Формулировка задачи:
Дана целая квадратная матрица n-го порядка. Определить, является ли она магическим квадратом, т.е. такой, в которой суммы элементов во всех строках и столбцах одинаковы.
В частности, программа несколько раз выводит фразы и мне лично кажется, что я неверно организовал сбор данных, хотя не понимаю, как это исправить.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#define n 4
#define m 4
void main()
{
int sum1[n],mas[n][m],i,j,sum2[m];
randomize();
for(i=0;i<n;i++)
{
sum1[i]=0;
for(j=0;j<m;j++)
{
sum2[j]=0;
mas[i][j]=random(6);
sum2[j]+=mas[i][j];
printf("%d\t",sum2[i]);
}
sum1[i]=mas[i][j];
printf("%d\t",sum1[i]);
}
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(sum1[i]==sum2[i])
printf("Square IS magical\n");
else
printf("Square is NOT magical\n");
getch();
}Решение задачи: «Неправильная работа программы определения "магического квадрата"»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define n 4
#define m 4
int main()
{
int sum_row,sum_column,mas[n][m],i,j;
srand(time(NULL));
for (i=0;i<n;i++)
{
for(j=0;j<n;j++)
mas[i][j]=rand()%6;
//mas[i][j]=1; //для проверки можно заполнить массив единицами
}
for(i=0;i<n;i++)
{
sum_column=0; // колонка
sum_row=0; // строка
for(j=0;j<n;j++)
{
sum_row+=mas[i][j];
sum_column+=mas[j][i];
}
printf("%d\t",sum_row);
printf("%d\n",sum_column);
if(sum_row!=sum_column)
{
printf("Square is NOT magical\n");
return 0;
}
}
printf("Square IS magical\n");
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с файлами, генерацией случайных чисел и временем.
- Определение размера массива n и m.
- Объявление переменных: sum_row, sum_column и массив mas[n][m].
- Инициализация генератора случайных чисел с помощью функции srand(time(NULL)).
- Заполнение массива mas[n][m] случайными числами с помощью цикла for и функции rand()%6.
- Вычисление суммы элементов каждой строки и столбца с помощью циклов for и переменных sum_row и sum_column.
- Вывод значения суммы строки на экран с помощью функции printf().
- Проверка условия if(sum_row!=sum_column) для определения является ли квадрат
магическим. - Вывод соответствующего сообщения на экран с помощью функции printf().
- Возврат значения 0, обозначающего успешный конец работы программы.