Witam mam pewien problem dotyczący macierzy. Alokuję tablicę dwuwymiarową, wczytuję z klawiatury dane, wyświetlam powstałą macierz.
#include <stdlib.h>
#include <stdio.h>
float **utworz_macierz(int w, int k)
{
float **m;
int i;
m = (float **) malloc(w * sizeof(float*));
if(m == NULL) return NULL;
for(i=0 ; i<w ; i++)
{
m[i] = (float *) malloc(k *sizeof(float));
if(m[i]==NULL)
{
/* sprzatanie juz przydzielonej pamieci */
zwolnij_macierz(m,i);
return NULL;
}
}
return m;
}
void wyswietl_macierz(float **m,int w,int k)
{
int i,j;
for(i=0 ; i<w ; i++)
{
for(j=0 ; j<k ; j++)
printf(" %6.1f", *(*(m+i)+j) );
printf("\n");
}
}
float** wczytaj_macierz(float **m,int w,int k)
{
int i,j;
for(i=0 ; i<w ; i++)
{
for(j=0 ; j<k ; j++)
{
printf(" [%d,%d] = ", i,j);
scanf("%f",*(m+i)+j);
}
}
return m;
}
void zwolnij_macierz(float **m, int w)
{
while(--w > 0) free(*(m+w));
free(m);
}
int main(int argc, char** argv)
{
float **m;
int w,k;
printf("Podaj wymiary macierzy:");
scanf("%d %d",&w,&k);
m = utworz_macierz(w,k);
wyswietl_macierz(wczytaj_macierz(m,w,k),w,k);
zwolnij_macierz(m,w);
}
Chciałabym wykonać na niej jakieś proste operacje np. obliczyć średnią arytmetyczną elementów i tutaj pojawia się problem. Nie wiem gdzie dokładnie popełniam błąd. Ktoś może coś doradzić i wytłumaczyć błędy?
void LiczSrednia( float **m,int w, int k, float srednia, int suma)
{
int i, j;
suma=0;
for (i=0; i<w; i++)
for (j=0; j<k; j++)
suma = suma + m[i][j];
srednia = (float ) suma/(w*k);
printf("Suma elementow: %d\n",suma);
printf("Srednia arytmetyczna: %f\n\n",srednia);
}