Сравнить коммиты
	
		
			10 Коммитов 
		
	
	
		
			5db3ef3543
			...
			b594b729f0
		
	
	| Автор | SHA1 | Дата | 
|---|---|---|
|  | b594b729f0 | 2 лет назад | 
|  | 9757cb3598 | 2 лет назад | 
|  | 817f3fff2c | 2 лет назад | 
|  | 66be708b27 | 2 лет назад | 
|  | 696c256489 | 2 лет назад | 
|  | 905840c0ae | 2 лет назад | 
|  | 7e700fabf6 | 2 лет назад | 
|  | abc9e41224 | 2 лет назад | 
|  | 425edb8b48 | 2 лет назад | 
|  | 05813b0411 | 2 лет назад | 
| @ -1,150 +1,81 @@ | ||||
| #include <iostream> | ||||
| #include <vector> | ||||
| 
 | ||||
| #include "histogram.h" | ||||
| #include "text.h" | ||||
| #include "svg.h" | ||||
| #include <curl/curl.h> | ||||
| 
 | ||||
| using namespace std; | ||||
| 
 | ||||
| 
 | ||||
| struct Input { | ||||
|     vector <double> numbers; | ||||
|     std:: vector <double> numbers; | ||||
|     size_t bin_count; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
|  Input input_data() { | ||||
| 
 | ||||
|  Input input_data(istream& inp, bool prompt) { | ||||
| Input in; | ||||
| if (prompt){ | ||||
| size_t number_count; | ||||
| cerr << "Enter number count: "; cin >> number_count; | ||||
| cerr << "Enter number count: "; inp >> number_count; | ||||
| 
 | ||||
| Input in; | ||||
| 
 | ||||
| in.numbers.resize(number_count); | ||||
|  for (size_t i = 0; i < number_count; i++) { | ||||
|         cerr << "Enter [" << i << "]: "; cin >> in.numbers[i]; | ||||
|         cerr << "Enter [" << i << "]: "; inp >> in.numbers[i]; | ||||
|     } | ||||
| 
 | ||||
| in.bin_count; | ||||
| cerr << "Enter bin count: "; cin >> in.bin_count; | ||||
| 
 | ||||
|     return in; | ||||
| cerr << "Enter bin count: "; inp >> in.bin_count; | ||||
| } | ||||
| else { | ||||
|     size_t number_count; | ||||
|      inp >> number_count; | ||||
| 
 | ||||
| void find_minmax(vector <double> numbers, double& min, double& max) { | ||||
|     min = numbers[0]; | ||||
|     max = numbers[0]; | ||||
|     for (int i = 0; i < numbers.size(); i++){ | ||||
|         if (numbers[i] < min) | ||||
|                     min = numbers[i]; | ||||
|         if (numbers[i] > max) | ||||
|                     max = numbers[i]; | ||||
| 
 | ||||
| 
 | ||||
| in.numbers.resize(number_count); | ||||
|  for (size_t i = 0; i < number_count; i++) { | ||||
|         inp >> in.numbers[i]; | ||||
|     } | ||||
| 
 | ||||
| in.bin_count; | ||||
| inp >> in.bin_count; | ||||
| } | ||||
|     return in; | ||||
| } | ||||
| 
 | ||||
| auto make_histogram( vector <double> numbers,  size_t bin_count){ | ||||
| vector<size_t> bins(bin_count); | ||||
| 
 | ||||
| double min,max; | ||||
| 
 | ||||
| find_minmax( numbers, min, max); | ||||
| 
 | ||||
| double bin_size = (max - min) / 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++){ | ||||
|                   auto lo = min + j * bin_size; | ||||
|                   auto hi = min + (j + 1) * bin_size; | ||||
|                   if ((lo <= numbers[i]) && (numbers[i] < hi)){ | ||||
|                            bins[j]++; | ||||
|                            found = true; | ||||
|                    } | ||||
|            } | ||||
|            if (!found){ | ||||
|                  bins[ bin_count - 1]++; | ||||
|            } | ||||
| } | ||||
| int main(int argc, char* argv[]) | ||||
| { | ||||
| 
 | ||||
| /*for (size_t i = 0; i < numbers.size(); i++){
 | ||||
|         cout << "  "<< bins[ i]; | ||||
| } | ||||
| */ | ||||
| return bins; | ||||
| } | ||||
|     if (argc > 1){ | ||||
|        CURL* curl = curl_easy_init(); | ||||
|        if (curl) { | ||||
|             CURLcode res; | ||||
|             curl_easy_setopt(curl, CURLOPT_URL, argv[1]); | ||||
|             res = curl_easy_perform(curl); | ||||
|             if (res != 0) { | ||||
|                 cout << curl_easy_strerror(res); | ||||
|                 exit(1); | ||||
|             } | ||||
|             curl_easy_cleanup(curl); | ||||
|         } | ||||
|     return 0; | ||||
|     } | ||||
| 
 | ||||
| void show_histogram_text (auto bins , size_t bin_count,  vector <double> numbers ){ | ||||
| int i; | ||||
|  curl_global_init(CURL_GLOBAL_ALL); | ||||
| 
 | ||||
| unsigned int  n; | ||||
| bool prompt=true; | ||||
| auto in = input_data(cin, prompt); | ||||
| double min,max; | ||||
| auto  bins = make_histogram(in.numbers, in.bin_count); | ||||
| 
 | ||||
| find_minmax( numbers, min, max); | ||||
| 
 | ||||
| int r[20]; | ||||
| r[0]=0; | ||||
| for (i = 0; i <  bin_count; i++){ | ||||
|         r[i+1]=r[i]+ bins[i]; | ||||
| } | ||||
| int maxbin=0; | ||||
| for (size_t i = 0; i <  bin_count; i++){ | ||||
|        if ( r[i+1] > maxbin) maxbin = r[i+1] ; | ||||
| } | ||||
| float k=1; | ||||
| //k= 76.00 / maxbin;
 | ||||
| for (size_t i = 0; i <  bin_count; i++){ | ||||
|         if (r[i+1]<10) cout << " "; | ||||
|         if (r[i+1]<100) cout << " "; | ||||
|          cout << r[i+1] << "|"; | ||||
|          for (size_t j = 0; j <k*(r[i+1]); j++) { | ||||
|                 cout << "*" ; | ||||
|          } | ||||
|          cout << endl; | ||||
| } | ||||
| } | ||||
| 
 | ||||
| int main() | ||||
| { | ||||
| unsigned int  n; | ||||
| show_histogram_svg ( bins ); | ||||
| 
 | ||||
| auto in = input_data(); | ||||
| double min,max; | ||||
| auto bins = make_histogram ( in.numbers, in.bin_count ); | ||||
| show_histogram_text(bins, in.bin_count, in.numbers ); | ||||
| 
 | ||||
| /*
 | ||||
| vector<size_t> bins(in.bin_count); | ||||
| double bin_size = (max - min) / in.bin_count; | ||||
| 
 | ||||
| for (size_t i = 0; i < in.numbers.size(); i++){ | ||||
|           bool found = false; | ||||
|           for (size_t j = 0; (j < in.bin_count - 1) && !found; j++){ | ||||
|                   auto lo = min + j * bin_size; | ||||
|                   auto hi = min + (j + 1) * bin_size; | ||||
|                   if ((lo <= in.numbers[i]) && (in.numbers[i] < hi)){ | ||||
|                            bins[j]++; | ||||
|                            found = true; | ||||
|                    } | ||||
|            } | ||||
|            if (!found){ | ||||
|                  bins[ in.bin_count - 1]++; | ||||
|            } | ||||
| } | ||||
| int r[20]; | ||||
| r[0]=0; | ||||
| for (size_t i = 0; i <  in.bin_count; i++){ | ||||
|         r[i+1]=r[i]+bins[i]; | ||||
| } | ||||
| int maxbin=0; | ||||
| for (size_t i = 0; i <  in.bin_count; i++){ | ||||
|        if ( r[i+1] > maxbin) maxbin = r[i+1]; | ||||
| } | ||||
| float k=1; | ||||
| //k= 76.00 / maxbin;
 | ||||
| for (size_t i = 0; i <  in.bin_count; i++){ | ||||
|         if (r[i+1]<10) cout << " "; | ||||
|         if (r[i+1]<100) cout << " "; | ||||
|          cout << r[i+1] << "|"; | ||||
|          for (size_t j = 0; j <k*(r[i+1]); j++) { | ||||
|                 cout << "*" ; | ||||
|          } | ||||
|          cout << endl; | ||||
| } */ | ||||
| return 0; | ||||
| } | ||||
|  | ||||
| @ -0,0 +1,71 @@ | ||||
| #pragma once | ||||
| 
 | ||||
| #include <iostream> | ||||
| #include <vector> | ||||
| 
 | ||||
| #include "svg.h" | ||||
| 
 | ||||
| using namespace std; | ||||
| 
 | ||||
| 
 | ||||
| void svg_begin(double width, double height) { | ||||
|     cout << "<?xml version='1.0' encoding='UTF-8'?>\n"; | ||||
|     cout << "<svg "; | ||||
|     cout << "width='" << width << "' "; | ||||
|     cout << "height='" << height << "' "; | ||||
|     cout << "viewBox='0 0 " << width << " " << height << "' "; | ||||
|     cout << "xmlns='http://www.w3.org/2000/svg'>\n"; | ||||
| } | ||||
| 
 | ||||
| void svg_end() { | ||||
|     cout << "</svg>\n"; | ||||
| } | ||||
| 
 | ||||
| void svg_text(double left, double baseline, string text) { | ||||
|             cout << "<text x='" << left << "' y=' "<< baseline <<" '> "<< text <<" </text>"; | ||||
| } | ||||
| 
 | ||||
| void svg_rect(double x, double y, double width, double height, string stroke, string fill){ | ||||
|      cout << "<rect x=' " << x << "' y=' "<< y <<" ' width=' " << width <<" ' height=' " << height << | ||||
|       " ' stroke=' " << stroke << "' fill=' " << fill << " '/>"; | ||||
| } | ||||
| 
 | ||||
| void show_histogram_svg( vector<size_t>& bins) { | ||||
| 
 | ||||
|     string colours[bins.size()]; | ||||
|     cerr << "Enter colours: " << endl; | ||||
|     for (size_t i = 0; i < bins.size(); i++) { | ||||
|         cerr << "Enter [" << i << "]: "; cin >> colours[i]; | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     const auto IMAGE_WIDTH = 400; | ||||
|     const auto IMAGE_HEIGHT = 300; | ||||
|     const auto TEXT_LEFT = 20; | ||||
|     const auto TEXT_BASELINE = 20; | ||||
|     const auto TEXT_WIDTH = 50; | ||||
|     const auto BIN_HEIGHT = 30; | ||||
|     const auto BLOCK_WIDTH = 10; | ||||
|     svg_begin(IMAGE_WIDTH, IMAGE_HEIGHT); | ||||
|     double top = 0; | ||||
|     const size_t MAX_ASTERISK = IMAGE_WIDTH - TEXT_WIDTH; | ||||
|     int maxb = bins[0]; | ||||
|     for (size_t j = 0; j < bins.size(); j++){ | ||||
|         if (bins[j] > maxb) maxb = bins[j]; | ||||
|     } | ||||
|     cout <<"                         " << maxb<< "            "; | ||||
| 
 | ||||
|     for (size_t i = 0; i < bins.size(); i++) { | ||||
|             double bin_width; | ||||
|             if (maxb == bins[i] ){ | ||||
|             bin_width = MAX_ASTERISK ; | ||||
|             } | ||||
|             else { | ||||
|                bin_width = MAX_ASTERISK * bins[i] / maxb; | ||||
|             } | ||||
|                svg_text(TEXT_LEFT, top + TEXT_BASELINE, to_string(bins[i])); | ||||
|                svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT , "#aaffaa",  colours [i]); | ||||
|                top += BIN_HEIGHT; | ||||
|     } | ||||
|     svg_end(); | ||||
| } | ||||
| @ -0,0 +1,7 @@ | ||||
| #ifndef SVG_H_INCLUDED | ||||
| #define SVG_H_INCLUDED | ||||
| #include <vector> | ||||
| 
 | ||||
| void show_histogram_svg(std:: vector<size_t>& bins); | ||||
| 
 | ||||
| #endif // SVG_H_INCLUDED
 | ||||
| @ -0,0 +1,33 @@ | ||||
| #pragma once | ||||
| 
 | ||||
| #include <iostream> | ||||
| #include <vector> | ||||
| 
 | ||||
| #include "text.h" | ||||
| 
 | ||||
| using namespace std; | ||||
| 
 | ||||
| void show_histogram_text (vector<size_t> bins, size_t bin_count ){ | ||||
| int i; | ||||
| 
 | ||||
| int r[20]; | ||||
| r[0]=0; | ||||
| for (i = 0; i <  bin_count; i++){ | ||||
|         r[i+1]= /*r[i]+ */ bins[i]; | ||||
| } | ||||
| int maxbin=0; | ||||
| for (size_t i = 0; i <  bin_count; i++){ | ||||
|        if ( r[i+1] > maxbin) maxbin = r[i+1] ; | ||||
| } | ||||
| float k=1; | ||||
| //k = 76.00 / maxbin;
 | ||||
| for (size_t i = 0; i <  bin_count; i++){ | ||||
|         if (r[i+1]<10) cout << " "; | ||||
|         if (r[i+1]<100) cout << " "; | ||||
|          cout << r[i+1] << "|"; | ||||
|          for (size_t j = 0; j <k*(r[i+1]); j++) { | ||||
|                 cout << "*" ; | ||||
|          } | ||||
|          cout << endl; | ||||
| } | ||||
| } | ||||
					Загрузка…
					
					
				
		Ссылка в новой задаче