это мой первый пост. Я работаю над лабораторией для своего класса CS II (это уже просрочено, поэтому на данный момент я не буду на это начислять очки, но мне все же хотелось бы понять, что я делаю неправильно, чтобы я может быть улучшена.Код нигде не близок к завершению, но я попал в зависание, которое мешает мне продолжать. Извиняюсь заранее, я очень ржавчу на этом, и до того, как я стал ржавым, я был очень новым. до 4 утра, пытаясь заставить это работать вчера вечером, поэтому мой код, вероятно, довольно гнусно выглядит на данный момент.Dynamically-Allocated Array Только сохранение первого из нескольких значений, генерируемых пользователем
Хорошо, так что моя проблема в том, что: при однократном выполнении кода, первая функция, getNoMonths
, работает отлично. Она запрашивает у пользователя количество месяцев продаж, на которые они хотели бы обрабатывать данные, и сохраняет номер в no_Months
еще в main
. Валидация для значения, которое должно быть твин 3 и 6 также отлично работает.
Когда мы добираемся до getSales
, возникает проблема. Функция запрашивает значения продаж в течение нескольких месяцев, определенных пользователем ранее. Кажется, что он отлично работает. Однако при ближайшем рассмотрении кажется, что только первое значение фактически хранится в sales
, который должен быть массивом, размер которого динамически распределяется в зависимости от того, сколько месяцев пользователь определил в течение getNoMonths
.
Я уверен, что все, что я делаю неправильно, невероятно просто, я чувствую это. Я снова просматриваю текст, пытаясь узнать как можно больше о том, как работают массивы и динамическое распределение памяти и указатели. Я получаю идеи позади них, но, как вы, наверное, видите, я действительно борюсь с реальной реализацией.
Я знаю, что мне нужно сделать здесь:
- создать массив для хранения данных о продажах за каждый месяц
- имеет размер этого массива соответствует числу месяцев, вводимой пользователь
... Я просто не уверен, как это сделать на самом деле. Я также знаю, что мне нужно иметь указатель, чтобы произошел второй пункт, но опять же, я не совсем понимаю, что именно мне нужно делать.
TL; Мне нужна помощь в получении этого массива sales
для хранения ВСЕХ значений, вводимых пользователем, а не только первым. Для этого мне, вероятно, понадобится помощь с настройкой указателя на динамическое выделение размера массива sales
, и желательно объяснение того, как, черт возьми, все это на самом деле помогает мне и не просто путается и избыточно, lol.
Исходный код следующим образом:
//Jesse Holland
//Lab1Out
//Processes Sales Data, Displays as a Bar Graph presentation
#include <iostream>
#include "graph1.h"
using namespace std;
//FUNCTION PROTOTYPES
int getNoMonths(int& no_months); //prompts for number of months of sales data to be processed
void getSales(int* sales, int no_months); //prompts for sales data, stores corresponding data in "sales"
int getMax(int* sales, int no_months, double & max); //maximum value for "sales" array
int getMin(int* sales, int no_months, double & min); //minimum value for "sales" array
double getAvg(int* sales, int no_months, double & avg); //computes avg of sales data stored in "sales" array
void displayResults(int* sales, int no_months, int max, int min, double avg); //displays bar chart diagram
//MAIN FUNCTION START
int main()
{
double max = 0;
double min = 0;
double avg = 0;
int no_months = 0;
//prompt for number of months
getNoMonths(no_months);
//variable declaration
int * sales = new int[no_months];
//prompt for sales data
getSales(sales, no_months);
//maximum value of "sales" array
getMax(sales, no_months, max);
//minimum value for "sales" array
getMin(sales, no_months, min);
//computes avg of sales data stored in "sales" array
getAvg(sales, no_months, avg);
//displays bar chart diagram in graphics window
displayResults(sales, no_months, max, min, avg);
return 0;
}
//FUNCTIONS IMPLEMENTATION START
int getNoMonths(int& no_months) // int* months)
{
do
{
cout << "Please enter the number of months you'd like to process: <must be at least 3, but no more than 6>:";
cin >> no_months;
//int* months = new int[no_months];
}while ((no_months < 3) || (no_months > 6));
return no_months;
}
void getSales(int* sales, int no_months)
{
int count = 0;
for (count = 0; count < no_months; count++)
{
cout << "Please enter sales for month #" << (count + 1) << ": ";
cin >> sales[count];
}
}
int getMax(int* sales, int no_months, double & max)
{
//int max = 0;
for(int count = 0; count < no_months, count++;)
{
if (sales[count] > max)
max = sales[count];
}
return max;
}
int getMin(int* sales, int no_months, double & min)
{
//int min = 0;
int count = 0;
for (count = 0; count < no_months; count++)
{
if (sales[count] < min)
min = sales[count];
}
return min;
}
double getAvg(int* sales, int no_months, double & avg)
{
int sum = 0;
for(int count = 0; count < no_months; count++)
sum += sales[count];
return avg = (sum/no_months);
}
void displayResults(int* sales, int no_months, int max, int min, double avg)
{
cout << "The maximum is " << max << ". \n";
cout << "The minimum is " << min << ". \n";
cout << "The average is " << avg << ". \n";
}
Благодаря очень, очень много заранее для любых и всех помощь. Я очень, очень зеленый вообще, и хотя я очень стараюсь это получить, это кажется невозможным. Я полна решимости узнать, как все это работает и уметь ПОНИМАТЬ его, чтобы я мог воспроизвести его сам, но сейчас мне нужна небольшая помощь. Трудно не иметь друзей, что ничего подобного в этом материале и профессора, который не очень заинтересован в том, чтобы сесть со мной и помочь мне разобраться в этом. Во всяком случае, я с нетерпением ожидаю услышать от вас, ребята, и, надеюсь, изучать некоторые вещи. Может быть, однажды я смогу научиться достаточно, чтобы иметь возможность вернуть пользу новым людям, чем я.
ОБНОВЛЕНИЕ: Обновлен исходный код; среднее значение вычисляется и выводится в настоящее время, но по-прежнему не может заставить max и min делать то же самое. Благодарим за помощь до сих пор, конечно, любой дополнительный вход будет оценен.
Существует два способа получить значение из функции. Верните его или выведите его через ссылочный (или указательный) параметр. В общем, не делайте одновременно оба. Выбери один. getMax не должен полагаться на правильное задание значения параметра max. max должна быть локальной переменной, равной 0. Ваша средняя функция не обновляет параметр avg по ссылке, но вы полагаетесь на это, чтобы вывести результат. Если вы не накладываете ни sum, ни no_months на тип с плавающей точкой, выполняется только целочисленное деление. –
@NeilKirk Спасибо за ввод. Быстрый вопрос, по «локальной переменной», вы имеете в виду, что мне нужно поставить «int max = 0;» ВНУТРИ функции getMax и НЕ внутри основного? –
@NeilKirk Также, как я могу обновить параметр avg по ссылке, как вы упомянули? Мне нужно было бы изменить «двойную avg» в прототипе функции и определении на «double & avg»? Наконец, вы могли бы немного подробнее рассказать о последнем фрагменте того, что вы сказали? Еще раз спасибо за ваш вклад и извините за все вопросы noob. –