From 3a7ab31deb972b2482e82eaa2dd9ed89a922675e Mon Sep 17 00:00:00 2001 From: "Alice (SemenovIA)" Date: Mon, 28 Oct 2024 04:06:18 +0300 Subject: [PATCH] =?UTF-8?q?code:=20=D0=B1=D1=83=D1=84=D0=B5=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- project/histogram.cpp | 53 ++++++++++++++++++----------------------- project/histogram.h | 5 ++-- project/main.cpp | 55 +++++++++++++++++++++++++++++++------------ 3 files changed, 65 insertions(+), 48 deletions(-) diff --git a/project/histogram.cpp b/project/histogram.cpp index 1df7c99..fb1293d 100644 --- a/project/histogram.cpp +++ b/project/histogram.cpp @@ -1,50 +1,43 @@ #include "histogram.h" -vector -make_histogram(const vector& numbers, size_t & bin_count, size_t & number_count, size_t & max_count) { +vector make_histogram(const vector &numbers, size_t bin_count) { double min, max; - find_minmax(numbers, min, max); - double bin_size = (max - min) / bin_count; - vector bins(bin_count); - max_count = bins[0]; - for (size_t i = 0; i < number_count; i++){ + bool res = false; + find_minmax(numbers, min, max, res); + double bin_size = ( max - min ) / bin_count; + vector bins ( bin_count ); + for (size_t i=0; i < numbers.size(); i++ ){ bool found = false; - for (size_t j = 0; (j < bin_count - 1) && !found; j++){ + for (size_t j = 0; ( j < bin_count - 1 ) && !found; j++ ){ auto lo = min + j * bin_size; - auto hi = min + (j + 1) * bin_size; - if ((lo <= numbers[i]) && (numbers[i] < hi)){ + auto hi = min + ( j + 1 ) * bin_size; + if (lo <= numbers[i] && ( numbers[i] < hi )){ bins[j]++; found = true; } - if (bins[j] > max_count){ - max_count = bins[j]; - } - } - if (!found){ - bins[bin_count - 1]++; - } - if (bins[bin_count - 1] > max_count){ - max_count = bins[bin_count - 1]; + if ( !found ){ + bins[bin_count-1]++; } } return bins; } void -find_minmax(const vector& numbers, double& min, double& max) { - if (!numbers.empty()) { - min = numbers[0]; - max = numbers[0]; - } else { - min = 0; - max = 0; +find_minmax(const vector &numbers, double &min, double &max, bool &res) { + + if (numbers.size()==0){ + res = true; + return; } - for (double x : numbers) - { - if (x < min){ + + min = numbers[0]; + max = numbers[0]; + for ( double x : numbers ){ + if ( x < min ){ min = x; } - else if (x > max){ + } + else if ( x > max ){ max = x; } } diff --git a/project/histogram.h b/project/histogram.h index 7e3aefa..b868509 100644 --- a/project/histogram.h +++ b/project/histogram.h @@ -6,9 +6,8 @@ using namespace std; vector -make_histogram(const vector& numbers, size_t & bin_count, size_t & number_count, size_t & max_count); +make_histogram(const std::vector& numbers, size_t bin_count); void -find_minmax(const vector& numbers, double& min, double& max); - +find_minmax(const vector &numbers, double &min, double &max, bool &res); #endif // HISTOGRAM_H_INCLUDED diff --git a/project/main.cpp b/project/main.cpp index 387f577..243037f 100644 --- a/project/main.cpp +++ b/project/main.cpp @@ -1,20 +1,22 @@ #include #include #include "histogram.h" +#include "text.h" #include "svg.h" #include "show_svg.h" #include +#include +#include + using namespace std; struct Input { vector numbers; size_t bin_count{}; - size_t number_count{}; - size_t max_count{}; }; -Input -input_data(istream& stream, bool prompt) { +Input input_data(istream& stream, bool prompt) { + size_t number_count; if (prompt) { cerr << "Enter number count: "; @@ -42,28 +44,51 @@ input_data(istream& stream, bool prompt) { return in; } -int main(int argc, char* argv[]) -{ - if (argc > 1) { +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); + auto text = reinterpret_cast(items); + buffer->write(text, data_size); + return data_size; +} + +Input download(const string& address) { + + stringstream buffer; + + curl_global_init(CURL_GLOBAL_ALL); + CURL* curl = curl_easy_init(); + if(curl) { CURLcode res; - curl_easy_setopt(curl, CURLOPT_URL, argv[1]); + 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) { curl_easy_strerror(res); exit(1); } curl_easy_cleanup(curl); } + return input_data(buffer, false); +} + + + + +int main(int argc, char* argv[]){ + + Input in; + if (argc > 1) { + in = download(argv[1]); + } else { + in = input_data(cin, true); } { - //curl_global_init(CURL_GLOBAL_ALL); - bool prompt = true; - auto in = input_data(cin, prompt); - vector bins = make_histogram(in.numbers, in.bin_count, in.number_count, in.max_count); - show_histogram_svg(bins); - return 0; - + auto bins = make_histogram(in.numbers, in.bin_count); + show_histogram_svg(bins); }