• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Funkcja licząca średnią arytmetyczną tablicy o wymiarach NXM-Problem z działaniem

HackNation - ogólnopolski hackathon
0 głosów
2,205 wizyt
pytanie zadane 11 stycznia 2018 w C i C++ przez mn130496 Gaduła (3,530 p.)

Witam 

Mam zadanie o następującej treści: 

Napisz program, ktory losuje do tablicy NxM liczby rzeczywiste, a nastepnie
oblicza średnia arytmetyczna liczb dodatnich zawartych w tablicy.

Napisałem taki kod programu:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void wstaw_losowo(int tab[3][3])
{
    int i,j;
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            tab[i][j]=rand()%50+(-25);
        }
    }
}
void wyswietl(int tab[3][3])
{
    int i,j;
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            printf("Element [%d,%d]=  %d  ", i,j,tab[i][j]);
        }
    }
}
int suma (int tab[3][3])
{
    int i,j,suma=0;
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            if(tab[i][j]>0)
            {
                suma=suma+tab[i][j];
            }
        }
    }
    return(suma);
}
int liczba(int tab[3][3])
{
    int i,j,ile;
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            if(tab[i][j]>0)
                ile++;
        }
    }
    return(ile);
}
int srednia(int tab[3][3])
{
    int i,j,sr=0;
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            sr=sr+suma(tab)/liczba(tab);
        }
    }
    return(sr);
}
int main(void)
{
    int tab[3][3],wynik;
    srand(time(NULL));
    wstaw_losowo(tab);
    wyswietl(tab);
    wynik=srednia(tab);
    printf("srednia wynosi: %d ",wynik);
    return (0);
}

Problem polega na tym , że w momencie jak wyświetlam  program to za każdym razem pokazuje mi ,że średnia wynosi 0.Czy ktoś może mi pomóc znaleźć   i poprawić ten błąd?.Dodam jeszcze , że program mam napisać w języku c.Z góry dzięki 

1 odpowiedź

+1 głos
odpowiedź 11 stycznia 2018 przez niezalogowany
wybrane 11 stycznia 2018 przez mn130496
 
Najlepsza

Zmienna ile w funkcji liczba nie jest zainicjowana. Średnia arytmetyczna to suma wszystkich elementów podzielona przez ich ilość. Funkcja licząca średnią arytmetyczną powinna zwracać float (lub double) i korzystać z rzutowania na ten typ, aby nie tracić części po przecinku w przypadku dzielenia dwóch intów (1/2 = 0, ale 1.0/2.0 = 0.5):

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

void wstaw_losowo(int tab[3][3])
{
	int i, j;
	for (i = 0; i<3; i++)
	{
		for (j = 0; j<3; j++)
		{
			tab[i][j] = rand() % 50 + (-25);
		}
	}
}

void wyswietl(int tab[3][3])
{
	int i, j;
	for (i = 0; i<3; i++)
	{
		for (j = 0; j<3; j++)
		{
			printf("Element [%d,%d] = %d \n", i, j, tab[i][j]);
		}
	}
}

int suma(int tab[3][3])
{
	int i, j, suma = 0;
	for (i = 0; i<3; i++)
	{
		for (j = 0; j<3; j++)
		{
			if (tab[i][j]>0) // taki wymóg zadania?
			{
				suma = suma + tab[i][j];
			}
		}
	}
	return suma;
}

int ile_dodatnich(int tab[3][3])
{
	int i, j, ile = 0;
	for (i = 0; i<3; i++)
	{
		for (j = 0; j<3; j++)
		{
			if (tab[i][j] > 0)
			{
				ile++;
			}
		}
	}
	return ile;
}

float srednia(int tab[3][3])
{
	return (float) suma(tab) / ile_dodatnich(tab);
}

int main(void)
{
	int tab[3][3];
	srand(time(NULL));
	wstaw_losowo(tab);
	wyswietl(tab);
	float wynik = srednia(tab);
	printf("Srednia wynosi: %f ", wynik);
	return 0;
}
komentarz 11 stycznia 2018 przez mn130496 Gaduła (3,530 p.)

ok wszystko działa jak należy dziękuję ci bardzo za pomoc.

pozdrawiam.

komentarz 11 stycznia 2018 przez niezalogowany
Proszę bardzo. Pozdrawiam!

Podobne pytania

0 głosów
2 odpowiedzi 2,022 wizyt
+1 głos
1 odpowiedź 1,786 wizyt
pytanie zadane 20 listopada 2017 w C i C++ przez artur96 Początkujący (250 p.)
0 głosów
1 odpowiedź 912 wizyt
pytanie zadane 25 listopada 2017 w C i C++ przez artur96 Początkujący (250 p.)

93,608 zapytań

142,531 odpowiedzi

323,004 komentarzy

63,102 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...