Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

115 строки
1.8 KiB
C++

#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
struct Input {
vector<double>A;
size_t bin{};
};
Input
input_data()
{
size_t n;
cerr<<"Marks: ";
cin>>n;
Input in;
in.A.resize(n);
for (size_t i=0; i<n; i++)
{
cerr<<"A["<<i<<"]=";
cin>>in.A[i];
}
cerr<<"Rows: ";
cin>>in.bin;
return in;
}
void find_minmax(const vector<double>& A, double& min, double& max)
{
min = A[0];
for (auto i = 0; i<A.size(); i++)
{
if (A[i]<min)
{
min = A[i];
}
}
max = A[0];
for (auto i = 0; i<A.size(); i++)
{
if (A[i]>max)
{
max = A[i];
}
}
}
vector <size_t> make_histogram (const vector<double>& A, size_t bin)
{
vector<size_t>B(bin);
size_t max_count;
double max, min;
find_minmax(A, min, max);
double step = (max-min)/(bin);
for (size_t i=0; i<A.size(); i++)
{
for (size_t j=0; j<bin; j++)
{
if ((A[i]>=(min+j*step))&&(A[i]<(min+(j+1)*step)))
{
B[j]++;
break;
}
}
}
for (size_t i=0; i<A.size(); i++)
{
if (A[i]== max)
B[bin-1]++;
}
return B;
}
void show_histogram(vector<size_t>B, size_t bin)
{
for (size_t i=0; i<bin; i++)
{
if (B[i]<10)
{
cout<<" ";
}
else if (B[i]<100)
{
cout<<" ";
}
cout<<B[i]<<"|";
for (size_t j=0; j<B[i]; j++)
{
cout<<"*";
}
cout<<endl;
}
}
int main()
{
Input in = input_data();
auto B = make_histogram(in.A, in.bin);
show_histogram (B, in.bin);
return 0;
}