Правильно оформить двумерный динамический массив. Программа "метод Гаусса" - 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);
Объяснение кода листинга программы
В данном коде происходит освобождение памяти, выделенной под двумерный динамический массив.
- Создается двумерный динамический массив
arrс помощью функцииmalloc. - В цикле
forпроисходит освобождение памяти для каждого элемента массиваarr.- Вызывается функция
freeдля каждого элемента массиваarr[i].
- Вызывается функция
- После окончания цикла
for, освобождается память, выделенная под сам массивarr.- Вызывается функция
freeдля переменнойarr.
- Вызывается функция