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);
+}