• 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

VPS Starter Arubacloud
0 głosów
1,996 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 1,669 wizyt
+1 głos
1 odpowiedź 1,566 wizyt
pytanie zadane 20 listopada 2017 w C i C++ przez artur96 Początkujący (250 p.)
0 głosów
1 odpowiedź 739 wizyt
pytanie zadane 25 listopada 2017 w C i C++ przez artur96 Początkujący (250 p.)

93,032 zapytań

141,996 odpowiedzi

321,300 komentarzy

62,379 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...