• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Program wyświetlający podaną liczbę najbliżej średniej z podanych liczb

0 głosów
108 wizyt
pytanie zadane 19 października 2018 w C i C++ przez Shimeo7 Obywatel (1,910 p.)

Cześć w programie użytkownik ma podać 5 liczb. Następnie program ma obliczyć średnią z podanych liczb i ,,powiedzieć", która z podanych liczb jest najbliżej średniej. No i właśnie jest spory problem, z którym nie mogę sobie poradzić, za długo już siedzę nad tym kodem ;/ Otóż dla licz 1.5 3.14 7.5 1.25 3.42 kod działa jak się należy(podaje liczbę najbliżej średniej), ale dla liczb -55 -44 -33 11 22 program działa, ale nie podaje właściwej liczby. Proszę o pomoc, najlepiej jak zmodyfikować istniejący już kod.

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
    float liczba[5];
    float m, suma = 0;

    cout << "Podaj 5 liczb zmiennoprzecinkowych" << endl;

    for(int i = 0; i < 5; i++)
    {
       cin >> liczba[i];
       suma = suma + liczba[i];
    }

    system("cls");
    cout << "Wypisane przez Ciebie liczby to: ";
    for(int i = 0; i < 5; i++)
    {
        cout << liczba[i] << " ";
    }
    cout << endl << "Suma = " << suma << endl;
    m = suma/5;
    cout << "Srednia = " << m << endl;
    //3.42 = srednia = m
    // x = roznica

    float lib[5];

    for(int i = 0; i < 5; i++)
    {
        if(liczba[i] < m)
        {
            lib[i] = m - liczba[i];
            liczba[i];
        }
        else if(liczba[i] >= m)
        {
            lib[i] = liczba[i] - m;
            liczba[i];
        }
    }

    for(int i = 0; i < 5; i++)
    {
        cout << lib[i] << endl;
    }

    float por, co;
    por = lib[0]; //roznica miedzy wczytana liczba, a srednia
    co = liczba[0]; // liczba bedaca najblizej sredniej

    for( int i = 0; i < 5; i++)
    {
        if(lib[i+1] < por)
        {
            por = lib[i+1];
            co = liczba[i+1];
        }
    }

    cout << endl << por << " " << co;



    return 0;
}

 

 

2 odpowiedzi

0 głosów
odpowiedź 19 października 2018 przez mhdv Obywatel (1,580 p.)
wybrane 19 października 2018 przez Shimeo7
 
Najlepsza
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
int main()
{
    float liczba[5];
    float m, suma = 0;
 
    cout << "Podaj 5 liczb zmiennoprzecinkowych" << endl;
 
    for(int i = 0; i < 5; i++)
    {
       cin >> liczba[i];
       suma = suma + liczba[i];
    }
 
    system("cls");
    cout << "Wypisane przez Ciebie liczby to: ";
    for(int i = 0; i < 5; i++)
    {
        cout << liczba[i] << " ";
    }
    cout << endl << "Suma = " << suma << endl;
    m = suma/5;
    cout << "Srednia = " << m << endl;
    //3.42 = srednia = m
    // x = roznica
 
    float lib[5];
 
    for(int i = 0; i < 5; i++)
    {
        if(liczba[i] < m)
        {
            lib[i] = m - liczba[i]; // po co tu było "liczba[i];"?
        }
        else if(liczba[i] >= m)
        {
            lib[i] = liczba[i] - m; // po co tu było "liczba[i];"?
        }
    }
 
    for(int i = 0; i < 5; i++)
    {
        cout << lib[i] << endl;
    }
 
    float por, co;
    por = lib[0]; //roznica miedzy wczytana liczba, a srednia
    co = liczba[0]; // liczba bedaca najblizej sredniej
 
    for( int i = 0; i < 5; i++)
    {
        if(lib[i] < por)
        {
            por = lib[i]; // z i+1 zdaje się że wychodziłeś poza zakres tablicy :))
            co = liczba[i];
        }
    }
 
    cout << endl << por << " " << co;
 
 
 
    return 0;
}

 

0 głosów
odpowiedź 19 października 2018 przez PanRik Gaduła (4,510 p.)

1. Linia 38 i 43:
 

liczba[i];

Co to robi?

2.

if(lib[i+1] < por)
        {
            por = lib[i+1];
            co = liczba[i+1];
        }

Jeśli jest do 5, czyli wielkości tablicy to i+1 spowoduje wyjście po za zakres tablicy.

komentarz 19 października 2018 przez Shimeo7 Obywatel (1,910 p.)
liczba[i] jest podaną przez nas liczbą

Hmmm, masz racje wyjdzie poza tablice, ale dlaczego działa dla pierwszego przykładu liczb, a dla liczb ujemnych ten program nie działa
komentarz 19 października 2018 przez PanRik Gaduła (4,510 p.)

Czysty przypadek. Ogólnie kiedy wyjdziemy po za zakres tablicy to mamy "niezdefiniowane" zachowanie. Mogło się zdarzyć tak , że akurat pod adresem tym wychodzącym z zakresu jest jakaś liczba, która wcale nam nie zepsuje wyniku, a w innym przypadku nam zepsuje. Prawdopodobnie jakbyś odpalił program na innym komputerze albo nawet zresetował swój to może by było tak , że Twój drugi przykład działa, a pierwszy nie.

Edit: Jeżeli byś kompilował program z: -Wall to zobaczył byś:

Podobne pytania

0 głosów
1 odpowiedź 109 wizyt
0 głosów
3 odpowiedzi 162 wizyt

88,661 zapytań

137,269 odpowiedzi

306,597 komentarzy

58,863 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...