Магический квадрат, где пользователь может сам задать количество элементов в стороне квадрата - C (СИ)

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

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

Как изменить этот код, чтобы N не была константой, а пользователь сам вводил значение N. Заранее благодарен за ответ
#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;
}

Решение задачи: «Магический квадрат, где пользователь может сам задать количество элементов в стороне квадрата»

textual
Листинг программы
int **mass;
int N;
.........
printf("N:");
scanf("%d",&N);
mass=(int**)malloc(N*sizeof(int*));
for(i=0; i<N; i++)
  mass[i]=(int*)malloc(N*sizeof(int));
//тут все твое
...............
//закончил
for(i=0; i<N; i++)
  free(mass[i]);
free(mass);

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

В этом коде:

  1. Объявляются две переменные: mass (указатель на массив указателей на int) и N (целое число).
  2. С помощью функции scanf вводится значение переменной N.
  3. С помощью функции malloc выделяется память под массив указателей на int, а затем с помощью цикла for выделяется память под каждый элемент массива.
  4. В этом месте кода (после комментария тут все твое) происходит какая-то конкретная реализация алгоритма для магического квадрата (но это не указано в вопросе, поэтому мы не будем рассматривать этот блок).
  5. После окончания работы с массивом, с помощью цикла for освобождается память, выделенная под каждый элемент массива.
  6. Освобождается память, выделенная под массив указателей на int.

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


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

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

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