|
|
@ -1,24 +1,40 @@
|
|
|
|
#include <iostream>
|
|
|
|
#include <iostream>
|
|
|
|
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
#include <algorithm>
|
|
|
|
#include <cmath>
|
|
|
|
#include <cmath>
|
|
|
|
|
|
|
|
#include <iomanip>
|
|
|
|
using namespace std;
|
|
|
|
using namespace std;
|
|
|
|
|
|
|
|
|
|
|
|
int main() {
|
|
|
|
int main() {
|
|
|
|
int N;
|
|
|
|
int number_count;
|
|
|
|
cout << "Enter the total number of elements (N): ";
|
|
|
|
cout << "Enter number count: ";
|
|
|
|
cin >> N;
|
|
|
|
cin >> number_count;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (number_count == 0) {
|
|
|
|
|
|
|
|
cout << "No numbers provided. Exiting program." << endl;
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vector<double> numbers(number_count);
|
|
|
|
|
|
|
|
cout << "Enter numbers:\n";
|
|
|
|
|
|
|
|
for (size_t i = 0; i < number_count; ++i) {
|
|
|
|
|
|
|
|
cin >> numbers[i];
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
int bin_count;
|
|
|
|
|
|
|
|
cout << "Enter number of bins:\n";
|
|
|
|
|
|
|
|
cin >> bin_count;
|
|
|
|
|
|
|
|
|
|
|
|
int columns;
|
|
|
|
int columns;
|
|
|
|
string formula_used;
|
|
|
|
string formula_used;
|
|
|
|
|
|
|
|
|
|
|
|
if (N == 0) {
|
|
|
|
if (bin_count == 0) {
|
|
|
|
columns = 0;
|
|
|
|
columns = 0;
|
|
|
|
formula_used = "None (N is 0)";
|
|
|
|
formula_used = "None (N is 0)";
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
double sqrt_value = sqrt(N);
|
|
|
|
double sqrt_value = sqrt(bin_count);
|
|
|
|
|
|
|
|
|
|
|
|
if (sqrt_value > 25) {
|
|
|
|
if (sqrt_value > 25) {
|
|
|
|
columns = 1 + static_cast<int>(log2(N));
|
|
|
|
columns = 1 + static_cast<int>(log2(bin_count));
|
|
|
|
formula_used = "Sturges' formula (1 + floor(log2(N)))";
|
|
|
|
formula_used = "Sturges' formula (1 + floor(log2(N)))";
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
columns = static_cast<int>(sqrt_value);
|
|
|
|
columns = static_cast<int>(sqrt_value);
|
|
|
@ -29,5 +45,29 @@ int main() {
|
|
|
|
cout << "Number of columns: " << columns << endl;
|
|
|
|
cout << "Number of columns: " << columns << endl;
|
|
|
|
cout << "Formula used: " << formula_used << endl;
|
|
|
|
cout << "Formula used: " << formula_used << endl;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
double min = *min_element(numbers.begin(), numbers.end());
|
|
|
|
|
|
|
|
double max = *max_element(numbers.begin(), numbers.end());
|
|
|
|
|
|
|
|
double bin_size = (max - min) / bin_count;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vector<size_t> bins(bin_count, 0);
|
|
|
|
|
|
|
|
for (double number : numbers) {
|
|
|
|
|
|
|
|
size_t bin_index = static_cast<size_t>((number - min) / bin_size);
|
|
|
|
|
|
|
|
if (bin_index >= bin_count) bin_index = bin_count - 1;
|
|
|
|
|
|
|
|
bins[bin_index]++;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
size_t max_bin_count = *max_element(bins.begin(), bins.end());
|
|
|
|
|
|
|
|
const size_t max_width = 80;
|
|
|
|
|
|
|
|
double scaling_factor = max_bin_count > max_width ? static_cast<double>(max_width) / max_bin_count : 1.0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (size_t i = 0; i < bin_count; ++i) {
|
|
|
|
|
|
|
|
cout << bins[i] << "|";
|
|
|
|
|
|
|
|
size_t scaled_height = static_cast<size_t>(bins[i] * scaling_factor);
|
|
|
|
|
|
|
|
for (size_t j = 0; j < scaled_height; ++j) {
|
|
|
|
|
|
|
|
cout << '*';
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
cout << '\n';
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|