Liczba najblizej sredniej liczby podanych przez uzytkownika

0

Mam pytanie jak przeksztalcic ten kod aby zadziałał? Tresc zadania jest taka, aby uzytkownik podał 5 liczb i zeby zwrocilo ta liczbe ktora jest najbliżej sredniej tych liczb.Generalnie chciałem zrobić to podobnym sposobem jak pan Mirosław Zelent w filmie W 11.00 minucie pokazany jest ten sposob.

#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;

float liczby[4];
float srednia,suma,najmn;

int main()
{
for(int i=0;i<5;i++)
   {
       cout<< "Podaj "<<i+1<< " liczbe: ";
        cin>> liczby[i];
        suma+=liczby[i];
   }
   srednia=suma/5;
cout<< "srednia liczb: "<<srednia<<endl;
float najmni;
najmn=liczby[0]-srednia;
if (fabs(liczby[1]-srednia<najmn)) najmn=liczby[1];//(najmn=abs(liczby[1]-srednia));
if (fabs(liczby[2]-srednia<najmn)) najmn=liczby[2];//(najmn=abs(liczby[2]-srednia));
if (fabs(liczby[3]-srednia<najmn)) najmn=liczby[3];//(najmn=abs(liczby[3]-srednia));
if (fabs(liczby[4]-srednia<najmn)) najmn=liczby[4];//(najmn=abs(liczby[4]-srednia));
cout<<najmn<<endl;


cout<< "Podana przez ciebie liczba ktora jest najblizej sredniej wszystkich podanych przez ciebie liczb to : "<<najmn<<endl;

  return 0;
}

4

A jak każą ci rozszerzyć tablicę do 100 tyś elementów, to będziesz mieć kod na 100 tyś wierszy?

najmn=fabs(liczby[0]-srednia);
for(...)
   najmn=min(najmn,fabs(liczby[i]-srednia));
0

Może taki kod będzie dla ciebie bardziej zrozumiały choć nie polecam pisać w taki sposób, ale wynajdywanie koła na nowo mimo wszystko uczy. Dla ćwiczenia przyjrzyj i zoptymalizuj ten paskudny kod używając funkcji wbudowanych typu abs() itp.

#include <iostream>

#include <iostream>

void bliskosredniej()
{
    const int rozmiar = 5;
    double liczba[rozmiar];
    double srednia;
    double suma;
    double roznica[rozmiar];
    double najmniejsza;
    double mojaliczba; // liczba najblizej sredniej
    int i;

    for (i = 0;i<rozmiar;i++)
    {
        std::cin>>liczba[i];
        suma+=liczba[i];
    }
    srednia = suma/rozmiar;
    for (i = 0;i<rozmiar;i++)
    {
        roznica[i] = srednia-liczba[i];
        if (roznica[i]<0)
        {
            roznica[i]=-roznica[i];      // wartosc bezwzgledna
        }
        if (i == 0 || roznica[i]<najmniejsza)
        {
            najmniejsza=roznica[i];
            mojaliczba=liczba[i];      // ustawanie liczby najbliżej średniej
        }
    }
    std::cout<<"Srednia z liczb wynosi: "<<srednia<<std::endl;
    for (i = 0; i<rozmiar; i++)
    {
        if ( roznica[i] == najmniejsza)  
        {
            mojaliczba=liczba[i];      
            std::cout<<"Liczba najblizej sredniej: "<<mojaliczba<<std::endl;   // wyświetlanie liczb najbliżej średniej (szczególny przypadek jak jest ich kilka)
        }
    }
}
0

Nadal masz:

  • http://forum.4programmers.net/1101404
  • używaj angielskich nazewnictw funkcji i zmiennych
  • deklaruj zmienne dopiero tam gdzie one są potrzebne
  • tworzenie dodatkowej tablicy różnić - mija się z celem (patrz niżej)
  • użyj using namespace std; aby nie używać litanii std:: nie wiem jaki idiot pierwszy powiedział że using namespace std; jest źle ale jeszcze żaden nie wytłumaczył czemu źle. Nawet jak zechcesz podmienić cout na jakiś własny to łatwiej to zrobić raz na początku pliku.
    int besti=0;
    double bsestv=0;
    for(int i=0;i<rozmiar;++i)
    {
        double diff=fabs(avg-values[i]);
        if((!i)||(bsestv>diff))
        {
            besti=i;
            bsestv=diff;
        }
    }
    cout<<"Liczba najblizej sredniej: "<<values[besti]<<endl;

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