У меня проблемы с завершением этой функции, которая находит режим из списка целых. Я должен использовать указатели в качестве массивов и обозначения указателя "* (arr + 1)", например, вместо arr [1]. Мой инструктор предоставляет псевдокод, объясняющий процесс написания функции, но у меня возникают проблемы с пониманием определенных частей. (извините, если этот пост плохо отформатирован, это мой первый пост)
Полная программа делает пару других вещей, но мне уже удалось завершить sh эти функции без проблем
Псевдокод имеет следующий вид:
int* calculateMode(int* movies, int size, int& numModes)
сортировка фильмов в порядке возрастания
создание динамического c массива целых чисел, называемых режимами размера size
назначить первый int в фильмах на текущий
установить счетчик на 1
установить numModes на 1
установить modePos на 0
установить maxCount на 1
установить первый элемент в режимах на текущий
для i = 1 на размер
, если * (movies + i) == текущий // такой же, как текущий (предыдущий мы смотрели at)
инкрементный счетчик
если counter> maxCount // это означает, что у нас есть новый modePos
сбросить режимы // необходимо очистить все старые режимы в массивах, рассмотрим std :: fill_n (mode, size, -1)
установить modePos на 0 // начать с начала массива для режимов
* 10 37 * установить первый элемент в режимах на текущий // назначить наш новый режим на начало массива
установить maxCounter на счетчик
установить numModes на 1
иначе, если счетчик == maxCount // получил другой режим
increment modePos // получил позицию для следующего режима
назначил ток для следующего modePos в режимах
increment numModes
иначе // у нас есть новый текущий
назначить значение фильмов для текущего и счетчика 1
если counter == maxCount // если все значения представлены один раз, то все они являются режимами
приращение modePos
назначение тока режимам и modePos
увеличение numModes
режим возврата
Окончательный вывод должен быть (со всеми остальные функции):
Общее количество студентов, которые смотрели фильмы, составляет 28 Среднее число фильмов, просмотренных всеми студентами, составляет 27,46. Среднее число фильмов, просмотренных всеми студентами, составляет 28,00. Режим количества фильмов смотрел всем учащимся 47, 16 Нажмите любую клавишу для продолжения
Текстовый файл (где первая цифра «28» - это количество чисел в файле):
28
14
16
19
6
9
47
43
28
35
16
30
6
47
12
14
47
41
16
44
22 * 1116 *
20
31
45
34
31
44
4
8
Вот моя попытка
int* calculateMode(int* movies, int size, int& numModes)
{
sort(movies, movies + size); //sorted movies array
int* modes = new int[size]; //dynamic array of modes
int current = *(movies + 0); //the current mode (start on first number in array
int counter = 1; //how many of the same number there are
numModes = 1; //number of modes, the minimum always being 1
int modePos = 0; //position of the mode, 0 being the first number in array
int maxCount = 1;
*(modes + 0) = current;
for (int i = 1; i < size; i++)
{
if (*(movies + i) == current) //same as current
{
counter++;
if (counter > maxCount) //new modePos
{
std::fill_n(modes, size, -1); //clear modes
modePos = 0; //start back at beginning of the array for modes
*(modes + 0) = current;
maxCount = counter;
numModes = 1;
}
else if (counter == maxCount) //got another mode
{
modePos++; //get position for the next mode
current = modePos;
numModes++;
}
}
else //if we have new current
{
current = *(movies + i);
counter = 1;
if (counter == maxCount) //if all values are represented once they are all modes
{
modePos++;
current = modePos;
numModes++;
}
}
} //end of for loop
return modes;
}