diff --git a/bin/Debug/lab01.exe b/bin/Debug/lab01.exe index 7a18cf5..5662ce5 100644 Binary files a/bin/Debug/lab01.exe and b/bin/Debug/lab01.exe differ diff --git a/histogram.cpp b/histogram.cpp index 9354d92..ecd05f1 100644 --- a/histogram.cpp +++ b/histogram.cpp @@ -18,9 +18,6 @@ Input input_data(std::istream& in, bool prompt) { if (prompt) std::cerr << "Enter bin count: "; in >> data.bin_count; - if (prompt) std::cerr << "Enter text width : "; - in >> data.width; - return data; } diff --git a/histogram.h b/histogram.h index f781d35..64da80d 100644 --- a/histogram.h +++ b/histogram.h @@ -5,7 +5,6 @@ struct Input { std::vector numbers; size_t bin_count{}; - int width; }; Input input_data(std::istream& in, bool prompt); diff --git a/lab01.depend b/lab01.depend index 375ed5d..08bbf50 100644 --- a/lab01.depend +++ b/lab01.depend @@ -34,13 +34,14 @@ 1746175715 source:c:\users\gajda\onedrive\Рабочий стол\lab03\alex\project\text.cpp "text.h" -1749605127 source:c:\mpei\programming\c++ 2sem\lab03\alex\project\main.cpp +1749674358 source:c:\mpei\programming\c++ 2sem\lab03\alex\project\main.cpp "histogram.h" "svg.h" + -1749593919 c:\mpei\programming\c++ 2sem\lab03\alex\project\histogram.h +1749672481 c:\mpei\programming\c++ 2sem\lab03\alex\project\histogram.h @@ -48,16 +49,16 @@ -1749584700 c:\mpei\programming\c++ 2sem\lab03\alex\project\svg.h +1749672481 c:\mpei\programming\c++ 2sem\lab03\alex\project\svg.h -1749596419 source:c:\mpei\programming\c++ 2sem\lab03\alex\project\histogram.cpp +1749673891 source:c:\mpei\programming\c++ 2sem\lab03\alex\project\histogram.cpp "histogram.h" -1749584700 source:c:\mpei\programming\c++ 2sem\lab03\alex\project\svg.cpp +1749672481 source:c:\mpei\programming\c++ 2sem\lab03\alex\project\svg.cpp "svg.h" "text.h" diff --git a/main.cpp b/main.cpp index 10aebdf..5c71763 100644 --- a/main.cpp +++ b/main.cpp @@ -2,20 +2,47 @@ #include "svg.h" #include #include +#include -int main(int argc, char* argv[]) { - if(argc > 1) { - std::cout << "Number of arguments (argc): " << argc << std::endl; - for (int i = 0; i < argc; ++i) { - std::cout << "argv[" << i << "] = " << argv[i] << std::endl; - } - return 0; +size_t write_data(void* ptr, size_t size, size_t nmemb, std::stringstream* stream) { + size_t data_size = size * nmemb; + stream->write(static_cast(ptr), data_size); + return data_size; +} + +Input download(const std::string& url) { + std::stringstream buffer; + + CURL* curl = curl_easy_init(); + if (!curl) { + std::cerr << "Failed to initialize cURL\n"; + exit(1); } + curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer); + + CURLcode res = curl_easy_perform(curl); + if (res != CURLE_OK) { + std::cerr << "cURL error: " << curl_easy_strerror(res) << "\n"; + exit(1); + } + + curl_easy_cleanup(curl); + return input_data(buffer, false); +} +int main(int argc, char* argv[]) { curl_global_init(CURL_GLOBAL_ALL); - auto in = input_data(std::cin, true); - auto bins = make_histogram(in.numbers, in.bin_count); - show_histogram_svg(bins, in.width); + + Input input; + if (argc > 1) { + input = download(argv[1]); + } else { + input = input_data(std::cin, true); + } + auto bins = make_histogram(input.numbers, input.bin_count); + show_histogram_svg(bins); curl_global_cleanup(); return 0; } diff --git a/obj/Debug/main.o b/obj/Debug/main.o index ac755d5..9ae4168 100644 Binary files a/obj/Debug/main.o and b/obj/Debug/main.o differ diff --git a/svg.cpp b/svg.cpp index d13915c..270f5de 100644 --- a/svg.cpp +++ b/svg.cpp @@ -13,21 +13,25 @@ void svg_end() { std::cout << "\n"; } void svg_text(double left, double baseline, std::string text) { - std::cout << "" << text<<""; + std::cout << "" + << text << ""; } -void show_histogram_svg(const std::vector& bins, int TEXT_WIDTH) { +void show_histogram_svg(const std::vector& bins) { const auto IMAGE_WIDTH = 400; const auto IMAGE_HEIGHT = 300; const auto TEXT_LEFT = 20; const auto TEXT_BASELINE = 20; const auto BIN_HEIGHT = 30; const auto TEXT_GAP = 10; + const auto TEXT_WIDTH = 50; svg_begin(IMAGE_WIDTH, IMAGE_HEIGHT); size_t maxCount = maxBin(bins); double top = 0; + double current_y = TEXT_GAP; for (size_t bin : bins) { const double bin_width = (IMAGE_WIDTH - TEXT_WIDTH - TEXT_GAP) * (bin / double(maxCount)); svg_text(TEXT_LEFT, top + TEXT_BASELINE, std::to_string(bin)); diff --git a/svg.h b/svg.h index 1cf2d0c..c558da8 100644 --- a/svg.h +++ b/svg.h @@ -5,7 +5,7 @@ #include void svg_begin(double width, double height); void svg_end(); -void show_histogram_svg(const std::vector& bins, int width); +void show_histogram_svg(const std::vector& bins); void svg_text(double left, double baseline, std::string text); void svg_rect(double x, double y, double width, double height,std::string stroke, std::string fills);