Переделать код под динамический массив - C (СИ)
Формулировка задачи:
В коде используется статический массив. А как записать в динамическом?
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define n 5
void create(float A[][n], float x)
{int i, j;
for(i=0;i<n;++i)
{for(j=0;j<n;++j)
{A[i][j]=((sin(i+j+2))*x);
}}}
void zammax(float A[][n])
{int i, j, t, max[n];
for(i=0;i<n;++i)
{max[i]=0;
for(j=0;j<n;++j)
{if (A[i][j]>A[i][max[i]]) max[i]=j;
}A[i][j]=fabs(A[i][i]);
}}
void otrpw3(float A[][n])
{int i, j;
for(i=0;i<n;++i)
{for(j=0;j<n;++j)
{if (A[i][j]<0)
A[i][j]=pow(A[i][j],3);
}}}
void sort(float A[][n])
{int i, j, k;
float temp;
for(i=0;i<n;++i)
{do
{k=0;
for(j=0;j<n-1;++j)
{if(A[i][j]>A[i][j+1])
{temp=A[i][j];
A[i][j]=A[i][j+1];
A[i][j+1]=temp;
k++;
}}}while(k);
}}
void print(float A[][n])
{int i, j;
for(i=0;i<n;i++)
{printf("\n");
for(j=0;j<n;j++)
{printf("%7.6f\t", A[i][j]);
}}}
int main()
{float x, A[n][n];
do{printf("Vvedite x: ");
scanf("%f",&x);
create(A,x);
zammax(A);
otrpw3(A);
sort(A);
print(A);
getch();
printf("\n");
}while(x!=0);
return 0;
}Решение задачи: «Переделать код под динамический массив»
textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define n 5
void create(float ** A, float x)
{
int i, j;
for (i = 0; i<n; ++i)
{
for (j = 0; j<n; ++j)
{
A[i][j] = ((sinf(i + j + 2))*x);
}
}
}
void zammax(float ** A)
{
int i, j, t, max[n];
for (i = 0; i<n; ++i)
{
max[i] = 0;
for (j = 0; j<n; ++j)
{
if (A[i][j]>A[i][max[i]]) max[i] = j;
}A[i][j] = fabs(A[i][i]);
}
}
void otrpw3(float ** A)
{
int i, j;
for (i = 0; i<n; ++i)
{
for (j = 0; j<n; ++j)
{
if (A[i][j]<0)
A[i][j] = pow(A[i][j], 3);
}
}
}
void sort(float ** A)
{
int i, j, k;
float temp;
for (i = 0; i<n; ++i)
{
do
{
k = 0;
for (j = 0; j<n - 1; ++j)
{
if (A[i][j]>A[i][j + 1])
{
temp = A[i][j];
A[i][j] = A[i][j + 1];
A[i][j + 1] = temp;
k++;
}
}
} while (k);
}
}
void print(float ** A)
{
int i, j;
for (i = 0; i<n; i++)
{
printf("\n");
for (j = 0; j<n; j++)
{
printf("%7.6f\t", A[i][j]);
}
}
}
int main()
{
float x;
float ** A = new float * [n];
for (int i = 0; i < n; i++)
A[i] = new float[n];
do{
printf("Vvedite x: ");
scanf("%f", &x);
create(A, x);
zammax(A);
otrpw3(A);
sort(A);
print(A);
getch();
printf("\n");
} while (x != 0);
return 0;
}
Объяснение кода листинга программы
- Программа использует динамический массив для хранения информации.
- Пользователю предлагается ввести значение переменной x.
- Значение x используется в функции create для вычисления значений матрицы A.
- Функция zammax используется для поиска максимального значения в каждой строке матрицы A и сохранения индекса этого значения в массиве max.
- Функция otrpw3 используется для возведения каждого отрицательного значения в матрице A в куб.
- Функция sort используется для сортировки значений в каждой строке матрицы A в порядке возрастания.
- Функция print используется для отображения значений матрицы A на экране.
- После выполнения всех операций программа запрашивает у пользователя новое значение x или завершает цикл, если x равно нулю.