From 3dd39ab49d689e294c0ece368f285aa12f2ce3bc Mon Sep 17 00:00:00 2001 From: EfimovaLA Date: Sat, 1 Jun 2024 23:36:07 +0300 Subject: [PATCH] =?UTF-8?q?code:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D1=81=D0=B0=D0=BC=D0=B8=20=D1=84=D0=B0?= =?UTF-8?q?=D0=B9=D0=BB=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- histogram.cpp | 48 +++++++++++++++++++++++++++++++++++++ histogram.h | 10 ++++++++ histogram.o | Bin 0 -> 29567 bytes text.cpp | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++ text.h | 8 +++++++ 5 files changed, 131 insertions(+) create mode 100644 histogram.cpp create mode 100644 histogram.h create mode 100644 histogram.o create mode 100644 text.cpp create mode 100644 text.h diff --git a/histogram.cpp b/histogram.cpp new file mode 100644 index 0000000..6082ec2 --- /dev/null +++ b/histogram.cpp @@ -0,0 +1,48 @@ +#include "histogram.h" +#include + +static void find_minmax(const std::vector &numbers, double &min, double &max) +{ + min = numbers[0]; + max = numbers[0]; + for ( double x : numbers ) + { + if ( x < min ) + { + min = x; + } + else if ( x > max ) + { + max = x; + } + } +} + +std::vector make_histogram(const std::vector &numbers, size_t bin_count) +{ + double min = numbers[0]; + double max = numbers[0]; + find_minmax(numbers, min, max); + double bin_size = ( max - min ) / bin_count; + + std::vector bins ( 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]++; + } + } + return bins; +} diff --git a/histogram.h b/histogram.h new file mode 100644 index 0000000..c66f9e7 --- /dev/null +++ b/histogram.h @@ -0,0 +1,10 @@ +#ifndef HISTOGRAM_H_INCLUDED +#define HISTOGRAM_H_INCLUDED + +#include + +std::vector +make_histogram(const std::vector& numbers, size_t bin_count); + + +#endif // HISTOGRAM_H_INCLUDED diff --git a/histogram.o b/histogram.o new file mode 100644 index 0000000000000000000000000000000000000000..f8407783c18861f8e6b8209154e684356dbf34b7 GIT binary patch literal 29567 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 p;o-sIj`kig3h#;0ot0j= +#include + +const std::size_t SCREEN_WIDTH = 80; +const std::size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; + +void show_histogram_text(const std::vector &bins) +{ + std::size_t maxbin = bins[0]; + for (std::size_t i=1; i < bins.size(); i++) + { + if (maxbin < bins[i]) + { + maxbin = bins[i]; + } + } + if (maxbin <= MAX_ASTERISK) + { + for (size_t i=0; i < bins.size(); i++ ) + { + if (bins[i] < 10 ) + { + std::cout << " " << bins[i] << "|"; + } + else if (bins[i] < 100) + { + std::cout << " " << bins[i] << "|"; + } + else if (bins[i] < 1000) + { + std::cout << bins[i] << "|"; + } + for (size_t j=0; j < bins[i]; j++ ) + { + std::cout << "*"; + } + std::cout << std::endl; + } + } + else + { + for (std::size_t i=0; i < bins.size(); i++) + { + std::size_t heightG= MAX_ASTERISK * (static_cast(bins[i]) / maxbin); + if (bins[i] < 10 ) + { + std::cout << " " << bins[i] << "|"; + } + else if (bins[i] < 100) + { + std::cout << " " << bins[i] << "|"; + } + else if (bins[i] < 1000) + { + std::cout << bins[i] << "|"; + } + for (std::size_t j=0; j < heightG; j++ ) + { + std::cout << "*"; + } + std::cout << std::endl; + } + } +} diff --git a/text.h b/text.h new file mode 100644 index 0000000..99c853b --- /dev/null +++ b/text.h @@ -0,0 +1,8 @@ +#ifndef TEXT_H_INCLUDED +#define TEXT_H_INCLUDED +#include + + +void show_histogram_text(const std::vector &bins); + +#endif // TEXT_H_INCLUDED