Нужно сформировать матрицу отдельной функцией таким образом: функция получает двойной указатель на матрицу и указатели на ее
размерность. В теле функции вводится размерность матрицы, выделяется память в
куче и заполняется указанной формулой. .
вот что делаю я:
void form(float **C, int *n, int *m, float a, float b, float c)
{int i,j;
printf("Input size of matrix: ");
scanf("%d %d",&n,&m);
*C=(float*)malloc((*n)*(*m)*sizeof(float));
for(i=0;i<*n;i++)
for(j=0;j<*m;j++)
*(*C+i*(*m)+j)=a*powf(i,2)+b*powf(j,2)+c;
}
Это неправильно сформирован динамический массив, т. к. выдает ошибку. Как правильно? и как потом вызвать это в главной функции?
Другие языки программирования и технологии
Помогите с программой на Си. (создание многомерных динамических массивов)
#include <stdio.h>
#include <stdlib.h>
float** create(int*, int*);
void destroy(float**, int*);
void print(float**, int*, int*);
int main() {
float** pmx = NULL;
int rows, cols;
if (pmx = create(&rows, &cols)) {
print(pmx, &rows, &cols);
destroy(pmx, &rows);
pmx = NULL;
} else printf("\a\n Error!\n");
fflush(stdin);
getchar();
}
void print(float** pmx, int* rows, int* cols) {
int row, col;
for (row = 0; row < *rows; ++row, printf("\n"))
for (col = 0; col < *cols; ++col)
printf(" %f", pmx[row][col]);
printf("\n");
}
float** create(int* rows, int* cols) {
float** ptr = NULL;
printf(" Rows: "); scanf_s("%i", rows);
printf(" Cols: "); scanf_s("%i", cols);
if (ptr = (float**)calloc(*rows, sizeof(float*))) {
int row, r;
for (row = 0; row < *rows; ++row) {
if (ptr[row] = (float*)calloc(*cols, sizeof(float)));
else {
for (r = 0; r < row; ++r) free(ptr[r]);
free(ptr);
ptr = NULL;
break;
}
}
}
return ptr;
}
void destroy(float** pmx, int* rows) {
if (pmx) {
int row;
for (row = 0; row < *rows; ++row) free(pmx[row]);
free(pmx);
}
}
#include <stdlib.h>
float** create(int*, int*);
void destroy(float**, int*);
void print(float**, int*, int*);
int main() {
float** pmx = NULL;
int rows, cols;
if (pmx = create(&rows, &cols)) {
print(pmx, &rows, &cols);
destroy(pmx, &rows);
pmx = NULL;
} else printf("\a\n Error!\n");
fflush(stdin);
getchar();
}
void print(float** pmx, int* rows, int* cols) {
int row, col;
for (row = 0; row < *rows; ++row, printf("\n"))
for (col = 0; col < *cols; ++col)
printf(" %f", pmx[row][col]);
printf("\n");
}
float** create(int* rows, int* cols) {
float** ptr = NULL;
printf(" Rows: "); scanf_s("%i", rows);
printf(" Cols: "); scanf_s("%i", cols);
if (ptr = (float**)calloc(*rows, sizeof(float*))) {
int row, r;
for (row = 0; row < *rows; ++row) {
if (ptr[row] = (float*)calloc(*cols, sizeof(float)));
else {
for (r = 0; r < row; ++r) free(ptr[r]);
free(ptr);
ptr = NULL;
break;
}
}
}
return ptr;
}
void destroy(float** pmx, int* rows) {
if (pmx) {
int row;
for (row = 0; row < *rows; ++row) free(pmx[row]);
free(pmx);
}
}
Если нужен именно float **С, то делаем так
С=new float* [m];
for(int i=0;i < m;i++) C[ i ]=new float [n];
тогда нужно писать С[ i ][ j ]=блаблабла
удаляем - в обратном порядке:
for(int i=0;i < m;i++) delete C[ i ];
delete C;
Если же нужен float*С, то убери лишнюю звездочку в заголовке, и вроде должно заработать.
Есть вот такой полезный динамический макрос:
#define C (x,y) C [ (x)+m*(y) ]
теперь можно будет писать
С(i,j) = блаблабла
С=new float* [m];
for(int i=0;i < m;i++) C[ i ]=new float [n];
тогда нужно писать С[ i ][ j ]=блаблабла
удаляем - в обратном порядке:
for(int i=0;i < m;i++) delete C[ i ];
delete C;
Если же нужен float*С, то убери лишнюю звездочку в заголовке, и вроде должно заработать.
Есть вот такой полезный динамический макрос:
#define C (x,y) C [ (x)+m*(y) ]
теперь можно будет писать
С(i,j) = блаблабла
Это что за извращенный код, никогда такого не видел, весь исправлять не буду, но память вы точно неправильно выделяете, нужно так
float *C
....
C = (float *)malloc(n*m*sizeof(float));
....
free(С);
исправляйте все, включая неправильную передачу параметров в функцию
void form(float *C, int n, int m, float a, float b, float c)
....
и сам код где, что-то присваиваете тоже неправильный
for(i=0;i
float *C
....
C = (float *)malloc(n*m*sizeof(float));
....
free(С);
исправляйте все, включая неправильную передачу параметров в функцию
void form(float *C, int n, int m, float a, float b, float c)
....
и сам код где, что-то присваиваете тоже неправильный
for(i=0;i
Похожие вопросы
- С++: Как изменять размеры многомерных динамических массивов по ходу выполнения программы?
- Вычислить сумму нечетных элементов в программа С++ .Через статический и динамический массив! Вот я сам написал проверьте
- Помогите с программой на си! Программа в описании
- Помогите написать программу на с++ Циклический сдвиг элементов массива вправо Массив 20 элементов, random
- Помогите с программой на Си/Си++
- Помогите написать программу на Си
- Помогите написать программу на с++: из 2х отсортированных массивов получить новый, отсортированный в том же порядке
- помогите написать программу на Си
- Помогите откомпилировать программу(язык Си)
- помогите написать программу на си