C++ Bc. 5 cpp
#include <iostream> #include <sstream> // istringstream #include <list> #include <vector> #include <iomanip> // manipulatory datoveho proudu void histogram(const std::list<double>& data, double min, double max, int N, std::vector<double>& hist); int main () { using namespace std; istringstream input ("1.64 3.84 5.93 7.98 9.54 6.98 4.99 3.28 2.25 2.13 " "4.58 6.60 7.72 8.88 8.56 5.47 3.59 7.43 4.31 4.68 " "6.10 6.43 5.43 5.33 5.69"); const double min = 2.0; const double max = 9; const int N = 7; list<double> data; vector<double> hist; // nacist vstupni data do kontejneru 'data' double hodnota; while (input >> hodnota) { data.push_back (hodnota); } histogram (data, min, max, N, hist); // vypsat histogram cout.setf (ios_base::fixed, ios_base::floatfield); const double delta = (max - min) / N; for (int i = 0; i < hist.size (); i++) { stringstream interval; interval.setf (cout.flags()); interval.precision (1); if (i != 0 && i != (hist.size() - 1)) { interval << (min + (i - 1) * delta) << "-" << min + i * delta; } else { if (i == 0) { interval << "<" << min; } else { interval << ">" << max; } } cout << setw (11) << interval.str(); cout.precision (2); cout << setw (8) << hist[i] / data.size () * 1e2 << endl; } return 0; } void histogram(const std::list<double>& data, double min, double max, int N, std::vector<double>& hist) { const double delta = (max - min) / N; hist.resize (N+2); for (std::list<double>::const_iterator i = data.begin (), e = data.end (); i != e; ++i) { if ((*i) < min) { hist[0]++; continue; } if ((*i) >= max) { hist[N+1]++; continue; } for (int in = 0; in < N; in++) { if ((*i) >= (min + in * delta) && (*i) < (min + (in + 1) * delta)) { hist[in+1]++; break; } } } return; }
[ Zpět ]