[C] Tablica: szukanie najmniejszej wartości w kolumnie

0

Jest to mój pierwszy post, wiec witam. Piszę program który wypełnia tablice losowymi wartościami. W części losowania i wyswietlania wszystko działa, ale chciałem rozszerzyć program do pokazwania np. minimalnej wartości w kolumnie 1, lub liczenia średniej z kolumny 2. Obecnie pracuje nad wyświetleniem warości minimalnej, ale nie działa to tak jak powinno. Za każdym razem wyrzucona wartość minimum to jakaś bzdura. Czy ktoś mógłby wskazać ewentualny błąd i pomóc mi z tym? Piszę w Microsoft Visual Studio 2012 Ultimate. A oto kod:

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

#define RAND_MAX
int main (void)
{
	srand(time(NULL));
	int min=0;
	int g;
	int a[4][4];
   int h, t, i, j;
 
   //wyswietlenie losowych wartosci w kolejnych komorkach 
   for(h=0;h<4;h++)
   {
		for(t=0;t<4;t++)
		{
			g=(1+rand()%50);
         printf("wylosowana liczba w komorce a[%d][%d] to: %d\n",h,t,g);
		} 
   }
   //szukanie elementu mnimalnego
   	   min = a[1][1];
   for (i=1; i<h;i++)
   {
	   for(j=1; j<t;j++)
	   {
		   if (min > a[i][j])
		   {
			   min = a[i][j];
		   }
	   }
   }
   printf("Najnizsza wartosc to %d\n",min);
   system("pause");
   return 0;
}
0
  min = a[0][0];
  for (i=0; i<h;i++)
    for(j=0; j<t;j++)
      if (min > a[i][j])
         min = a[i][j];
0

Do powyższego dodam że losujesz wartości, ale nigdzie nie "dajesz" ich do tablicy (więc są tam wartości "losowe" ale inne niż ty wylosowałeś). Te 2 poprawki i powinno działać dobrze.

1

Całość jest absolutnie do bani.

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

#define Size 4
int main()
  {
   int min,y,x,a[Size][Size];
 
   srand(time(NULL));
   for(y=0;y<Size;++y) for(x=0;x<Size;++x) printf("a[%d][%d] to: %d\n",y,x,a[y][x]=(1+rand()%50));
   min=a[0][0]; // przeważnie bierze się [0][0]
   for(y=0;y<Size;++y) for(x=0;x<Size;++x) if(min>a[y][x]) min=a[y][x];
   printf("Najnizsza wartosc to %d\n",min);
   system("pause");
   return 0;
  }
0

Hmm, dzięki za wyprowadzenie z błędu. Szkoda, ze wczesniej tutaj nie napisałem, bo straciłem przez to sporą część wolnego czasu w okresie śwatecznym. Mam tylko jeszcze jedno pytanie w takim razie. Jak liczyć średnią elementów w jednej konkretnej kolumnie? Z liczeniem sredniej na tablicy jednowymiarowej problemu nie mam, ale jak próbuje przenieść pomysł do tego programu to niestety nie wiem jak ograniczyć zliczanie do tylko jednej kolumny.

0

a[i_czyli_iterator_petli][Wybrana_Kolumna_Z_Ktorej_Licze_Srednia]

0
int w_ktorej = 2;
  int i, suma = 0;
  for(i = 0; i < 4; ++i)
    suma = suma + (a[w_ktorej][i]); //nie wiem, czy w C jest operator+=
  long double srednia = suma/4.;

Czy tam (a[i][w_ktorej]), bo tak wlasciwie, to tablica dwuwymiarowa nie ma kolumn, wiec to kwestia interpretacji.

0
int w_ktorym = 2;
int *pw=&a[w_ktorym][0];
int i,suma=0;
for(i=0;i<4;++i) suma+=pw[i];
double srednia=suma/4.;

Wydaje mi się że w C long double jeszcze nie było ale nie jestem pewien na temat C99, może @Endrju się wypowie.

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