KlimecnhenkoIA 3 недель назад
Родитель 95d9db1f89
Сommit 245c046f7c

@ -3,41 +3,41 @@
#include "histogram.h"
#include "text.h"
#include "svg.h"
#include <curl/curl.h>
using namespace std;
struct Input {
vector<double> numbers;
size_t bin_count;
size_t scale_step;
};
Input input_data(istream& in, bool prompt) {
Input inp;
Input input_data() {
Input in;
size_t number_count;
if (prompt){
cerr << "Enter number count: ";
}
cerr << "Enter number count: ";
cin >> number_count;
inp.numbers.resize(number_count);
if (prompt){
cerr << "Enter numbers: ";
}
in.numbers.resize(number_count);
cerr << "Enter numbers: ";
for (size_t i = 0; i < number_count; i++) {
cin >> inp.numbers[i];
cin >> in.numbers[i];
}
if (prompt) {
cerr << "Enter bin count: ";
cerr << "Enter bin count: ";
cin >> in.bin_count;
cerr << "Enter scale step (2-9): ";
cin >> in.scale_step;
if (in.scale_step < 2 || in.scale_step > 9) {
cerr << "ERROR: Invalid scale step\n";
}
cin >> inp.bin_count;
return inp;
return in;
}
int main() {
curl_global_init(CURL_GLOBAL_ALL);
auto in = input_data(cin, true);
auto in = input_data();
auto bins = make_histogram(in.numbers, in.bin_count);
show_histogram_svg(bins);
show_histogram_svg(bins, in.scale_step);
return 0;
}

@ -27,7 +27,32 @@ void svg_rect(double x, double y, double width, double height, string stroke = "
<< "' stroke='" << stroke << "' fill='" << fill << "' />\n";
}
void show_histogram_svg(const vector<size_t>& bins) {
void draw_scale(double width, double height, double max_width, size_t step, double min, double max) {
const double BLOCK_WIDTH = 10;
const double SCALE_HEIGHT = 30;
const double TEXT_OFFSET = 20;
double scale_width = max_width;
double scale_x = width - max_width;
double scale_y = height - SCALE_HEIGHT;
svg_rect(scale_x, scale_y, scale_width, 2, "black", "black");
double step_size = scale_width / step;
for (size_t i = 0; i <= step; i++) {
double mark_x = scale_x + i * step_size;
svg_rect(mark_x, scale_y, 2, 10, "black", "black");
double value = min + (max - min) * i / step;
string label = to_string(value);
if (label.size() > 4) {
label = label.substr(0, 4);
}
svg_text(mark_x - 10, scale_y + TEXT_OFFSET, label);
}
}
void show_histogram_svg(const vector<size_t>& bins, size_t scale_step) {
if (bins.empty()) {
cerr << "Error: Empty bins vector\n";
return;
@ -58,5 +83,7 @@ void show_histogram_svg(const vector<size_t>& bins) {
top += BIN_HEIGHT;
}
draw_scale(IMAGE_WIDTH, IMAGE_HEIGHT, MAX_WIDTH, scale_step, 0, max_count);
svg_end();
}

@ -2,8 +2,8 @@
#define SVG_H_INCLUDED
#include <vector>
#include <cstddef> // Äëÿ size_t
#include <cstddef>
void show_histogram_svg(const std::vector<size_t>& bins);
void show_histogram_svg(const std::vector<size_t>& bins, size_t scale_step);
#endif // SVG_H_INCLUDED

Загрузка…
Отмена
Сохранить