Возникли проблемы при извлечении информации из массива внутри функции для печати гистограммы (C ++) - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь распечатать гистограмму, основанную на значениях, помещенных в массив.Я чувствую, что я близко, но у меня возникают проблемы с извлечением информации из массива, хранящегося в функции гистограммы, которая создает массив гистограмм (bin).

Стандартное отклонение также вычисляется, но это не то, с чем у меня проблемы.Спасибо за ваше время.

Вот мой код:

#include <iostream>
#include <cmath>
using namespace std;

double mean(int size, int* numbers); 
double sDeviation(int numOfScores, int average, int* scores);
int* histogram(int numOfScores, int* scores);//<<Here is the call to the histogram function

int main()
{
int count = 0;
int scores[100];

while (true)
{
    int scoreToBeEntered;
    cout << "Please enter a score between 0 and 109: ";
    cin >> scoreToBeEntered;

    if(scoreToBeEntered < 0)
        cout << "No value entered" << endl;
    else if(scoreToBeEntered != -1)
        scores[count++] = scoreToBeEntered;
    else
        break;
}

for(int i = 9; i >= 0; i--)//Here is where the issue starts
{   
    cout << i << "|" << endl;
    for (int k = 0; k < bin[i]; k++) 
    {
        cout << '*'; 
    }
    cout << endl;//<< This is the chunk of code where I think the issue is. 
}

cout << "SD: " << sDeviation(count, mean(count, scores), scores) << endl;

system("pause");
return 0;
}

int* histogram(int numOfScores, int* scores)
{
int* bin = new int[10];
for(int i = 0; i < numOfScores; i++)
    if(scores[i] >= 90)
    {
        bin[9]++;
    }
    else if (scores[i] >= 80 && scores[i] < 90)
    {
        bin[8]++;
    }
    else if (scores[i] >= 70 && scores[i] < 80)
    {
        bin[7]++;
    }
    else if (scores[i] >= 60 && scores[i] < 70)
    {
        bin[6]++;
    }
    else if (scores[i] >= 50 && scores[i] < 60)
    {
        bin[5]++;
    }
    else if (scores[i] >= 40 && scores[i] < 50)
    {
        bin[4]++;
    }
    else if (scores[i] >= 30 && scores[i] < 40)
    {
        bin[3]++;
    }
    else if (scores[i] >= 20 && scores[i] < 30)
    {
        bin[2]++;
    }
    else if (scores[i] >= 10 && scores[i] < 20)
    {
        bin[1]++;
    }
    else if (scores[i] >= 0 && scores[i] < 10)
    {
        bin[0]++;
    }

    return bin; 

}   


double sDeviation(int numOfScores, int average, int* scores)
{
double deviation = 0;

for (int i = 0; i < numOfScores; i++)
    deviation += pow(scores[i] - average, 2);

return sqrt(deviation / numOfScores);
}

double mean(int size, int* numbers)
{
double sum = 0;

for (int i = 0; i < size; i++)
    sum += numbers[i];

return sum / size;
}

Это вывод, который мой код должен выдавать потом.

Случай 1: 100, 95, 90, 85, 80, 75, 70, 65, 60, 40, 20 и 5.

9 |***
8 |**
7 |**
6 |**
5 |
4 |*
3 |
2 |*
1 |
0 |*

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...