|  |  | @ -1,24 +1,40 @@ | 
			
		
	
		
		
			
				
					
					|  |  |  | #include <iostream> |  |  |  | #include <iostream> | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | #include <vector> | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | #include <algorithm> | 
			
		
	
		
		
			
				
					
					|  |  |  | #include <cmath> |  |  |  | #include <cmath> | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | #include <iomanip> | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | using namespace std; |  |  |  | using namespace std; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | int main() { |  |  |  | int main() { | 
			
		
	
		
		
			
				
					
					|  |  |  |     int N; |  |  |  |     int number_count; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     cout << "Enter the total number of elements (N): "; |  |  |  |     cout << "Enter number count: "; | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     cin >> N; |  |  |  |     cin >> number_count; | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if (number_count == 0) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         cout << "No numbers provided. Exiting program." << endl; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         return 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     vector<double> numbers(number_count); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     cout << "Enter numbers:\n"; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     for (size_t i = 0; i < number_count; ++i) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         cin >> numbers[i]; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     int bin_count; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     cout << "Enter number of bins:\n"; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     cin >> bin_count; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     int columns; |  |  |  |     int columns; | 
			
		
	
		
		
			
				
					
					|  |  |  |     string formula_used; |  |  |  |     string formula_used; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     if (N == 0) { |  |  |  |     if (bin_count == 0) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         columns = 0; |  |  |  |         columns = 0; | 
			
		
	
		
		
			
				
					
					|  |  |  |         formula_used = "None (N is 0)"; |  |  |  |         formula_used = "None (N is 0)"; | 
			
		
	
		
		
			
				
					
					|  |  |  |     } else { |  |  |  |     } else { | 
			
		
	
		
		
			
				
					
					|  |  |  |         double sqrt_value = sqrt(N); |  |  |  |         double sqrt_value = sqrt(bin_count); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         if (sqrt_value > 25) { |  |  |  |         if (sqrt_value > 25) { | 
			
		
	
		
		
			
				
					
					|  |  |  |             columns = 1 + static_cast<int>(log2(N)); |  |  |  |             columns = 1 + static_cast<int>(log2(bin_count)); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |             formula_used = "Sturges' formula (1 + floor(log2(N)))"; |  |  |  |             formula_used = "Sturges' formula (1 + floor(log2(N)))"; | 
			
		
	
		
		
			
				
					
					|  |  |  |         } else { |  |  |  |         } else { | 
			
		
	
		
		
			
				
					
					|  |  |  |             columns = static_cast<int>(sqrt_value); |  |  |  |             columns = static_cast<int>(sqrt_value); | 
			
		
	
	
		
		
			
				
					|  |  | @ -29,5 +45,29 @@ int main() { | 
			
		
	
		
		
			
				
					
					|  |  |  |     cout << "Number of columns: " << columns << endl; |  |  |  |     cout << "Number of columns: " << columns << endl; | 
			
		
	
		
		
			
				
					
					|  |  |  |     cout << "Formula used: " << formula_used << endl; |  |  |  |     cout << "Formula used: " << formula_used << endl; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     double min = *min_element(numbers.begin(), numbers.end()); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     double max = *max_element(numbers.begin(), numbers.end()); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     double bin_size = (max - min) / bin_count; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     vector<size_t> bins(bin_count, 0); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     for (double number : numbers) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         size_t bin_index = static_cast<size_t>((number - min) / bin_size); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         if (bin_index >= bin_count) bin_index = bin_count - 1; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         bins[bin_index]++; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     size_t max_bin_count = *max_element(bins.begin(), bins.end()); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     const size_t max_width = 80; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     double scaling_factor = max_bin_count > max_width ? static_cast<double>(max_width) / max_bin_count : 1.0; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     for (size_t i = 0; i < bin_count; ++i) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         cout << bins[i] << "|"; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         size_t scaled_height = static_cast<size_t>(bins[i] * scaling_factor); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         for (size_t j = 0; j < scaled_height; ++j) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             cout << '*'; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         cout << '\n'; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     return 0; |  |  |  |     return 0; | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } |