From 5717431cc24b025d3443f15146ea864a7b1ecd16 Mon Sep 17 00:00:00 2001 From: GladkyMS Date: Sun, 20 Oct 2024 17:04:23 +0300 Subject: [PATCH] code:pers var --- svg.cpp | 12 +-- svg.h | 6 +- vector.cpp | 237 ++++++++++++++++++++++++----------------------------- 3 files changed, 116 insertions(+), 139 deletions(-) diff --git a/svg.cpp b/svg.cpp index ace0f9f..dbadf47 100644 --- a/svg.cpp +++ b/svg.cpp @@ -22,11 +22,11 @@ svg_text(double left, double baseline, std::string text) { void svg_rect(double x, double y, double width, double height,std::string stroke = "black", std::string fill = "black") { std::cout << ""; } -//std::string bin_color(size_t bin, size_t mxbins) { -// return("#" + std::to_string((10 - floor((bin) * 9 / mxbins))) + std::to_string((10 - floor((bin) * 9 / mxbins))) + std::to_string((10 - floor((bin) * 9 / mxbins)))); -//} +std::string bin_color(size_t bin, size_t mxbins) { + return("#" + std::to_string(int((10 - floor(((bin) * 9) / mxbins)))) + std::to_string(int((10 - floor(((bin) * 9) / mxbins)))) + std::to_string(int((10 - floor(((bin) * 9) / mxbins))))); +} -void show_histogram_svg(const std::vector& bins, size_t bin_count) { +void show_histogram_svg(const std::vector& bins) { const auto IMAGE_WIDTH = 400; const auto IMAGE_HEIGHT = 300; const auto TEXT_LEFT = 20; @@ -48,10 +48,10 @@ void show_histogram_svg(const std::vector& bins, size_t bin_count) { svg_begin(IMAGE_WIDTH, IMAGE_HEIGHT); double top = 0; for (size_t bin : bins) { - /* std::string color = bin_color(bin,mxbins);*/ + std::string color = bin_color(bin,mxbins); const double bin_width = BLOCK_WIDTH * bin*k; svg_text(TEXT_LEFT, top + TEXT_BASELINE, std::to_string(bin)); - svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT, "red", "#ffeeee");///color,color для персонального варианта + svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT, color, color);///color,color для персонального варианта top += BIN_HEIGHT; } svg_end(); diff --git a/svg.h b/svg.h index 01ebb47..ec506a8 100644 --- a/svg.h +++ b/svg.h @@ -7,13 +7,13 @@ svg_begin(double width, double height); void svg_end(); -void show_histogram_svg(const std::vector& bins, size_t bin_count); +void show_histogram_svg(const std::vector& bins); void svg_text(double left, double baseline, std::string text); -//std::string -//bin_color(size_t bin, size_t mxbins); +std::string +bin_color(size_t bin, size_t mxbins); void svg_rect(double x, double y, double width, double height, std::string stroke , std::string fill ); diff --git a/vector.cpp b/vector.cpp index 30fc23c..e138de2 100644 --- a/vector.cpp +++ b/vector.cpp @@ -1,146 +1,123 @@ -п»ї#include +п»ї +#include +#include +#include +#include #include -#include #include "histogram.h" #include "text.h" #include "svg.h" -#include -#include -#include -const size_t SCREEN_WIDTH = 80; -const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; +#include"string" using namespace std; -struct Input { - vector numbers; - size_t bin_count{}; +struct Input { + vector numbers; + size_t bin_count{}; }; -Input input_data() -{ - size_t number_count; - cin >> number_count; - Input in; - in.numbers.resize(number_count); - for (size_t i = 0; i < number_count; i++) - { - cin >> in.numbers[i]; +Input +input_data(istream& in, bool prompt) { + + size_t number_count; + if (prompt) { + cerr << "Enter number count: "; + } + in >> number_count; - } + Input iinn; + iinn.numbers.resize(number_count); + if (prompt) { + cerr << "Enter numbers: "; + } + for (size_t i = 0; i < number_count; i++) + { + in >> iinn.numbers[i]; + } - cin >> in.bin_count; + if (prompt) { + cerr << "Enter bin count: "; + } + in >> iinn.bin_count; - return in; + return iinn; } -//Input input_data(istream& in,bool prompt) { -// -// if (prompt == true) cerr << "Enter number_count: "; -// -// size_t number_count; -// in >> number_count; -// -// Input data; -// data.numbers.resize(number_count); -// -// if (prompt == true) cerr << "Enter numbers: "; -// -// for (size_t i = 0; i < number_count; i++) { -// in >> data.numbers[i]; -// } -// -// if (prompt == true) cerr << "Enter bin count: "; -// -// in >> data.bin_count; -// return data; -//} -//size_t -//write_data(void* items, size_t item_size, size_t item_count, void* ctx) { -// size_t data_size = item_size * item_count; -// stringstream* buffer = reinterpret_cast(ctx); -// buffer->write(reinterpret_cast(items), data_size); -// return data_size; -//} -//Input -//download(const string& address) { -// stringstream buffer; -// CURL* curl = curl_easy_init(); -// if (curl) { -// CURLcode res; -// curl_easy_setopt(curl, CURLOPT_URL, address.c_str()); -// curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); -// curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer); -// res = curl_easy_perform(curl); -// if (res != CURLE_OK) { -// fprintf(stderr, "curl_easy_perform() failed: %s\n", -// curl_easy_strerror(res)); -// exit(1); -// } -// curl_easy_cleanup(curl); -// } -// -// return input_data(buffer, false); -//} +static size_t +write_data(void* items, size_t item_size, size_t item_count, void* ctx) { + size_t data_size = item_size * item_count; + stringstream* buffer = reinterpret_cast(ctx); + buffer->write(reinterpret_cast(items), data_size); + return data_size; +} -int main() -{ - auto in = input_data(); - vector bins = make_histogram(in.numbers, in.bin_count); - show_histogram_svg(bins, in.bin_count); +Input +download(const string& address) { + stringstream buffer; + CURL* curl = curl_easy_init(); + if (curl) { + CURLcode res; + curl_easy_setopt(curl, CURLOPT_URL, address.c_str()); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer); + res = curl_easy_perform(curl); + if (res != CURLE_OK) { + fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); + exit(1); + } + curl_easy_cleanup(curl); + } + return input_data(buffer, false); } -//void usage() { -// cout << "Usage: lab34.exe [-format {text|svg}] URL\n"; -// exit(1); -//} -// -//int main(int argc, char* argv[]) { -// curl_global_init(CURL_GLOBAL_ALL); -// -// if (argc > 1) { -// string format_option; -// for (int i = 1; i < argc; i++) { -// if (argv[i][0] == '-') { -// -// if ( strcmp(argv[i], "-format") == 0) { -// format_option = argv[i++]; -// break; -// } -// } -// } -// -// if (!format_option.empty()) { -// if (format_option != "text" && format_option != "svg") { -// usage(); -// } -// } -// -// Input input; -// if (argc > 2) { -// input = download(argv[2]); -// } -// else { -// input = input_data(cin, true); -// } -// -// vector bins = make_histogram(input.numbers, input.bin_count); -// -// if (!format_option.empty()) { -// if (format_option == "text") { -// show_histogram_text(bins, input.bin_count); -// } -// else { -// show_histogram_svg(bins, input.bin_count); -// } -// } -// else { -// show_histogram_svg(bins, input.bin_count); -// } -// } -// else { -// cerr << "No arguments provided." << endl; -// usage(); -// } -// -// return 0; -//} +void usage() { + cout << "Usage: (lab34.exe [-format {text|svg}] URL) or (lab34.exe URL [-format {text|svg}])\n" ; + exit(1); +} +int +main(int argc, char* argv[]) +{ +#include + + curl_global_init(CURL_GLOBAL_ALL); + Input input; + string format_option; + if ((argc > 3) && (strcmp(argv[1], "-format") == 0)) + { + if (strcmp(argv[2], "svg") == 0) { + format_option = "svg"; + } + else if (strcmp(argv[2], "text") == 0) { + format_option = "text"; + } + + input = download(argv[3]); + } + + else if ((argc > 3) && (strcmp(argv[2], "-format") == 0)) + { + if (strcmp(argv[3], "svg") == 0) { + format_option = "svg"; + } + else if (strcmp(argv[3], "text") == 0) { + format_option = "text"; + } + input = download(argv[1]); + } + else { + usage(); + + } + if (format_option != "text" && format_option != "svg") { + usage(); + } + + const auto bins = make_histogram(input.numbers, input.bin_count); + + if (format_option == "text") { + show_histogram_text(bins, input.bin_count); + } + else if (format_option == "svg") { + show_histogram_svg(bins); + } + return(0); +}