Witam mam problem z napisaniem programu, oto jego treść:
Dany jest ciąg a0,a1,a2,...an-1. Oblicz średnia arytmetyczną z wyrazów większych od zadanej liczby B.
Rozumiem że w zadaniu muszę podać przedział jakiś liczb (np. 30-40), a po wpisaniu liczby B (np. 35) program ma liczyć średnia wszystkich liczb większych od niej (czyli 36+37+38+39+40 : 5),
ale jak to mam zrobić to już większy problem ;/ Ktoś może pomóc ?
[C] Ciąg i srednia arytmetyczna
-
- Użytkownik
- Posty: 4094
- Rejestracja: 10 lut 2008, o 15:31
- Płeć: Mężczyzna
- Lokalizacja: Łódź
- Podziękował: 12 razy
- Pomógł: 805 razy
[C] Ciąg i srednia arytmetyczna
Czemu akurat przedział liczb? W zadaniu nie było o tym mowy.
Dane wejściowe: tablica T liczb zmiennoprzecinkowych, ilość elementów w tablicy N, liczba zmiennoprzecinkowa B
Dane wyjściowe: średnia elementów tablicy, które są większe od B
Napisałem funkcję w postaci pseudokodu.
Na początku deklarujesz dwie zmienne:
*suma: będziemy do niej dodawać (w pętli) liczby większe od B w tablicy (po zakończeniu pętli, wartość zmiennej suma będzie róna sumie wszystkich elementów tablicy większych od B)
*ilość: za każdym razem, kiedy do zmiennej suma dodamy liczbę z tablicy T, do tej zmiennej dodajemy jeden (na koniec, kiedy przejdziemy już całą tablicę, wartość zmiennej ilość będzie równa ilości liczb dodanych do zmiennej suma)
Jak wyżej opisałem w pętli przeszukujesz cąłą tablicę; kiedy natrafisz na liczbę większą od B, dodajesz tę liczbę do zmiennej suma, a zmienną ilość zwiększasz o jeden
Dlaczego funkcja ma zwrócić wartość wyrażenia suma/ilość, nie muszę chyba tłumaczyć.
Dane wejściowe: tablica T liczb zmiennoprzecinkowych, ilość elementów w tablicy N, liczba zmiennoprzecinkowa B
Dane wyjściowe: średnia elementów tablicy, które są większe od B
Kod: Zaznacz cały
float średnia(float *T, float B, int N)
{
float suma=0;
float ilość=0;
for(int i=0;i<N;i=i+1)
{
if(T[i]>B)
{
suma=suma+T[i];
ilość=ilość+1;
}
}
return suma/ilość;
}
Na początku deklarujesz dwie zmienne:
*suma: będziemy do niej dodawać (w pętli) liczby większe od B w tablicy (po zakończeniu pętli, wartość zmiennej suma będzie róna sumie wszystkich elementów tablicy większych od B)
*ilość: za każdym razem, kiedy do zmiennej suma dodamy liczbę z tablicy T, do tej zmiennej dodajemy jeden (na koniec, kiedy przejdziemy już całą tablicę, wartość zmiennej ilość będzie równa ilości liczb dodanych do zmiennej suma)
Jak wyżej opisałem w pętli przeszukujesz cąłą tablicę; kiedy natrafisz na liczbę większą od B, dodajesz tę liczbę do zmiennej suma, a zmienną ilość zwiększasz o jeden
Dlaczego funkcja ma zwrócić wartość wyrażenia suma/ilość, nie muszę chyba tłumaczyć.
[C] Ciąg i srednia arytmetyczna
Mhm czyli nie wybierać przedziału.. wystarczy że zadeklaruje jakąś tablice, wpisze B i niech sumuje liczby od niej większe ?
Spróbuje napisać zobaczymy co z tego wyjdzie
-- 12 sty 2010, o 23:29 --
Coś mi się udało napisać - zlepek wcześniejszych zadań i twoich wskazówek, ale nie chce działać, pewnie czegoś za dużo albo czegoś brak :/
wiesz co nie tak ?
-- 13 sty 2010, o 15:09 --.
Spróbuje napisać zobaczymy co z tego wyjdzie
-- 12 sty 2010, o 23:29 --
Coś mi się udało napisać - zlepek wcześniejszych zadań i twoich wskazówek, ale nie chce działać, pewnie czegoś za dużo albo czegoś brak :/
wiesz co nie tak ?
Kod: Zaznacz cały
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main ()
{
int i,n;
double t[50],suma,ilosc,liczba,srednia;
suma=0;
ilosc=0;
printf("Podaj liczbe B ");
scanf("%lf",&n);
for( i=0; i<n ;i=i+1)
scanf("%lf",&t[i]);
if (t[i]>n)
{
suma=suma+t[i];
ilosc=ilosc+1;
}
if (liczba!=0)
{
srednia=suma/ilosc;
printf("srednia wynosi %lf", srednia);
}
else
printf("Podales 0 ");
}