Średnia z dwuwymiarowej tablicy w C

0

Witam,
jestem na tym forum od niedawna i już potrzebuję pomocy :D 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 :D 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:

#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}
                      };
int i,j,tab2[row];
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");
printf("Srednia: ");  
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=3;i<4;i++)
    {
    tab2[i]=(tab[1][3]+tab[2][3]+tab[3][3]+tab[4][3]+tab[5][3]+tab[6][3]+tab[7][3]+tab[8][3]+tab[9][3]+tab[10][3])/12;
    printf("%5i ",tab2[i]); 
    }  
for(i=4;i<5;i++)
    {
    tab2[i]=(tab[1][4]+tab[2][4]+tab[3][4]+tab[4][4]+tab[5][4]+tab[6][4]+tab[7][4]+tab[8][4]+tab[9][4]+tab[10][4])/12;
    printf("%5i ",tab2[i]); 
    }  
for(i=5;i<6;i++)
    {
    tab2[i]=(tab[1][5]+tab[2][5]+tab[3][5]+tab[4][5]+tab[5][5]+tab[6][5]+tab[7][5]+tab[8][5]+tab[9][5]+tab[10][5])/12;
    printf("%5i ",tab2[i]); 
    } 
for(i=6;i<7;i++)
    {
    tab2[i]=(tab[1][6]+tab[2][6]+tab[3][6]+tab[4][6]+tab[5][6]+tab[6][6]+tab[7][6]+tab[8][6]+tab[9][6]+tab[10][6])/12;
    printf("%5i ",tab2[i]); 
    }  
for(i=7;i<8;i++)
    {
    tab2[i]=(tab[1][7]+tab[2][7]+tab[3][7]+tab[4][7]+tab[5][7]+tab[6][7]+tab[7][7]+tab[8][7]+tab[9][7]+tab[10][7])/12;
    printf("%5i ",tab2[i]); 
    }  
for(i=8;i<9;i++)
    {
    tab2[i]=(tab[1][8]+tab[2][8]+tab[3][8]+tab[4][8]+tab[5][8]+tab[6][8]+tab[7][8]+tab[8][8]+tab[9][8]+tab[10][8])/12;
    printf("%5i ",tab2[i]); 
    }  
for(i=9;i<10;i++)
    {
    tab2[i]=(tab[1][9]+tab[2][9]+tab[3][9]+tab[4][9]+tab[5][9]+tab[6][9]+tab[7][9]+tab[8][9]+tab[9][9]+tab[10][9])/12;
    printf("%5i ",tab2[i]); 
    }  
for(i=10;i<11;i++)
    {
    tab2[i]=(tab[1][10]+tab[2][10]+tab[3][10]+tab[4][10]+tab[5][10]+tab[6][10]+tab[7][10]+tab[8][10]+tab[9][10]+tab[10][10])/12;
    printf("%5i ",tab2[i]); 
    } 
for(i=11;i<12;i++)
    {
    tab2[i]=(tab[1][11]+tab[2][11]+tab[3][11]+tab[4][11]+tab[5][11]+tab[6][11]+tab[7][11]+tab[8][11]+tab[9][11]+tab[10][11])/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]); 
    }          
printf("\n");
getchar();
}

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

dodanie znacznika <code class="c"> - fp

3
  1. Daj większy odstęp pomiędzy pętlami, tak ze trzy wierszy
  2. Wydrukuj ten kod
  3. Potnij na paski - na jednym pasku - jeden for
  4. Przykładaj paski do siebie parami i patrząc na światło przez dwa paski zaznacz miejsca w których się różnią
  5. Znowu rozłóż paski w pierwotnym porządku i spróbuj znaleźć regułę
0

@kicia0kocia Witaj! Zostajesz na forum na dłużej czy tylko na chwile? :)
Tak na szybko:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stddef.h>

#define		NOF_MONTHS		12
void fill_rnd_years(int (*temperatures)[NOF_MONTHS],int year_start, int year_end) {
	unsigned nyear,nmonth;
	srand((unsigned)time(NULL));
	for(nyear=0;nyear<(year_end-year_start);nyear++)
		for(nmonth=0;nmonth<NOF_MONTHS;nmonth++)
			temperatures[nyear][nmonth] = -80 + rand()/(RAND_MAX/(80 + 80 + 1)+ 1);
			/* losuje temperatury z zakresu -80 80 */
}

void print_avg_years(int (*temperatures)[NOF_MONTHS],int year_start, int year_end) {
	unsigned nyear,nmonth;
	int months_sum;
	for(nyear=0;nyear<(year_end-year_start);nyear++) {
		for(nmonth=0,months_sum=0;nmonth<NOF_MONTHS;nmonth++)
			months_sum += temperatures[nyear][nmonth];
		printf("rok %d , srednia: %.2f °C\n",year_start+nyear,(float)months_sum/(float)NOF_MONTHS);
	}
}

#define		NOF_YEARS		10
int main(void) {
	int temperatures[NOF_YEARS][NOF_MONTHS];
	fill_rnd_years(temperatures,2000,2010);
	print_avg_years(temperatures,2000,2010);
	return 0;
}

Założyłam, że miesięczne temperatury to liczby całkowite. Jeżeli rozumiesz angielski powinnaś sobie poradzić (zostało Ci tylko ich wypisanie).

0

@karolinaa Spóźniłaś się @kicia0kocia już dostała rozwiązanie: http://forum.dobreprogramy.pl/temat/457722-%C5%9Brednia-z-dwuwymiarowej-tablicy-w-c/
W związku z czym nadal pozostanie nieukiem.

0
_13th_Dragon napisał(a):

@karolinaa Spóźniłaś się @kicia0kocia już dostała rozwiązanie: http://forum.dobreprogramy.pl/temat/457722-%C5%9Brednia-z-dwuwymiarowej-tablicy-w-c/
W związku z czym nadal pozostanie nieukiem.

Wcale nie jestem nieukiem. Dopiero zaczęłam to całe programowanie, nie miałam w tego liceum. Chyba więcej już na tym forum nie będę pisać, skoro zawsze, gdy mam problem to będę tak traktowana.
Do widzenia

1

Zrobiłam w końcu. Sama.

#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();
} 

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