#include #include #include #include #include #include #include using std::cout; using std::endl; using std::ios; using std::setprecision; using std::setw; template int max(const std::vector& a){ typename std::vector::const_iterator pos; pos = std::max_element(a.begin(), a.end()); return (std::distance(a.begin(), pos) /* + 1*/); } template int przydziel(const T& x, const std::vector& a){ typename std::vector::const_reverse_iterator pos = a.rbegin(); int i=a.size(); for(pos; pos != a.rend(); ++pos) if (x < *pos) // BLAD POPRAWIONY: zmiana znaku z > na < return i; else --i; } int main(int argc, char* argv[]){ std::string filename; //przetworzenie argumentow wejsciowych switch(argc){ case 2: filename=argv[1]; break; default: cout << "Uzycie: " << argv[0] << " plik" << endl; cout << "podaj nazwe pliku: "; std::cin >> filename; break; } std::ifstream wczytaj; std::vector przedz_l, przedz_p, cum_n, n; float temp_a=0, temp_b=0, temp; int temp_c=0, m; float suma_n = 0, moda; float beta05, beta025, beta075; float q025, q05, q075; std::string tak_nie; //otwarcie pliku do czytania wczytaj.open(filename.c_str(), ios::binary); if(!wczytaj){ std::cerr << "bledna nazwa pliku" << endl; system("PAUSE"); exit (1); } //wypelnienie wektorow if(wczytaj.is_open()){ while(!wczytaj.eof()){ if(wczytaj >> temp_a >> temp_b >> temp_c){ przedz_l.push_back(temp_a); przedz_p.push_back(temp_b); n.push_back(temp_c); } } } wczytaj.close(); //obliczenie cum_n for(int i=0;i(n); if(m == 0) temp = 0; else temp = n[m-1]; //obliczenie mody moda = przedz_l[m] + ((n[m]-temp)/((n[m]-temp)+(n[m]-n[m+1])))*(przedz_p[m] - przedz_l[m]); //kwartyl rzedu 0.5 beta05 = 0.5 * suma_n; m = przydziel(beta05, n); // BLAD POPRAWIONY: zmiana z 'cum_n' na 'n' if( m == 0) temp = 0; else temp = cum_n[m-1]; q05 = przedz_l[m] + ((beta05-temp)/n[m])*(przedz_p[m] - przedz_l[m]); //kwartyl rzedu 0.25 beta025 = 0.25 * suma_n; m = przydziel(beta025, n); // BLAD POPRAWIONY: zmiana z 'cum_n' na 'n' if( m == 0) temp = 0; else temp = cum_n[m-1]; q025 = przedz_l[m] + ((beta025-temp)/n[m])*(przedz_p[m] - przedz_l[m]); //kwartyl rzedu 0.75 beta075 = 0.75 * suma_n; m = przydziel(beta075, n); // BLAD POPRAWIONY: zmiana z 'cum_n' na 'n' if( m == 0) temp = 0; else temp = cum_n[m-1]; q075 = przedz_l[m] + ((beta075-temp)/n[m])*(przedz_p[m] - przedz_l[m]); std::ostringstream str; //wypisanie "tabeli" do strumienia str << "\r\n"; str << setw(12) << "> tak_nie; if(tak_nie == "n" || tak_nie == "N"){ pyt=false; plik=false; }else if(tak_nie == "t" || tak_nie == "T"){ pyt=false; plik=true; } else cout << "niepoprawna odpowiedz" << endl; } //zapis do pliku/na ekran if(plik){ std::ofstream zapisz; zapisz.open(filename.c_str(), ios::binary|ios::app|ios::out); if(!zapisz) std::cerr << "blad przy otwarciu pliku" << endl; zapisz << "\r\n" << "\r\n" << str.str() << "\r\n"; zapisz.close(); } system("PAUSE"); return 0; }