Witam,
no forum jestem po raz pierwszy i zwracam się z prośbą o pomoc, mianowice zbliża się temat oddania programu na zaliczenie, z którym mam problem - program nie ukrywając, odziedziczyłam po starszym koledze, jednak mój prowadzący poprosił mnie o zmianę komendy odczytywania danych z pliku, twierdząc, że jest ona zbyt trudna. Podał mi dwa schematy komend, z których mam wybrać jedną:
- ifstream nazwa_strumienia (“ścieżka/nazwa pliku”);
while (!nazwa_strumienia.eof())
{
…
nazwa_strumienia >> …
…
}
- lub komende z wykorzystaniem w drugiej linijce zapisu: while (getline(nazwa_strumienia,nazwa_zmiennej_typu_łańcuchowego))
Niestety totalnie nie wiem jak podmienić owe komendy, aby program działał. Swoje dane zapisane miałam w kolumanch pionowych, a poproszono mnie, aby zapisać je w kolumnach poziomych. Czy mógłby mi ktoś pomóc? Jest to program umożliwiający między innymi obliczanie regresji liniowej.
PS. Po konsultacji z prowadzącym, nie jest konieczne wyświetlanie tabeli, wystarczy jeśli program pobierze dane z pliku.
# include <iostream>
# include <fstream> // do otwarcia pliku
# include <stdlib.h>
# include <cstring> // do operacji na stringach
# include <cmath>
using namespace std;
int main(){
string napis;
int linie = 0; //liczy linie w pliku txt , zeby wiedziec ile mamy danych
double suma_ci = 0;
double suma_ai = 0;
double srednia_ci = 0;
double srednia_ai = 0;
double suma_x = 0;
double suma_y = 0;
float a = 0;
float b = 0;
fstream plik; // tworzymy uchwyt do pliku
plik.open("regresja.txt", ios::in);
if(plik.good()){
cout <<"Dane z pliku:" <<endl;
while(!plik.eof()){
getline(plik,napis);
std::string str = napis;
if(str.length()>1){ // sprawdzxa czy w pliku txt linia ma wiecej niz jeden znak w innym przypadku nie robi nic
std::string str2 = str.substr(0,3);
std::string str3 = str.substr(4,1);
double ci,ai;
ci=atof(str2.c_str()); // zamiana typu zmiennej z string na double , do obliczen
ai=atof(str3.c_str()); // zamiana typu zmiennej z string na double . do obliczen
cout << ci << "\t" << ai <<endl;
linie++; //Liczymy linie
suma_ci += ci; //sumujemy ci
suma_ai += ai; //sumujemy ai
}
}
srednia_ci = suma_ci / linie; // oblicza srednia
srednia_ai = suma_ai / linie; // oblicza srednia
plik.close();
}
plik.open("regresja.txt", ios::in);
if(plik.good()){
cout << "Tabela:" << endl;
while(!plik.eof()){
getline(plik,napis);
std::string str = napis;
if(str.length()>1){
std::string str2 = str.substr(0,3);
std::string str3 = str.substr(4,1);
double ci,ai;
ci=atof(str2.c_str());
ai=atof(str3.c_str());
cout << ci << "\t" << ai << "\t" << ci - srednia_ci << "\t" << ai - srednia_ai << "\t" << pow(ci - srednia_ci,2.0) << "\t" << (ci - srednia_ci)*(ai - srednia_ai) <<endl;
suma_x += pow(ci - srednia_ci,2.0); // sumuje wartsci przed ostatniej kolumny w kolejnym zadzialaniem petli
suma_y += (ci - srednia_ci)*(ai - srednia_ai);// sumuje wartsci ostatniej kolumny w kolejnym zadzialaniem petli
}
}
cout << endl;
cout << srednia_ci; //Obliczamy srednia Ci
cout << "\t";
cout << srednia_ai; //Obliczamy srednia Ai
cout << "\t\t\t";
cout << suma_x;
cout << "\t";
cout << suma_y;
cout << "\n\n";
a = suma_y / suma_x;
cout << "Wartosc a wynosi: " << a << endl;
b = srednia_ai - (a * srednia_ci);
cout << "Wartosc b wynosi: " << b << endl;
cout << "y = " << a << "x + " << b <<endl;
cout << "Prosze podac absorbancje:" << endl;
int y;
cin >> y;
float x = (y/a) - b;
cout << "Stezenie wynosi:" << x;
plik.close();
}
return(0);
}