Магический квадрат - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, помогите дописать программу по определению: является ли матрица Маг.кв. или нет.
#include <stdio.h>
const int N=3;
int main () {
    int mass[N][N];
    int i,j,p,g,k,t;
    int sumSTR=0;
    int sumSTB=0;
    int diag1=0;
    int diag2=0;
    for (i=0; i<N; i++){
        printf ("\n");
        for (j=0; j<N; j++){
            printf ("mass[%d][%d]= ", i,j);
            scanf ("%d", &mass[i][j]);
        }
    }
    for (i=0; i<N; i++){
        for (j=0; j<N; j++){    
            sumSTR+=mass[i][j];
            
        }
    }
    sumSTR /= N;
    for (j=0; j<N; j++){
        for (t=0; t<N; t++){    
            sumSTB+=mass[t][j];
            
        }
    }
sumSTB /= N;
    for (p=0,j=0; p<N; p++,j++){
        diag1+=mass[p][j];
    }
    for (g=0, k=N-1; g<N; g++, k--){
        diag2+=mass[g][k];
    }   
printf("\n%d",sumSTR);printf("\n");
printf("%d",sumSTB);printf("\n");
printf("%d",diag1);printf("\n");
printf("%d",diag2);printf("\n");
    int CONTROL = sumSTR;
    if ((sumSTR == CONTROL) && (sumSTB == CONTROL) && (diag1 == CONTROL) && (diag2 == CONTROL)){
        printf ("Magic matrix");
    }
    else {
        printf ("not magic matrix");
    }
return 0;
}
Взял квадрат 3*3. Получается, что я нашёл сумму всех строк и столбцов,и в итоге определил какое число получается в 1 строке,разделив на размерность массива, что не может быть верным. В итоге в матрице 1 2 3 4 5 6 7 8 9 получается, что это Маг. кв. т.к. (сумма всех чисел)/3 = сумме чисел по диагонали. Чушь...

Решение задачи: «Магический квадрат»

textual
Листинг программы
#include <stdio.h>
const int N=3;
int main (void) {
    int mass[N][N];
    int i,j,p,g,k,t;
    int m=0;
    int sumSTR=0;
    int sumSTB=0;
    int diag1=0;
    int diag2=0;
    printf ("\n");
    for (i=0; i<N; i++){
        for (j=0; j<N; j++){
            printf ("mass[%d][%d]= ", i,j);
            scanf ("%d", &mass[i][j]);
        }
    }
    for (i=0,j=0; j<N; j++){
        m+=mass[i][j];
    }
    for (i=1; i<N; i++){
        sumSTR=0;
        for (j=0; j<N; j++) 
            sumSTR+=mass[i][j];
            if (sumSTR != m){
                printf ("It s not magic");
                return 0;
            }
        
    
    }
    
    for (j=0; j<N; j++){
    sumSTB = 0;
        for (t=0; t<N; t++) 
            sumSTB+=mass[t][j];
            if (sumSTB != m){
                printf ("It s not magic");
                return 0;
            }
            
        
    }
    for (p=0,j=0; p<N; p++,j++)
        diag1+=mass[p][j];
        if (diag1 != m){
                printf ("It s not magic");
                return 0;
            }
        
    
    for (g=0, k=N-1; g<N; g++, k--)
        diag2+=mass[g][k];
        if (diag2 != m){
                printf ("It s not magic");
                return 0;
            }
        
printf("\n%d",sumSTR);printf("\n");
printf("%d",sumSTB);printf("\n");
printf("%d",diag1);printf("\n");
printf("%d",diag2);printf("\n");
    int CONTROL = m;
    if ((sumSTR == CONTROL) && (sumSTB == CONTROL) && (diag1 == CONTROL) && (diag2 == CONTROL)){
        printf ("Magic matrix");
    }
    else {
        printf ("not magic matrix");
    }
return 0;
}

Объяснение кода листинга программы

  1. Объявлены переменные:
    • mass[N][N] - массив размером NxN для ввода чисел;
    • i, j, p, g, k, t - циклы для перебора элементов массива;
    • m - сумма чисел в главной диагонали;
    • sumSTR, sumSTB - суммы чисел в строках и столбцах;
    • diag1, diag2 - суммы чисел в главной и побочной диагоналях;
    • CONTROL - контрольное значение (сумма чисел в матрице).
  2. Заполнение массива mass[N][N] числами с помощью цикла и функции scanf.
  3. Проверка на магичность матрицы:
    • Проверка суммы чисел в каждой строке на равенство m (если не магическая - выводится сообщение и программа завершается).
    • Проверка суммы чисел в каждом столбце на равенство m (если не магическая - выводится сообщение и программа завершается).
    • Проверка суммы чисел в главной диагонали на равенство m (если не магическая - выводится сообщение и программа завершается).
    • Проверка суммы чисел в побочной диагонали на равенство m (если не магическая - выводится сообщение и программа завершается).
  4. Вывод значений sumSTR, sumSTB, diag1, diag2.
  5. Проверка магичности матрицы:
    • Если sumSTR, sumSTB, diag1, diag2 равны CONTROL, то выводится Magic matrix.
    • В противном случае выводится not magic matrix.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4 из 5
Похожие ответы