All pastes #811374 Raw Edit

Someone

public cpp v1 · immutable
·published 2007-12-10 21:16 UTC
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;}