|  |  |  | @ -3,22 +3,25 @@ | 
			
		
	
		
			
				
					|  |  |  |  | #include <iostream> | 
			
		
	
		
			
				
					|  |  |  |  | #include <conio.h> | 
			
		
	
		
			
				
					|  |  |  |  | using namespace std; | 
			
		
	
		
			
				
					|  |  |  |  | int main(){ | 
			
		
	
		
			
				
					|  |  |  |  | 	size_t i, j; | 
			
		
	
		
			
				
					|  |  |  |  | 	size_t number_count; | 
			
		
	
		
			
				
					|  |  |  |  | 	cerr << "Enter number count: "; | 
			
		
	
		
			
				
					|  |  |  |  | struct Input { | 
			
		
	
		
			
				
					|  |  |  |  |     vector<double> numbers; | 
			
		
	
		
			
				
					|  |  |  |  |     size_t bin_count{}; | 
			
		
	
		
			
				
					|  |  |  |  | }; | 
			
		
	
		
			
				
					|  |  |  |  | Input | 
			
		
	
		
			
				
					|  |  |  |  | input_data(){ | 
			
		
	
		
			
				
					|  |  |  |  |     size_t number_count; | 
			
		
	
		
			
				
					|  |  |  |  | 	cin >> number_count; | 
			
		
	
		
			
				
					|  |  |  |  | 	vector<double> numbers(number_count); | 
			
		
	
		
			
				
					|  |  |  |  | 	cerr << "Enter numbers: "; | 
			
		
	
		
			
				
					|  |  |  |  | 	for (i = 0; i < number_count; i++){ | 
			
		
	
		
			
				
					|  |  |  |  | 		cin >> numbers[i]; | 
			
		
	
		
			
				
					|  |  |  |  | 	Input in; | 
			
		
	
		
			
				
					|  |  |  |  | 	in.numbers.resize(number_count); | 
			
		
	
		
			
				
					|  |  |  |  | 	for (size_t i = 0; i < number_count; i++){ | 
			
		
	
		
			
				
					|  |  |  |  | 		cin >> in.numbers[i]; | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 	size_t bin_count; | 
			
		
	
		
			
				
					|  |  |  |  | 	cerr << "Enter bin count: "; | 
			
		
	
		
			
				
					|  |  |  |  | 	cin >> bin_count; | 
			
		
	
		
			
				
					|  |  |  |  | 	vector<size_t> bins(bin_count); | 
			
		
	
		
			
				
					|  |  |  |  | 	double min = numbers[0]; | 
			
		
	
		
			
				
					|  |  |  |  | 	double max = numbers[0]; | 
			
		
	
		
			
				
					|  |  |  |  | 	cin >> in.bin_count; | 
			
		
	
		
			
				
					|  |  |  |  | 	return in; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | void find_minmax(const vector<double>& numbers, double& min, double& max) { | 
			
		
	
		
			
				
					|  |  |  |  |     min = numbers[0]; | 
			
		
	
		
			
				
					|  |  |  |  |     max = numbers[0]; | 
			
		
	
		
			
				
					|  |  |  |  | 	for (double x : numbers){ | 
			
		
	
		
			
				
					|  |  |  |  | 		if (x < min){ | 
			
		
	
		
			
				
					|  |  |  |  | 			min = x; | 
			
		
	
	
		
			
				
					|  |  |  | @ -27,10 +30,16 @@ int main(){ | 
			
		
	
		
			
				
					|  |  |  |  |             max = x; | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | vector<size_t> make_histogram(const vector<double>& numbers, size_t& bin_count){ | 
			
		
	
		
			
				
					|  |  |  |  |     double min, max; | 
			
		
	
		
			
				
					|  |  |  |  | 	find_minmax(numbers, min, max); | 
			
		
	
		
			
				
					|  |  |  |  | 	vector<size_t> bins(bin_count); | 
			
		
	
		
			
				
					|  |  |  |  | 	double bin_size = (max - min) / bin_count; | 
			
		
	
		
			
				
					|  |  |  |  | 	for (i = 0; i < number_count; i++){ | 
			
		
	
		
			
				
					|  |  |  |  | 	size_t number_count; | 
			
		
	
		
			
				
					|  |  |  |  | 	for (size_t i = 0; i < numbers.size(); i++){ | 
			
		
	
		
			
				
					|  |  |  |  | 		bool found = false; | 
			
		
	
		
			
				
					|  |  |  |  | 		for (j = 0; (j < bin_count - 1) && !found; j++){ | 
			
		
	
		
			
				
					|  |  |  |  | 		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)){ | 
			
		
	
	
		
			
				
					|  |  |  | @ -42,14 +51,17 @@ int main(){ | 
			
		
	
		
			
				
					|  |  |  |  | 			bins[bin_count - 1]++; | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 	vector<size_t> counts(bin_count); | 
			
		
	
		
			
				
					|  |  |  |  | 	for (i = 0; i < bin_count; i++){ | 
			
		
	
		
			
				
					|  |  |  |  | 		for (j = 0; j < bins[i]; j++){ | 
			
		
	
		
			
				
					|  |  |  |  |     return bins; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | void show_histogram_text(size_t& bin_count, vector<size_t>& bins){ | 
			
		
	
		
			
				
					|  |  |  |  |     vector<size_t> counts(bin_count); | 
			
		
	
		
			
				
					|  |  |  |  | 	for (size_t i = 0; i < bin_count; i++){ | 
			
		
	
		
			
				
					|  |  |  |  | 		for (size_t j = 0; j < bins[i]; j++){ | 
			
		
	
		
			
				
					|  |  |  |  | 			counts[i]++; | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 	size_t max_count = counts[0]; | 
			
		
	
		
			
				
					|  |  |  |  | 	for (i=0; i<bin_count; i++){ | 
			
		
	
		
			
				
					|  |  |  |  | 	for (size_t i=0; i<bin_count; i++){ | 
			
		
	
		
			
				
					|  |  |  |  |         if(counts[i]>max_count){ | 
			
		
	
		
			
				
					|  |  |  |  |             max_count = counts[i]; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
	
		
			
				
					|  |  |  | @ -58,7 +70,7 @@ int main(){ | 
			
		
	
		
			
				
					|  |  |  |  | 	const size_t max_asterisk = screen_width - 3 - 1; | 
			
		
	
		
			
				
					|  |  |  |  | 	vector<size_t> heights(bin_count); | 
			
		
	
		
			
				
					|  |  |  |  | 	size_t height; | 
			
		
	
		
			
				
					|  |  |  |  | 	for (i=0; i<bin_count; i++){ | 
			
		
	
		
			
				
					|  |  |  |  | 	for (size_t i=0; i<bin_count; i++){ | 
			
		
	
		
			
				
					|  |  |  |  |             if (max_count > 76){ | 
			
		
	
		
			
				
					|  |  |  |  |                 height = (max_asterisk*(static_cast<double>(counts[i])/max_count)); | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
	
		
			
				
					|  |  |  | @ -67,7 +79,7 @@ int main(){ | 
			
		
	
		
			
				
					|  |  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |  |             heights[i] = height; | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  |         for (i = 0; i < bin_count; i++){ | 
			
		
	
		
			
				
					|  |  |  |  |         for (size_t i = 0; i < bin_count; i++){ | 
			
		
	
		
			
				
					|  |  |  |  |             if(bins[i]<100){ | 
			
		
	
		
			
				
					|  |  |  |  |                 cout << " "; | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
	
		
			
				
					|  |  |  | @ -75,11 +87,16 @@ int main(){ | 
			
		
	
		
			
				
					|  |  |  |  |                 cout << " "; | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  | 		cout << bins[i] << "|"; | 
			
		
	
		
			
				
					|  |  |  |  | 		for (j = 0; j < heights[i]; j++){ | 
			
		
	
		
			
				
					|  |  |  |  | 		for (size_t j = 0; j < heights[i]; j++){ | 
			
		
	
		
			
				
					|  |  |  |  | 			cout << "*"; | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 		cout << "\n"; | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | int main(){ | 
			
		
	
		
			
				
					|  |  |  |  | 	auto in = input_data(); | 
			
		
	
		
			
				
					|  |  |  |  | 	auto bins = make_histogram(in.numbers, in.bin_count); | 
			
		
	
		
			
				
					|  |  |  |  |     show_histogram_text(in.bin_count, bins); | 
			
		
	
		
			
				
					|  |  |  |  | 	getch(); | 
			
		
	
		
			
				
					|  |  |  |  | 	return 0; | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
	
		
			
				
					|  |  |  | 
 |