2016-04-04 17 views
0

Ich versuche, ein Array zu erstellen, das 20 Zufallszahlen von 0-9 mit einem bestimmten Random-Seed generiert (was ich bereits habe), berechnet dann den Durchschnitt der generierten Zufallszahlen. Ich habe es bekommen, um das Array gut auszuführen, aber wenn ich gehe, um die Summe der Zufallszahlen zu berechnen, gibt es mir zurück -16. Ich habe an mehreren verschiedenen anderen Dingen sieht, um zu versuchen zu helfen, und sie alle haben die gleiche Sache, die ichDurchschnitt der zufälligen Array finden

for (i = 0; i < SIZE; i++) { 
      sum += num[SIZE];} 

jemand haben kann darauf hinweisen, was im falsch hier tun oder sonst wo im Programm?

#include <iostream> 
#include <cstdlib> 

using namespace std; 

int main() // Creates the array 
{ 
    srand(2622); // random seed 

    const int SIZE = 20; 
    int num[SIZE], i, sum = 0; 


    for (i = 0; i < 20; i++) { 
     cout << rand() % 10 << " : "; // generates random numbers 0-10 
    } 
     cout << endl; 

    for (i = 0; i < SIZE; i++) { 
     sum += num[SIZE]; 

    } 
     cout << sum << endl; 


    return 0; 

} 
+0

Der Zufallszahlengenerator erzeugt nur positive Zahlen? –

+0

Ja, es wird ausgedruckt 0 1 5 5 9 1 0 2 2 4 9 9 6 4 9 9 5 2 5 9 – mxrider29

+0

Es wäre interessant, num [SIZE] zu drucken, bevor der letzte for-cycle ausgeführt wird. – maxvv

Antwort

2

Sie sehen hier fehlt hier -

sum += num[SIZE]; should be sum += num[i]; 

#include <iostream> 
#include <cstdlib> 

using namespace std; 

int main() // Creates the array 
{ 
    srand(2622); // random seed 

    const int SIZE = 20; 
    int num[SIZE], i, sum = 0; 


    for (i = 0; i < 20; i++) { 
     num[i] = rand() % 10 ; 
     cout << num[i] << " : "; // generates random numbers 0-10 
    } 
     cout << endl; 

    for (i = 0; i < SIZE ; i++) { 
     sum += num[i]; 

    } 
     cout << sum << endl; 


    return 0; 

} 
+0

Danke, das war das Problem! – mxrider29

+1

Verwenden Sie "SIZE" überall – Ajay

0

Just for exposition, hier ist das gleiche Programm mit C++ 14 und idiomatische Verwendung der Standard-Bibliothek.

#include <iostream> 
#include <numeric> 
#include <random> 
#include <functional> 

using namespace std; 

template<class Iter> 
std::ostream& emit_range(std::ostream& os, Iter first, Iter last, 
         const char* inter_sep = " : ", 
         const char* terminator = "\n") 
{ 
    auto sep = ""; 
    while (first != last) { 
     os << sep << *first; 
     ++first; 
     sep = inter_sep; 
    } 
    return os << terminator; 
} 

int main() // Creates the array 
{ 
    // function object to create a pre-seeded pseudo-random sequence 
    auto next_number = [eng = std::default_random_engine(2622), 
       dist = std::uniform_int_distribution<int>(0, 9)]() mutable 
    { 
     return dist(eng); 
    }; 

    constexpr int SIZE = 20; 
    int num[SIZE]; 

    // generate the random numbers 
    std::generate(std::begin(num), std::end(num), next_number); 

    // compute the sum 
    auto sum = std::accumulate(std::begin(num), std::end(num), 0, 
           std::plus<>()); 

    // compute the average 
    auto average = double(sum)/SIZE; 

    // print results  
    emit_range(cout, std::begin(num), std::end(num)); 
    cout << sum << endl; 
    cout << average << endl; 


    return 0; 

} 

Ergebnisse:

1 : 9 : 6 : 6 : 3 : 0 : 3 : 6 : 7 : 1 : 7 : 2 : 1 : 8 : 0 : 0 : 2 : 6 : 1 : 9 
78 
3.9 
+0

Das Original ist viel besser lesbar. –

+0

@DonReba keinen Zweifel daran. –

Verwandte Themen