C ++ 11 — Ошибка в режиме расчета в векторе чисел

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

Что он должен сделать, это назначить режим xй элемент вектора, который производит большее значение для current, но когда я запускаю эту программу, режим всегда равен последнему элементу вектора.

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

Любая помощь с благодарностью.

#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <fstream>
using namespace std;

int main()
{
ifstream iFile("inp.txt");
if(!iFile)
{
cout << "Error input!" << endl;
return -1;
}

ofstream oFile("out.txt");
if(!oFile)
{
cout << "Error output!" << endl;
return -1;
}

double data;
vector<double> list;

while(iFile >> data)
{
list.push_back(data);               //put the elements in a vector
sort(list.begin(), list.end());     //and sort them in ascending order
}

for(int m = 0; m < list.size(); ++m)    //this is just
{                                       //to verify
oFile << list[m] << endl;           //that the elements
}                                       //are listed in order

int current = 0;
int previous = 0;
int mode = 0;
for(int x = 0; x < list.size(); ++x)        //select an element of the vector
{
for(int y = 0; y < list.size(); ++y)    //match it against all the other elements of the vector
{
if(list[x] == list[y])              //if they're of equal value
{
++current;                      //add 1 to variable "current"}
}

if(current > previous)                  //if "current" > "previous"{
mode = list[x];                 //set the element "x" (from the first for) of the vector "list" to be the new mode
current = previous;             //and set current to be the new previous
}

current = 0;                            //reset current to 0
}

oFile << "\nmode: " << mode << endl;        //output "mode"
return 0;
}

0

Решение

Попробуй с

previous = current;

вместо

current = previous;

напоследок if, или же previous всегда ноль и последний x (соответствует самому себе, когда y равно x) создать current лучше чем previous (это ноль).

ОТ: посмотри на это while

while(iFile >> data)
{
list.push_back(data);               //put the elements in a vector
sort(list.begin(), list.end());     //and sort them in ascending order
}

Нет необходимости сортировать вектор после каждой вставки. Я предлагаю вам добавить в list все содержимое входного файла и, после, сортировать вектор. Только один раз, только после последней вставки.

Что-то вроде

while(iFile >> data)
{
list.push_back(data);  //put the elements in a vector
}

sort(list.begin(), list.end()); //and sort them only one time
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]