Mnożenie macierzy przez liczbe

0

Witam
Chce napisac funkcję, która mnozy macierz przez liczbę, a później za pomocą innej funkcji ją wypisać. Napisałam już funkcję, ale po wyswietleniu przemnożonej przez liczbę macierzy, wyskakują same zera. Co robię źle?
Moj kod:

#include <stdio.h>## 

#include <stdlib.h>## 

typedef struct matrix
{
	size_t nrow;
	size_t ncol;
	double **tab;	
}matrix;
matrix new_matrix (size_t rows, size_t cols, double array[rows][cols])
{
	matrix macierz;
	macierz.nrow=rows;
	macierz.ncol=cols;
	macierz.tab=(double**)malloc(sizeof(double)*macierz.ncol);
	
	for(int i=0; i<macierz.nrow; i++)
	{
		macierz.tab[i]=(double*) malloc (sizeof(double)*macierz.ncol);
	}
	for(int i=0; i<macierz.nrow; i++)
	{
	for(int j=0; j<macierz.ncol; j++)
		{
			macierz.tab[i][j]=array[i][j];
		}
	}
	return macierz;
}
void print_matrix (matrix a, FILE *stream, char sep)
{
	for(int i=0; i<a.nrow;i++)
	{
		for(int j=0; j<a.ncol; j++)
		{
			fprintf(stream, "%lf%c", a.tab[i][j], sep);
		}
		fprintf(stream, "\n");
	}
}
matrix multiply_matrix (matrix a, double b)
{
	a.tab=(double**)malloc(sizeof(double)*a.ncol);
	
	for(int i=0; i<a.nrow; i++)
	{
		a.tab[i]=(double*) malloc (sizeof(double)*a.ncol);
	}
	for(int i=0; i<a.nrow; i++)
	{
	for(int j=0; j<a.ncol; j++)
		{
			a.tab[i][j]=a.tab[i][j]*b;
		}
	}
	return a;
}
int main(void)
{
	matrix a;
	matrix b;
	double t[2][2]={{1,2}, {3,4}};
	a=new_matrix(2,2,t);
	b=multiply_matrix(a,4);
	print_matrix(b,stdout,'\t');
	fprintf(stdout,"\n");
return 0;
}```
0

To się w ogóle kompiluje? Z tego co pamiętam to matrix new_matrix (size_t rows, size_t cols, double array[rows][cols]) nie powinno działać i powinno raczej być array[][].

W multiply_matrix definiujesz nowa tablice i jej nie wypełniasz na początku co jest UB, a potem te śmieci mnozyzz przez jakąś wartość. To jeden z problemów

0

@Dregorio: Juz sobie poradziłam, ta wiadomosc mnie naprowadziła. Dziekuje ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1