Родитель
							
								
									d6356a156c
								
							
						
					
					
						Сommit
						c45d9ca14c
					
				| @ -1,72 +1,102 @@ | |||||||
| #include <iostream> | #include <iostream> | ||||||
| #include <vector> | #include <vector> | ||||||
| 
 | 
 | ||||||
|  using namespace std; | using namespace std; | ||||||
| 
 | 
 | ||||||
|  const size_t SCREEN_WIDTH = 80; | const size_t SCREEN_WIDTH = 80; | ||||||
| const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; | const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; | ||||||
| 
 | 
 | ||||||
|  int main() { | struct Input | ||||||
|     size_t number_count; | { | ||||||
|  |     vector<double> numbers; | ||||||
|  |     size_t bin_count{}; | ||||||
|  | }; | ||||||
| 
 | 
 | ||||||
|      cerr << "Enter number count: "; | Input input_data() | ||||||
|  | { | ||||||
|  |     Input in; | ||||||
|  |     size_t number_count; | ||||||
|     cin >> number_count; |     cin >> number_count; | ||||||
|     vector<double> numbers(number_count); |     in.numbers.resize(number_count); | ||||||
| 
 |     for (size_t i = 0; i < number_count; i++) | ||||||
|      for (size_t i = 0; i < number_count; i++){ |     { | ||||||
|         cin >> numbers[i]; |         cin >> in.numbers[i]; | ||||||
|     } |     } | ||||||
|  |     cin >> in.bin_count; | ||||||
|  |     return in; | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
|      double min = numbers[0]; | void find_minmax(const vector<double> &numbers, double &min, double &max) | ||||||
|     double max = numbers[0]; | { | ||||||
|     for (double x : numbers) { |     min = numbers[0]; | ||||||
|         if (x < min) { |     max = numbers[0]; | ||||||
|             min = x; |     for (auto el : numbers) | ||||||
|  |     { | ||||||
|  |         if (el > max) | ||||||
|  |         { | ||||||
|  |             max = el; | ||||||
|         } |         } | ||||||
|         else if (x > max) { |         if (el < min) | ||||||
|             max = x; |         { | ||||||
|  |             min = el; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     double bin_count; | } | ||||||
|     cerr << "Enter bin count: "; |  | ||||||
|     cin >> bin_count; |  | ||||||
|     vector<size_t> bins(bin_count); |  | ||||||
|     double bin_size = (max - min) / bin_count; |  | ||||||
| 
 | 
 | ||||||
|     for (size_t i = 0; i < number_count; i++) { | vector<size_t> make_histogram(const vector<double> &numbers, const size_t &bin_count){ | ||||||
|         bool found = false; |         vector<size_t> bins(bin_count); | ||||||
|         for (size_t j = 0; (j < bin_count - 1) && !found; j++) { |         double max, min; | ||||||
|             auto lo = min + j * bin_size; |         find_minmax(numbers, min, max); | ||||||
|             auto hi = min + (j + 1) * bin_size; |         double binSize = (max - min) / bin_count; | ||||||
|             if ((lo <= numbers[i]) && (numbers[i] < hi)) { |         for (size_t i = 0; i < numbers.size(); i++) | ||||||
|                 bins[j]++; |         { | ||||||
|                 found = true; |             bool found = false; | ||||||
|  |             for (size_t j = 0; (j < bin_count - 1) && !found; j++) | ||||||
|  |             { | ||||||
|  |                 auto lo = min + j * binSize; | ||||||
|  |                 auto hi = min + (j + 1) * binSize; | ||||||
|  |                 if ((lo <= numbers[i]) && (numbers[i] < hi)) | ||||||
|  |                 { | ||||||
|  |                     bins[j]++; | ||||||
|  |                     found = true; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             if (!found) | ||||||
|  |             { | ||||||
|  |                 bins[bin_count - 1]++; | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         if (!found) { |         return bins; | ||||||
|             bins[bin_count - 1]++; |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|      size_t max_bin = bins[0]; | void show_histogram_text(const vector<size_t> &bins){ | ||||||
|     for (size_t i = 1; i < bin_count; i++){ |         size_t maxCount = bins[0]; | ||||||
|         if (bins[i] > max_bin) max_bin = bins[i]; |         for (auto bin : bins) | ||||||
|     } |         { | ||||||
| 
 |             if (maxCount < bin) | ||||||
|      size_t bin; |             { | ||||||
|     size_t height; |                 maxCount = bin; | ||||||
|     for (size_t i = 0; i < bin_count; i++){ |             } | ||||||
|         bin = bins[i]; |         } | ||||||
|         if (bin < 100) cout << " "; |         for (auto bin : bins) | ||||||
|         if (bin < 10) cout << " "; |         { | ||||||
|         if (max_bin > MAX_ASTERISK) height = MAX_ASTERISK * (static_cast<double>(bin) / max_bin); |             if (bin < 100) | ||||||
|         else height = bin; |             { | ||||||
|         cout << bin << "|"; |                 cout << " "; | ||||||
|         for (size_t j = 0; j < height; j++){ |             } | ||||||
|             cout << "*"; |             if (bin < 10) | ||||||
|  |             { | ||||||
|  |                 cout << " "; | ||||||
|  |             } | ||||||
|  |             size_t height = maxCount < MAX_ASTERISK ? bin : MAX_ASTERISK * (static_cast<double>(bin) / maxCount); | ||||||
|  |             cout << bin << "|" << string(height, '*'); | ||||||
|  |             cout << "\n"; | ||||||
|         } |         } | ||||||
|         cout<<endl; |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | int main() { | ||||||
|  |     Input in = input_data(); | ||||||
|  |     auto bins = make_histogram(in.numbers, in.bin_count); | ||||||
|  |     show_histogram_text(bins); | ||||||
|     return 0; |     return 0; | ||||||
| } | } | ||||||
					Загрузка…
					
					
				
		Ссылка в новой задаче