• 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

VPS Starter Arubacloud
0 głosów
331 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ź 466 wizyt
0 głosów
3 odpowiedzi 573 wizyt

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...