Я работаю над программой, которая, учитывая список значений (double
s) из входного файла сортирует их в порядке возрастания и вычисляет 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;
}
Попробуй с
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
Других решений пока нет …