Średnia z dwuwymiarowej tablicy w C

Witam,

jestem na tym forum od niedawna i już potrzebuję pomocy :smiley: Otóż mam zadanie z programowania, z którego zrobiłam połowę. Jego treść brzmi:

“Proszę utworzyć dwuwymiarową tablicę, w której można będzie zapisać średnie temperatury miesięczne ostatniej dekady (10 lat). Dane (temperatury) można sobie wymyślić i wypełnić nimi tablicę przy jej definiowaniu. W programie należy policzyć i wypisać średnie temperatury roczne poszczególnych lat i średnie temperatury za okres 10 lat dla poszczególnych miesięcy.”

No więc zrobiłam tę tablicę i dobrze mi liczy, tylko, że… Rozpisałam to na kilkanaście :smiley: pętli. Mój problem polega na tym, że nie wiem jak zapisać to wszystko jakby w jednym (wiem, że będzie jakaś pętla w pętli, ale próbowałam na różne sposoby i nie wychodzi jak trzeba).

Na razie liczy tylko średnie roczne temperatury. 

 

Oto moje wypociny:

 

 

Czy byłby ktoś tak miły i pomógłby mi zapisać to w jednym? :slight_smile:

To co chcesz uzyskać masz w obecnym kodzie (reszta porady w komentarzach) 

#include<stdio.h>
#include<stdlib.h>
#define row 11
#define col 13
int main()
{
int tab[row][col]={
                      {0000,1,2,3,4,5,6,7,8,9,10,11,12},
                      {2000,-3,5,10,17,23,28,29,27,23,20,16,7},
                      {2001,-7,-4,0,15,20,26,30,25,20,16,10,3},
                      {2002,1,-1,4,12,26,30,32,31,27,22,13,-1},
                      {2003,-15,-10,-4,13,22,26,29,27,23,18,16,0},
                      {2004,-12,-6,0,17,20,28,29,27,23,20,16,-10},
                      {2005,0,2,6,17,21,28,29,27,23,20,16,0},
                      {2006,-2,0,10,14,22,28,29,27,23,20,16,-7},
                      {2007,0,3,7,16,25,28,29,27,23,20,16,5},
                      {2008,0,5,8,12,20,28,29,27,23,20,16,0},
                      {2009,-10,-7,0,10,23,28,34,27,23,20,16,-12}
                      };
//tablicę powinniśmy zapełnij 0 by było do czego dodawać
int i,j,tab2[row]={0};
printf("Srednie temperatury w miesiacach:\n\n");
/*zauważ że w tej pętli już przechodzisz przez wszystkie elementy, liczmy więc przy okazji średnią*/
for(i=0;i<row;i++){
    for(j=0;j<col;j++){
		printf("%5i ",tab[i][j]);
		//sumujemy elementy wiersza do tablicy (poza 0)
		if(j!=0)tab2[i]+=tab[i][j];
    }
	//a przy końcu linii przelimy sumę przez ilość elementów, w naszym przypadku col-1
	tab2[i]/=(col-1);
	printf("\n\n");
}
printf("\n");
printf("Srednia: ");
//teraz jedną pętlą wyświetlamy wyniki
for(i=1;i<row;i++)
	printf("%d. %d\n",tab[0][i],tab2[i]);
}
for(i=1;i<2;i++)
    {
    tab2[i]=(tab[1][1]+tab[2][1]+tab[3][1]+tab[4][1]+tab[5][1]+tab[6][1]+tab[7][1]+tab[8][1]+tab[9][1]+tab[10][1])/12;
    printf("%i ",tab2[i]); 
    }    
for(i=2;i<3;i++)
    {
    tab2[i]=(tab[1][2]+tab[2][2]+tab[3][2]+tab[4][2]+tab[5][2]+tab[6][2]+tab[7][2]+tab[8][2]+tab[9][2]+tab[10][2])/12;
    printf("%5i ",tab2[i]); 
    }    
/* ... */
for(i=12;i<13;i++)
    {
    tab2[i]=(tab[1][12]+tab[2][12]+tab[3][12]+tab[4][12]+tab[5][12]+tab[6][12]+tab[7][12]+tab[8][12]+tab[9][12]+tab[10][12])/12;
    printf("%5i ",tab2[i]); 
    }

Każda z tych “pętli” wykonuje się dla tylko jednej wartości i.

Nie prościej napisać jedną pętlę, która wykona się kilka razy i użyć wartości i do określenia, które elementy tablicy sumować? :wink:

for(i=1;i<13;i++)
    {
    tab2[i]=(tab[1][i]+tab[2][i]+tab[3][i]+tab[4][i]+tab[5][i]+tab[6][i]+tab[7][i]+tab[8][i]+tab[9][i]+tab[10][i])/12;
    printf("%5i ",tab2[i]); 
    }

Następne usprawnienie:

for(i=1;i<13;i++)
{
    tab2[i] = 0; //Na początek wartość na 0
    for(j = 0; j < 11; ++i)
        tab2[i] += tab[j][i]; //W pętli dodajesz kolejne wartości
    tab2[i] /= 12; //Dzielimy sumę przez 12
    printf("%5i ",tab2[i]); 
}

Jak już od 1, bo mamy rok w pierwszej kolumnie.

//---------------------------------------------------------

w sumie u mnie jest na odwrót, liczy średnią z numerów dla miesięcy, ale 1if i będzie ok :slight_smile:

Dobra, udało mi się zrobić od nowa i bardziej po ludzku. Kurde,w sumie nie takie trudne jednak. Dzięki za wszelką pomoc :stuck_out_tongue:

#include<stdio.h>
#include<stdlib.h>
#define row 11
#define col 13
int main()
{
int tab[row][col]={{0000,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.},
                                   {2001,1,1,1,1,1,1,1,1,1,1,1,1},
                                   {2002,2,2,2,2,2,2,2,2,2,2,2,2},
                                   {2003,3,3,3,3,3,3,3,3,3,3,3,3},
                                   {2004,4,4,4,4,4,4,4,4,4,4,4,4},
                                   {2005,5,5,5,5,5,5,5,5,5,5,5,5},
                                   {2006,6,6,6,6,6,6,6,6,6,6,6,6},
                                   {2007,7,7,7,7,7,7,7,7,7,7,7,7},
                                   {2008,8,8,8,8,8,8,8,8,8,8,8,8},
                                   {2009,9,9,9,9,9,9,9,9,9,9,9,9},
                                   {2010,0,0,0,0,0,0,0,0,0,0,0,0}
                                   };
int i,j,a,b;
printf("Srednie temperatury w miesiacach:\n\n");
for(i=0;i<row;i++)
    {
    for(j=0;j<col;j++)
    {
    printf("%5i ",tab[i][j]);
    }
    printf("\n\n");
    }
printf("\n");
for (i=1;i<row;i++)
          {
          a= 0;                    
            for (j=1;j<col;j++)
              a = tab[i][j] + a;
              b=a/12;
              printf ("srednia temperatura w %i roku: %i\n",i+2000,b);
          }    
          printf ("\n");
      for (i=1;i<col;i++)
          {
          a= 0;                    
            for (j=1;j<row;j++)
              a = tab[j][i] + a;
              b=a/10;
              printf ("srednia temperatura w %i. miesiacu: %i\n",i,b);
          }  
printf("\n");
getchar();
}