I have to write a program to calculate the least squares line from a set of data. I named the file "data.txt" and these are the contents:
and this is my program so far:Code:-0.9 -1.1 -0.01 0.23 1.1 1.3 2.0 2.0 -2.0 -1.85
I havent calculated the line yet, I am stuck with reading the data from the file. From what I've read, I gathered that eof() doesn't become true until it reads past the end of the file. I read that you should use the get() function to force the program into reading the next line, triggering the eof to switch, but no matter which was I organize my while loop, I can't get it to run properly. I end up with 6 data points instead of five, the extra data point is the last data point which is re-entered into the algebra, giving me incorrect data.Code:#include <iostream> #include <fstream> #include <cstdlib> using namespace std; using std::ifstream; using std::ofstream; int main() { int numpoints = 0; double x=0, y=0, sumx=0, avgx=0, sumy=0, avgy=0, sumxy=0, sumxsquared=0, sumysquared=0; double m=0, b=0, r=0, first=0,second=0,third=0,fourth=0; char next; ifstream inStream; inStream.open("data.txt"); if (inStream.fail()) { cout << "There was an error opening the file.\n"; return 0; } while (! inStream.eof()) { inStream >> x >> y; sumx += x; sumy += y; sumxy += (x*y); sumxsquared += (x*x); sumysquared += (y*y); numpoints ++; inStream.get(next); } inStream.close(); cout << "Sum X=" << sumx <<"\n" << "Sum Y=" << sumy <<"\n" << "Sum XY=" << sumxy <<"\n" << "Sum X^2=" << sumxsquared <<"\n" << "Sum Y^2=" << sumysquared <<"\n" << "Number of points=" << numpoints << "\n"; return 0; }


Reply With Quote

Bookmarks