ostatnia faza zadania - wybór najbliższej liczby od średniej

0

Problem jest taki, że program po podaniu mu z palca 5 cyfr wskazuje poprawnie na największą z nich oraz oblicza średnią. Dodatkowo ma on za zadanie wskazać liczbę, która jest w najbliższej odległości od średniej z tym, że chce, aby uwzględniał taki przypadek kiedy mając średnią np 10 i w ciągu podanych liczb znajduje się 11 i 9 , aby program pokazywał, że te dwie liczby są w takiej samej odległości od 10 czyi mojej średniej. To co zrobiłem do tej porty bez tej ostatniej funkcjonalności:

#include <iostream>

using namespace std;

void wpisz (float *tab, int liczba)
{
    for( int i = 0; i < liczba; i ++)
    
        cin >> tab[i];
}

float srednia (float *tab, int ile)
{
    float suma = 0;
    float srednia = 0;
    for( int i = 0; i < ile; i++)
        suma+=tab[i];
    
    return srednia = suma / ile;
    //cout << "srednia wynosi = " << srednia << endl;
}

float porownanie(float *tab, int ile)
{
    
    float bufor = tab[0];
    
    for( int i = 0; i < ile; i ++)
        
        if (bufor < tab[i])
            bufor = tab[i];
    
    return bufor;
}

void najblizsza(float *tab, int rozmiar, float srednia)
{
    // ???
}


int main()
{
    float tab[5];
    
    cerr << "Podaj 5 dowolnych liczb " << endl;
    
    wpisz(tab,5);
    srednia(tab, 5);
    cout << "największa wartos z opdanych = " << porownanie(tab, 5) << endl;
    
    najblizsza(tab, 5);
    

    return 0;
} 
0
  1. Radzę nazywać zmienne i funkcje w języku angielskim (ba przy okazji słówek się nauczysz)
  2. Nie używaj i++ kiedy możesz użyć ++i, bo ten brzydki nawyk się zemści. W pętlach jak najbardziej ++i pasuje.
  3. Oblicz najpierw w osobnej pętli najmniejszą odległość od średniej, w kolejnej pętli wypisuj/notuj/kopiuj wartości które mają dokładnie taką odległość.
  4. Czy przypadkiem na wejściu tego zadania nie są liczby całkowite dodatnie?
0

ok, będę stosował się do wskazówek. OK, na razie nie wiem czemu ma się zemścić i++, ale posłucham bardziej doświadczonego kolegi i będę pisał ++i skoro to różnica. Co do liczb, mogą być dowolne, również ujemne.

0

zrobiłem coś takiego

void najblizsza(float *tab, int rozmiar)
{
    float avg = srednia(tab, rozmiar);
    cout << "wartos srednia to = " << avg << endl;
    float lower;
    
    for (int i = 0; i < rozmiar; ++i)
    {
        if (abs(avg - tab[i]) <= avg)
            lower = tab[i] ;
    }
    cout << "najblizsza wartosc = " << lower << endl;
    
    for (int i = 0; i < rozmiar; ++i)
    {
        if (lower == (abs(avg - tab[i])))
        
        cout << "Najblizsza wartosc od " << avg << " jest = " << tab[i] << endl; // tego w ogóle mi nie wyświetla, nie wiem dalczego
    }
} 

to dobrze liczy jeśli nie mamy przypadku, że np od średniej 5 oddalone tak samo o jeden sa 4 i 5. Ta pętla wyświetli tylko jeden wynik.

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