Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z sumowaniem liczb z tablicy.

Ostatnio zmodyfikowano 2017-01-06 15:03
Autor Wiadomość
arsen358
Temat założony przez niniejszego użytkownika
Problem z sumowaniem liczb z tablicy.
» 2017-01-06 14:42:41
Treść zadania:
Wylosuj 16 liczb float z zakresu 0..9 i wpisz do tablicy. Wypisz tablicę. Oblicz średnią wszystkich wartości większych, niż 5. Wypisz tę średnią.

Doszedłem do tego etapu:

C/C++
#include <iostream>
#include <windows.h>
#include <time.h>

using namespace std;

float tab[ 10 ], liczba, a, b, suma = 0;

int main()
{
    cout << "Oto 16 wylosowanych liczb:" << endl;
    a = 0, b = 9;
    srand( time( 0 ) );
    for( int i = 0; i < 16; i++ )
    {
        tab[ i ] = a +( float ) rand() / RAND_MAX *( b - a );
        cout << tab[ i ] << endl;
    }
    cout << "---" << endl;
    for( int i = 0; i < 16; i++ )
    {
        if( tab[ i ] > 5 )
        {
            suma = suma + tab[ i ];
            cout << tab[ i ] << endl;
        }
    }
    cout << "Suma: " << suma << endl;
    return 0;
}



I tu mam problem. Suma liczb większych od 5 wychodzi dziwaczna. Raz jest jest sporo za mała od rzeczywistej, następnym razem liczba wychodzi koło 100000. Gdzie leży błąd? Z góry bardzo dziękuje za wszystkie komentarze.[/i]
P-156093
Gibas11
» 2017-01-06 14:53:30
1. Nie używaj zmiennych globalnych ani
using namespace std;
.
2. Zadeklarowałeś nieużywaną zmienną 'liczba'.
3. Do sumowania użyj std::accumulate.
C/C++
suma = std::accumulate( tab, tab + 10, 0.f,[]( float total, float i ) {
    if( i > 5 ) {
        total += i;
    }
   
    return total;
} );
4. Iterujesz w pierwszej pętli po 16 elementach 10-elementowej tablicy.
P-156095
mokrowski
» 2017-01-06 14:56:48
Jak napisał @Gibas11, iterowałeś po 16 elementach 10 elementowej tablicy. Od indeksu 10 do 15 mogły być śmieci stąd niedorzeczna średnia. Ja dodam jeszcze od siebie:
5. Nazywaj zmienne tak aby było wiadomo o co chodzi (a i b to złe nazwy).
6. Deklaruj stałą z ilością indeksów zamiast wpisywać pracowicie wszędzie 16.
P-156097
arsen358
Temat założony przez niniejszego użytkownika
Dzięki wielkie
» 2017-01-06 15:03:30
Głupi błąd ale prawdopodobnie bez Waszej pomocy nie wpadłbym na niego. Będę próbował zastosować Wasze uwagi. Jeszcze raz wielkie dzięki!
P-156100
« 1 »
  Strona 1 z 1