Я пытаюсь распечатать гистограмму, основанную на значениях, помещенных в массив.Я чувствую, что я близко, но у меня возникают проблемы с извлечением информации из массива, хранящегося в функции гистограммы, которая создает массив гистограмм (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 |*