Создание гистограммы для отображения количества элементов в каждой категории / корзине со звездами - PullRequest
0 голосов
/ 22 октября 2019

При следующих значениях теста мне нужна моя программа для вывода этой гистограммы.

Значения: 30, 40, 45, 102, 35, 42, 65, 89, 55, 48, 56, 46,42, 54, 56, 51, 47, 50, 51, 50, 50, 47, 52, 53, 47, 44, 69, 35, 40, 45, 35, 42, 65, 55, 48, 100, 56,46, 42, 54, 56, 51, 47, 50, 51, 50, 50, 47, 52, 53, 47, 78, 80 и 95

Histogram: 
 9| ***
 8| **
 7| *
 6| ***
 5| **********************
 4| *******************
 3| ****
 2|
 1|
 0|
SD: 15.2579

Эта программа также должна найтистандартное отклонение введенных значений, а также среднее значение. Инструкция запрашивает четыре различные функции, которые должны быть в программе: главное, среднее, отклонение и гистограмма. Можно использовать только iomanip и iostream, а также заголовочные файлы, такие как, и никакие глобальные переменные не допускаются.

Вот полные инструкции по назначению:

Используйте только функции iostream и iomanip для ввода-вывода и форматирования (без stdio) - но можете использовать другие заголовочные файлы, такие как Ваша программа будет иметь четыре функции: основная гистограмма среднего отклонения

main

Определите переменную для ведения подсчета количества введенных баллов и инициализируйте ее как 0

Определитемассив результатов (массив результатов не нужно инициализировать)

Допускается максимальное (не общее) значение в 100 очков

Считывание списка целых чисел из консоли по одному и за разкаждое целое число в массиве баллов

Ни один из введенных баллов не будет <0 </p>

Счетчик приращений для каждого счёта, считанного и сохраненного в массиве баллов

Остановить ввод данных иначать вычисления, когда пользователь вводит -1 (не включайте -1 в данные)

Вызовите функцию гистограммы (передайте все необходимые аргументы)

Распечатайте гистограммуm (функция гистограммы заполняет и возвращает массив бинов, но вы должны вывести гистограмму в main

. Вызвать функцию отклонения, которая возвращает стандартное отклонение. Печать стандартного отклонения (шаги j и k могут быть объединены в одинзаявление при желании)

среднее

Укажите все необходимые аргументы

Возвращает двойное значение, которое является средним или средним из баллов

отклонение

Укажите любые аргументы, которые вам нужны

Верните двойное значение, которое является стандартным отклонением баллов

гистограмма (функция гистограммы заполняет и возвращает массив бинов - она ​​НЕ печатает гистограмму)

Рассчитывает гистограмму (т.е. заполняет, но не печатает массив бинов)

ВозвращаетМассив из функции представляет особую проблему. В тексте представлена ​​проблема и три возможных решения.

Каждый элемент в массиве бинов на самом деле является аккумулятором и поэтому должен быть инициализирован равным 0.

Сгруппируйте оценки в гистограмме следующим образом:

Bin 9: score ≥ 90
Bin 8: score ≥ 80 but < 90
Bin 7: score ≥ 70 but < 80
    .
    .
    .
Bin 1: score ≥ 10 but < 20
Bin 0: score < 10

Обратите внимание, что некоторые оценки во входных данных включают дополнительные кредиты (т. Е.> 100);Ваша программа должна работать на баллы до 109.

Вот мой код до сих пор

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

double mean(double array[], int count);
double SD(double array[], int count);
void histogram(double array[], int count, int* bin);

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

for (int i = 0; i < 100; i++)
{
    array[i] = 100;
}

int bin[10]{};
for (int b = 0; b < 10; b++)
{
    bin[b] = 0;
}

while (true)
{
    double score;
    cout << "Please enter scores (-1 to end): ";
    cin >> score;
    if (score != -1)
        array[count++] = score;
    else
        break;
}

cout << "Mean = " << mean(array, count) << endl;
cout << "SD = " << SD(array, count) << endl;
cout << "Count = " << count << endl;
cout << bin;

}

double mean(double array[], int count)
{
double sum = 0;

for (int i = 0; i < count; i++)
    sum += array[i];

double mean = sum / count;
return mean;
}   

double SD(double array[], int count)
{
double SD = 0;
for (int i = 0; i < count; ++i)
    SD += pow(array[i] - mean(array, count), 2);
return sqrt(SD / count);
}

void histogram(double array[], int count, int* bin)
{
for (int i = 0; i < count; i++)
{
    int Bin = array[i] / 10;
    if (Bin > 9)
        Bin = 9;
    bin[Bin]++;
}

}

Я думаю, что у меня есть настройки среднего и стандартного отклоненияхорошо, но я мог бы использовать некоторые указания с двумя другими функциями (гистограмма и главная). Мой вопрос сейчас, как я должен присваивать значения из массива категориям бина? Спасибо!

1 Ответ

0 голосов
/ 22 октября 2019

Код близок к тому, что нужно, но еще нет.

Для инициализации bin достаточно простого

int bin[10] {};

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

Вам также необходимо изменить прототип и определение histogram из-за несоответствия типов:

void histogram(double array[], int count, int* bin) {
//             ^^^^^^

Я не буду писать код, который фактически печатает гистограммы, но, учитывая ограничения, вы можете захотеть взглянуть на std :: setw и std :: setfill.

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