liczba z wartoscia najbardziej zblizona do obliczonej sredniej arytmetycznej
c++: proboje zrobic program w c++,w ktorym podaje się 5. liczb, program liczy srednia z tych 5.
liczb i ma znalezc z podanych liczb, liczbe najblizsza sredniej
prosilbym JEDYNIE o wskazówki
29 cze 15:53
c++: PS: moim celem jest wykonanie tego programu jedynie na bibliotece iostream
29 cze 15:55
jakubs: Czego nie wiesz ?
Tworzysz tablicę, dodajesz 5 elementow, liczysz srednia i pozniej np. w jakiejś pętli
sprawdzasz.
29 cze 15:58
c++: nie potrafie znalezc liczby, ktora bylaby najblizszej sredniej
29 cze 16:00
c++: probowalem cos z roznica sredniej i podanej liczby, ale nie zawsze znajduje poprawnie
29 cze 16:01
jakubs: Nie wiem czy to będzie najlepsze rozwiązanie, ale możesz utworzyć tymczasową tablicę i wrzucić
do niej różnice tych podanych liczb i średniej. Później znaleźć element najmniejszy i będziesz
wiedział, pod którym indeksem w tablicy jest liczba najbliższa średniej.
29 cze 16:02
c++: tak probowalem, ale tez nie wychodzi bo jesli np. srednia x = 50 i zalozmy ze mamy tylko
a=50
b=100
c=−50
d=−100
to wtedy kolejno:
50−20= 30
50−100= −50
50−(−20)= 70
50−(−100)= 150
i program wtedy pokazuje na "100" bo wtedy roznica jest najmniejsza, a poprawna odp to '20'
podobnie sie to ma, gdy srednia jest ujemna
29 cze 16:13
c++: chyba, ze nie to miales na mysli to wtedy nie wiem
29 cze 16:16
jc: Umieszczamy elementy w tablicy: x[0], x[1], ..., x[n−1]. s = śrdenia
d = x[0] − s;
j = 0;
if( d < 0) d = −d;
for(i = 1; i < n; i++){
p = x[i] − s;
if( p < 0 ) p = − p;
if( p < d ) { d = p; j = i; }
}
x[ j ] będzie leżał najbliżej średniej
29 cze 16:30
c++: GENIALNE! dzieki
29 cze 22:28
c++: a masz moze pomysl na rownie sprytnie kawałek kodu aby program pokazywał 2.
mozliwosci(oczywiscie jesli sie trafia na zasadzie ex aequo) ?
30 cze 00:02
jc: Dla 5 elementów to pewnie można coś specjalnego wymyśleć.
Ostatecznie 5 elementów można posortować, a wtedy wszystko staje się prostsze.
30 cze 00:32
c++: tak tez pokombinuje, dzieki
30 cze 00:50
Dziadek Mróz:
#include <iostream>
int m_abs(int);
int main(int argc, char* argv[])
{
int *tab = new int[5];
int X = 0;
for (size_t i = 0; i < 5; i++)
{
std::cin >> tab[i];
X += tab[i];
}
X /= 5;
std::cout << "Srednia: " << X << std::endl;
int d = m_abs(X − tab[0]);
for (size_t i = 1; i < 5; i++)
{
d = m_abs(X − tab[i]) < d ? m_abs(X − tab[i]) : d;
}
std::cout << d << std::endl;
delete[] tab;
return 0;
}
int m_abs(int x)
{
if (x < 0)
{
return −x;
}
else
{
return x;
}
}
30 cze 12:11
c++: co prawda moj kompilator nie kompiluje Twojego kodu, ale z tego co widze to chyba podany
program nie uwzglednia sytuacji ex aequo, a to jest moim problemem bo glowny "mechanizm"
swietnie mi juz przedstawil jc
1 lip 20:12
c++: mam juz "zarys" rozwiazania tj. sortowanie babelkowe, ale dopiero za chwile jak sie go naucze
1 lip 20:17
jc: Właśnie zauważyłem, że jak się kopiuje, to minus nie jest prawidłowym minusem,
aby działało nalezy skasować skopiowany minus i wpisać nowy z klawiatury.
Jak już mamy najmniejszą odległość, w programie oznaczoną literą d,
to możemy przejść całą tablicę w poszukiwaniu elementów leżących w odległości d od średniej.
for(int i = 0; i < n; i++) if ( x[ i ] == s − d || x[ i ] == s + d ) cout << x[i] << endl;
Może się jednak pojawić problem związany z błedami numerycznymi ...
1 lip 22:07
Dziadek Mróz:
proboje zrobic program w c++,w ktorym podaje się 5. liczb, program liczy srednia z tych 5.
liczb i ma znalezc z podanych liczb, liczbe najblizsza sredniej
można jeszcze inaczej:
int liczba = tab[0];
int d = m_abs(X − tab[0]);
for (size_t i = 1; i < 5; i++)
{
m_abs(X − tab[i]) < d ? (d = m_abs(X − tab[i]), liczba = tab[i]) : 0;
}
std::cout << "d: " << d << " liczba: " << liczba << std::endl;
Dla zbiorów:
1.
tab: −3 −1 −5 0 −5
Srednia: −2
d: 1 liczba: −3
2.
tab: 7 9 −9 −6 7
Srednia: 1
d: 6 liczba: 7
3.
tab: 7 6 2 2 2
Srednia: 3
d: 1 liczba: 2
4.
tab: −9 −2 6 7 5
Srednia: 1
d: 3 liczba: −2
2 lip 13:38