Правильно оформить двумерный динамический массив. Программа "метод Гаусса" - C (СИ)

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

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

Здравствуйте. Помогите правильно оформить двумерный динамический массив float A[N][M].Ругается компилятор. Программа "метод Гауса".
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void main()
{
int S;
printf("Select size of matrix ");
scanf("%d",&S);
int N=S,M=S+1;
int i,j,x=0,z=0,r,t,c,Index,Max;
float K,Q,V[N];
//Змутить динамический массив
float  **A=(**float)malloc(N*sizeof(float*));
for(i=0;i<N;i++)
{
A[i]=(*float)malloc(M*sizeof(float));
for(j=0;j<M;j++)
{
printf("Plese input ellement of matrix A[%d][%d]=",i,j) ;
scanf("%f",&A[i][j]);
}
}

    printf("\n\nyour matrix\n");
        for(i=0;i<N;i++)
            {
                printf("\n");
                for(j=0;j<M;j++)
                {
                  printf("%.3f ",A[i][j]);
                }
            }
 
//выбор главного элемента
for(x=0,z=0;x<N;x++,z++)
{
   K=A[x][z];
   if(K==0){
         for(i=0,r=0,t=1,Index=0,Max=A[i][r];t<M;r++,t++)
            {
                if(Max<=A[x][t])//Поиск индекса максимального элемента в массиве
                    {
                    Max=A[x][t];
                    Index=t;
                    }
            }
            for(c=0;c<N;c++)  // V[c ] - временный контейнер под хранение данных
                {
                    V[c ]=A[c ][z];
                }
            for(c=0;c<N;c++)
                {
                    A[c ][z]=A[c ][Index];
                }
            for(c=0;c<N;c++)
                {
                    A[c ][Index]=V[c ];
                }
 
             // Матрица изменена распечатаем
        printf("\n\nNEW matrix\n");
        for(i=0;i<N;i++)
            {
                printf("\n");
                for(j=0;j<M;j++)
                    {
                      printf("%.3f ",A[i][j]);
                    }
            }
 
        }
}
//прямой и обратный ход
for(x=0,z=0;x<N;x++,z++)
{
    K=A[x][z];
    for(j=z;j<=M;j++)
        {
           A[x][j]=A[x][j]/K;
        }
    Q=A[x][z];
    for(i=x+1;i<=N;i++)
        {
           A[i][z]=A[i][z]-Q*A[i][z];
        }
}

for(x=N-1,z=M-2;x!=0,z!=0;z=z-1,x=x-1)
{
        Q=A[x][z];
        for(i=x-1;i>=0;i=i-1)
            {
                A[i][z]=A[i][z]-Q*A[i][z];
            }
}
 
    printf("\n\nSTUPENCHATYI VID \n");
    for(i=0;i<N;i++)
        {
        printf("\n");
        for(j=0;j<M;j++)
            {
              printf("%.3f ",A[i][j]);
            }
        }
   //печатаем корни
    printf("\n\n");
    for(i=0;i<N;i++)
        {
            Q=A[i][M-1];
            printf("x=%f\n",Q);
        }
}

Решение задачи: «Правильно оформить двумерный динамический массив. Программа "метод Гаусса"»

textual
Листинг программы
for (int i=0; i < n; ++i) free(arr[i]);
free(arr);

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

В данном коде происходит освобождение памяти, выделенной под двумерный динамический массив.

  1. Создается двумерный динамический массив arr с помощью функции malloc.
  2. В цикле for происходит освобождение памяти для каждого элемента массива arr.
    • Вызывается функция free для каждого элемента массива arr[i].
  3. После окончания цикла for, освобождается память, выделенная под сам массив arr.
    • Вызывается функция free для переменной arr.

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


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

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

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