Wskaźniki i odwołanie do tablic w funkcji.

0
#include <stdio.h>
#include <stdlib.h>

int column_statistics(const int *ptr, int width, int height, int column_id,
                      int* max, int* min, float *avg);
int row_statistics(const int *ptr, int width, int height, int row_id, int* max,
                   int* min, float *avg);

 int main()
 {
    int i = 0, j = 0;
    int tab[5][5];
    const int *ptr = &tab[0][0];
    int width = 5;
    int height = 5;
    int column_id;
    int max=0, *pmax = &max;
    int min=0, *pmin = &min;
    float avg, *pavg = &avg;
    //float *ptab = &tab[0][0];
    for (i=0; i<5; i++){
        for (j=0;j<5;j++)
    {
       //scanf("%d", &*(*(tab+i)+j)); //wprowadzanie przez uzytkownika
       *(*(tab+i)+j)=5; // tymczasowo bo mi sie nie chce pisac
    }}
    for (i=0; i<5; i++)
	{
        for (j=0;j<5;j++)
    	{
      		printf("%d  |  ", *(*(tab+i)+j));
   		}
		printf("\n");
	}
    for (i=0; i<5; i++)
	{
    	column_statistics(&tab[0][0],5,5,i,&max,&min,&avg);
		printf("\n");
	}
	for (i=0; i<5; i++)
	{
    	row_statistics(&tab[0][0],5,5,i,&max,&min,&avg);
		printf("\n");
	}


     return 0;
 }

int column_statistics(const int *ptr, int width, int height, int column_id,
                      int* max, int* min, float *avg)
    {
        *max = *(ptr+column_id*1+0);
        //*avg = *max;
        for (int i=1; i<height; i++)
			{
            	if (*(ptr+column_id)+i>*max)
            	    {
             	       *max = *(ptr+column_id)+i;
             	       *avg += *(ptr+column_id)+i;
             	    }
				*avg = *avg / i;
			}
        *min = *(ptr+column_id*1+0);
        for (int i=1; i<height; i++)
			{
          	  if (*(ptr+column_id)+i<*min)
           		   {
          	          *min = *(ptr+column_id)+i;
         	       }
			}
		printf("Kolumna:: Max: %d  Min: %d  Avg: %.2f  ", *max,*min,*avg);

        return 0;
    }
int row_statistics(const int *ptr, int width, int height, int row_id, int* max,
                   int* min, float *avg)
    {
        *max = *(ptr+0*1+row_id);
        *avg = *max;
        for (int i=1; i<width; i++)
			{
            	if (*(ptr+i*1+row_id)>*max)
            	    {
             	       *max = *(ptr+i*1+row_id);
             	       *avg += *(ptr+i*1+row_id);
             	    }
				*avg = *avg / i;
			}
        *min = *(ptr+0*1+row_id);
        for (int i=1; i<width; i++)
			{
          	  if (*(ptr+i*1+row_id)<*min)
           		   {
          	          *min = *(ptr+i*1+row_id);
         	       }
			}
		printf("Wiersz:: Max: %d  Min: %d  Avg: %.2f  ", *max,*min,*avg);

        return 0;


        return 0;
    }

Chodzi o statystyki macierzy, nie wiem gdzie popełniłem błąd. :C
Funkcje nie liczą poprawnie zadanych wartości a mianowicie maximum minimum i sredniej
zaczynam dopiero i nie mogę sobie poradzić z tym :/

0

Źle obliczasz przesunięcia wskaźnika (wszędzie?). Raz liczysz jakbyś miał tablice wskaźników na tablicę int'ów a innym razem dodajesz jakieś stałe które nic nie dają.
Licząc średnią:

for (int i=1; i<height; i++)
            {
                if (*(ptr+column_id)+i>*max)
                    {
                       *max = *(ptr+column_id)+i;
                       *avg += *(ptr+column_id)+i;  //ta linia poza warunek
                    }
                *avg = *avg / i;  //ta linia poza pętlę
            }

Masz zmienne width i height. Używaj ich.

0
int column_statistics(const int *ptr, int width, int height, int column_id,
                      int* max, int* min, float *avg)
    {
    	int l=1;
        *max = *(ptr+column_id*1+0);
        *avg = *max;
        for (int i=1; i<height; i++)
			{
            	if (*(ptr+column_id+(height*i))>*max)
            	    {
             	       *max = *(ptr+column_id+(height*i));
             	    }
             	*avg += *(ptr+column_id+(height*i));
             	l+=1;
			}
		*avg = *avg / l;
        *min = *(ptr+column_id*1+0);
        for (int i=1; i<height; i++)
			{
          	  if (*(ptr+column_id+(height*i))<*min)
           		   {
          	          *min = *(ptr+column_id+(height*i));
         	       }
			}
		printf("Kolumna:: Max: %d  Min: %d  Avg: %.2f  ", *max,*min,*avg);

        return 0;
    }
int row_statistics(const int *ptr, int width, int height, int row_id, int* max,
                   int* min, float *avg)
    {
        *max = *(ptr+0*1+row_id);
        *avg = *max;
        int l=1;
        for (int i=1; i<width; i++)
			{
            	if (*(ptr+i+width*row_id)>*max)
            	    {
             	       *max = *(ptr+i+width*row_id);
             	    }
             	*avg += *(ptr+i+width*row_id);
             	l+=1;
			}
		*avg = *avg / l;
        *min = *(ptr+width*row_id);
        for (int i=1; i<width; i++)
			{
          	  if (*(ptr+i+width*row_id)<*min)
           		   {
          	          *min = *(ptr+i+width*row_id);
         	       }
			}
		printf("Wiersz:: Max: %d  Min: %d  Avg: %.2f  ", *max,*min,*avg);


        return 0;
    }

zrobiłem tak, może pięknie nie jest ale działa :D dziękuje za wskazówki bardzo pomogły (y)

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