rendered paste body#include <iostream>#include <fstream>#include <string>#include <cstdlib>#include <vector>#include <iomanip>#include <sstream>using std::cout;using std::endl; using std::ios;using std::setprecision;using std::setw;template<typename T>int max(const std::vector<T>& a){ typename std::vector<T>::const_iterator pos; pos = std::max_element(a.begin(), a.end()); return (std::distance(a.begin(), pos) /* + 1*/); }template<typename T>int przydziel(const T& x, const std::vector<T>& a){ typename std::vector<T>::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<float> 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.size();i++){ suma_n += n[i]; if(i == 0) cum_n.push_back(n[i]); else cum_n.push_back(cum_n[i-1]+n[i]); } //wyznaczenie pozycji najwiekszego n(j) m = max<float>(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<float>(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<float>(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<float>(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) << "<x(j)-x(j)+" << (char)30 << "x)" << setw(6) <<" n(j)" << setw(6) <<" cum n(j)" << "\r\n"; for(int i=0;i<przedz_l.size();i++){ str.setf(ios::right, ios::adjustfield); str << setw(6) << przedz_l[i] << ' '; str << setw(6) << przedz_p[i] << ' '; str << setw(6) << n[i] << ' '; str << setw(6) << cum_n[i] << "\r\n"; } //wypisanie obliczen do strumienia str << "\r\n"; str.setf(ios::left, ios::adjustfield); str << setw(15) << "MIARA" << setw(12) << " WARTOSC" << setw(12) << " PRZYBLIZENIE" << "\r\n" << "\r\n"; str.setf(ios::right, ios::adjustfield); str.precision(10); str << "Suma n(j) = " << setw(12) << suma_n << " = - " << "\r\n"; str << "Kwantyl 0.25 = " << setw(12) << q025 << " = " << setprecision(3) << q025 << "\r\n"; str.precision(10); str << "Kwantyl 0.50 = " << setw(12) << q05 << " = " << setprecision(3) << q05 << "\r\n"; str.precision(10); str << "Kwantyl 0.75 = " << setw(12) << q075 << " = " << setprecision(3) << q075 << "\r\n"; str.precision(10); str << "Moda = " << setw(12) << moda << " = " << setprecision(6) << moda << "\r\n" << "\r\n"; cout << str.str() << endl; bool pyt=true, plik=false; while(pyt){ cout << "Czy chcesz zapisac wyniki obliczen do pliku? [t/n] "; std::cin >> 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;}