• 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

Object Storage Arubacloud
0 głosów
347 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ź 513 wizyt
0 głosów
3 odpowiedzi 614 wizyt

92,550 zapytań

141,394 odpowiedzi

319,522 komentarzy

61,935 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...