Wkleisz cały kod? Może będzie prościej.
Na pewno =+
, a nie +=
? Może czegoś już nie pamiętam, ale wydaje mi się, że powinno być +=
?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
double **macierzDouble(int iloscWierszy, int iloscKolumn){
double **tab;
int i;
tab=(double **) malloc( iloscWierszy*sizeof(double *) );
if(tab==NULL) {
fprintf(stderr,"Brak pamieci !\n");
exit(1); }
tab[0]=(double *) malloc( iloscWierszy*iloscKolumn*sizeof(double) );
if(tab[0]==NULL) {
fprintf(stderr,"Brak pamieci !\n");
free(tab);
exit(1); }
for(i=1; i<iloscWierszy; i++)
tab[i]=tab[i-1]+iloscKolumn;
return tab;
}
void zwolnijMacierzDouble(double **tablica){
free(tablica[0]);
free(tablica);
}
void wyswietlMacierzDouble(double **t, int w_Max, int k_Max){
int wiersz, kolumna;
for(wiersz=0; wiersz<w_Max; wiersz++)
for(kolumna=0; kolumna<k_Max; kolumna++)
printf("[%d][%d]=%.1f%c", wiersz, kolumna, t[wiersz][kolumna],
kolumna==k_Max-1 ? '\n' : '\t');
}
void wyswietlWektorDouble(double *t, int k_Max){
int wiersz, kolumna;
for(kolumna=0; kolumna<k_Max; kolumna++)
printf("[%d]=%.1f%c", kolumna, t[kolumna]+wiersz*k_Max+kolumna,
kolumna==k_Max-1 ? '\n' : '\t');
}
void mnozenie(double **macierz, double *wektor, double *wynik, int wier, int k)
{ int o, p;
for(p=0;p<k;p++)
{
for(o=0;o<wier;o++)
{
wynik[p] = wynik[p] + wektor[o] * macierz[o][p];
}
printf("[%d]=%.1f\t", p, wynik[p]);
}
}
void main()
{
double *wektor, **macierz, *wynik;
int kol, k, m, n, i;
double x;
wektor =(double *) malloc( kol*sizeof(double *) );
if(wektor==NULL) {
fprintf(stderr,"Brak pamieci !\n");
exit(1); }
wynik =(double *) malloc( k*sizeof(double *) );
if(wynik==NULL) {
fprintf(stderr,"Brak pamieci !\n");
exit(1); }
printf("Wektor * macierz\n\n");
printf("podaj ilosc kolumn wektora i ilosc kolumn mnozonej macierzy: \n");
scanf("%d\n %d", &kol, &k);
printf("\nwektor\n");
srand( time( NULL ) );
for (i=0; i<kol; i++)
{
wektor[i]=(double)rand();
}
wyswietlWektorDouble(wektor,kol);
printf("\n");
printf("\nmacierz\n");
macierz=macierzDouble(kol,k);
srand( time( NULL ) );
for(m=0; m<kol; m++)
{
for(n=0; n<k; n++)
{
macierz[m][n] = (double)rand();
}
}
wyswietlMacierzDouble(macierz,kol,k);
printf("\n");
printf("\n");
mnozenie(macierz, wektor, wynik, kol,k);
zwolnijMacierzDouble(macierz);
free(wektor);
}
Zamień kolejność pętli, w drugiej macierzy musisz lecieć po wierszach, a nie kolumnach. I zmień nazwy zmiennych, bo mylą strasznie.
for (p = 0; p < k; ++p)
for (o = 0; o < wier; ++o)
To niestety niezbyt pomogło.