Здравствуйте все, что вы замечательные люди, простой вопрос здесь,Хотя цикл только один раз выполняя внутри цикла для
У меня есть немного кода здесь, чтобы вычислить уравнение наиболее подходящую линию. У меня возникают проблемы с циклом while, который вложен в цикл for. В настоящее время «while (points >> Xi >> Yi)» работает только один раз, а затем (я предполагаю), поскольку он достиг конца документа, он не повторяется. Как я могу заставить его повторять 1000 раз? Невозможно использовать массивы, мы не учили тех, кто в классе еще, (
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
double measureSSE(double m, double b, double Xi, double Yi)
{
return (Yi - ((m * Xi) + b)) * (Yi - ((m * Xi) + b));
}
int main()
{
double Xi = 0, Yi = 0;
double m = 0, b = 0;
double dm = 0, db = 0;
double SSE = 0;
ifstream points("points.txt");
if(points.is_open())
{
for(int counter = 0; counter < 1000; counter++)
{
while(points >> Xi >> Yi)
{
dm += -2 * Xi * (Yi - (m * Xi) - b);
db += -2 * (Yi - (m * Xi) - b);
m -= .01 * dm;
b -= .01 * db;
SSE += measureSSE(m, b, Xi, Yi);
}
cout << "SSE: " << SSE << endl;
}
cout << "Final Model: y = " << m << "x + " << b << endl;
points.close();
}
else cout << "Unable to open file." << endl;
}
В первой итерации 'for' вы вводите' while' и читаете весь файл. После попытки чтения произойдет сбой, потому что вы никогда не будете повторно инициализировать/воссоздать поток «points». – SJuan76
IOW, после выхода из цикла while (потому что выражение оценивается как 'false'), вы не сбрасываете переменные так, чтобы выражение было истинным. – SJuan76
Вы хотите, чтобы вы каждый раз перечитывали с начала файла? –