Сравнить коммиты
	
		
			Ничего общего в коммитах. '6eb46fd053e593f2d06a9dcf848abf34719e25ac' и '0d3fb9ea6ac959562f8cb24ae69469b06f40ac12' имеют совершенно разные истории. 
		
	
	
		
			6eb46fd053
			...
			0d3fb9ea6a
		
	
		
	@ -1 +1 @@
 | 
				
			||||
bool find_minmax(const std::vector<double> vec, double& min, double& max);
 | 
				
			||||
void find_minmax(std::vector<double> vec, double& min, double& max);
 | 
				
			||||
 | 
				
			||||
@ -1,44 +1,83 @@
 | 
				
			||||
#include <iostream>
 | 
				
			||||
#include <vector>
 | 
				
			||||
#include "text.h"
 | 
				
			||||
 | 
				
			||||
using namespace std;
 | 
				
			||||
 | 
				
			||||
void show_histogram_text(vector<size_t> bins, size_t bin_count){
 | 
				
			||||
    const size_t SCREEN_WIDTH = 80;
 | 
				
			||||
    const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1;
 | 
				
			||||
 | 
				
			||||
    size_t max_bin = bins[0];
 | 
				
			||||
    for(size_t i = 0; i < bin_count; i++)
 | 
				
			||||
    {
 | 
				
			||||
        if(bins[i] > max_bin)
 | 
				
			||||
        {
 | 
				
			||||
            max_bin = bins[i];
 | 
				
			||||
void show_histogram(std::vector<size_t> bins) {
 | 
				
			||||
    bool gigant = false;
 | 
				
			||||
    auto spaces = 0;
 | 
				
			||||
    size_t mx_count = 0;
 | 
				
			||||
    for (auto x : bins) {
 | 
				
			||||
        if (x > 76) {
 | 
				
			||||
            gigant = true;
 | 
				
			||||
        }
 | 
				
			||||
    }
 | 
				
			||||
 | 
				
			||||
    for (size_t bin: bins)
 | 
				
			||||
    {
 | 
				
			||||
        size_t height = bin;
 | 
				
			||||
 | 
				
			||||
        if (max_bin > MAX_ASTERISK)
 | 
				
			||||
        {
 | 
				
			||||
          height = MAX_ASTERISK * (static_cast<double>(bin) / max_bin);
 | 
				
			||||
        if (x > mx_count) {
 | 
				
			||||
            mx_count = x;
 | 
				
			||||
        }
 | 
				
			||||
 | 
				
			||||
        if (bin < 100)
 | 
				
			||||
        {
 | 
				
			||||
            cout << ' ';
 | 
				
			||||
        auto len = 0;
 | 
				
			||||
        while (x > 0) {
 | 
				
			||||
            x /= 10;
 | 
				
			||||
            len++;
 | 
				
			||||
        }
 | 
				
			||||
        if (len > spaces) {
 | 
				
			||||
            spaces = len;
 | 
				
			||||
        }
 | 
				
			||||
        if (bin < 10)
 | 
				
			||||
        {
 | 
				
			||||
            cout << ' ';
 | 
				
			||||
 | 
				
			||||
    }
 | 
				
			||||
    if (spaces == 1) {
 | 
				
			||||
        for (size_t i = 0; i < bins.size(); i++) {
 | 
				
			||||
            std::cout << "  " << bins[i] << "|";
 | 
				
			||||
            if (gigant) {
 | 
				
			||||
                if (bins[i] == mx_count) {
 | 
				
			||||
                    for (size_t j = 0; j < 76; j++) {
 | 
				
			||||
                        std::cout << "*";
 | 
				
			||||
                    }
 | 
				
			||||
                }
 | 
				
			||||
                else
 | 
				
			||||
                {
 | 
				
			||||
                    for (size_t j = 0; j < 76 * static_cast<double>(bins[i]) / mx_count; j++) {
 | 
				
			||||
                        std::cout << "*";
 | 
				
			||||
                    }
 | 
				
			||||
                }
 | 
				
			||||
            }
 | 
				
			||||
            else
 | 
				
			||||
            {
 | 
				
			||||
                for (size_t j = 0; j < bins[i]; j++) {
 | 
				
			||||
                    std::cout << "*";
 | 
				
			||||
                }
 | 
				
			||||
                std::cout << std::endl;
 | 
				
			||||
            }
 | 
				
			||||
        }
 | 
				
			||||
        cout << bin << "|";
 | 
				
			||||
        for(size_t i = 0; i < height; i++)
 | 
				
			||||
        {
 | 
				
			||||
            cout << "*";
 | 
				
			||||
    }
 | 
				
			||||
    else
 | 
				
			||||
    {
 | 
				
			||||
        for (size_t i = 0; i < bins.size(); i++) {
 | 
				
			||||
            int len = 1;
 | 
				
			||||
            int k = bins[i];
 | 
				
			||||
            for (; k /= 10; ++len);
 | 
				
			||||
            while (len < spaces) {
 | 
				
			||||
                std::cout << " ";
 | 
				
			||||
                len++;
 | 
				
			||||
            }
 | 
				
			||||
            std::cout << bins[i];
 | 
				
			||||
            std::cout << "|";
 | 
				
			||||
            if (gigant) {
 | 
				
			||||
                if (bins[i] == mx_count) {
 | 
				
			||||
                    for (size_t j = 0; j < 76; j++) {
 | 
				
			||||
                        std::cout << "*";
 | 
				
			||||
                    }
 | 
				
			||||
                }
 | 
				
			||||
                else
 | 
				
			||||
                {
 | 
				
			||||
                    for (size_t j = 0; j < (76 * static_cast<double>(bins[i]) / mx_count - 1); j++) {
 | 
				
			||||
                        std::cout << "*";
 | 
				
			||||
                    }
 | 
				
			||||
                }
 | 
				
			||||
            }
 | 
				
			||||
            else
 | 
				
			||||
            {
 | 
				
			||||
                for (size_t j = 0; j < bins[i]; j++) {
 | 
				
			||||
                    std::cout << "*";
 | 
				
			||||
                }
 | 
				
			||||
            }
 | 
				
			||||
            std::cout << std::endl;
 | 
				
			||||
        }
 | 
				
			||||
        cout << endl;
 | 
				
			||||
    }
 | 
				
			||||
}
 | 
				
			||||
 | 
				
			||||
@ -1,3 +1,3 @@
 | 
				
			||||
#include <iostream>
 | 
				
			||||
#include <vector>
 | 
				
			||||
void show_histogram_text(std::vector<size_t> bins);
 | 
				
			||||
void show_histogram(std::vector<size_t> bins);
 | 
				
			||||
 | 
				
			||||
@ -1,37 +0,0 @@
 | 
				
			||||
#define DOCTEST_CONFIG_NO_MULTITHREADING
 | 
				
			||||
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
 | 
				
			||||
#include "doctest.h"
 | 
				
			||||
#include "histogram_internal.h"
 | 
				
			||||
 | 
				
			||||
TEST_CASE("distinct positive numbers") {
 | 
				
			||||
    double min = 0;
 | 
				
			||||
    double max = 0;
 | 
				
			||||
    find_minmax({1, 2}, min, max);
 | 
				
			||||
    CHECK(min == 1);
 | 
				
			||||
    CHECK(max == 2);
 | 
				
			||||
}
 | 
				
			||||
TEST_CASE("distinct negative numbers"){
 | 
				
			||||
    double min = 0;
 | 
				
			||||
    double max = 0;
 | 
				
			||||
    find_minmax({-1, -2}, min, max);
 | 
				
			||||
    CHECK(min == -2);
 | 
				
			||||
    CHECK(max == -1);
 | 
				
			||||
}
 | 
				
			||||
TEST_CASE("vector of the same elements"){
 | 
				
			||||
    double min = 0;
 | 
				
			||||
    double max = 0;
 | 
				
			||||
    find_minmax({3,3,3}, min, max);
 | 
				
			||||
    CHECK(min == 3);
 | 
				
			||||
    CHECK(max == 3);
 | 
				
			||||
}
 | 
				
			||||
TEST_CASE("empty vector"){
 | 
				
			||||
    double min = 0;
 | 
				
			||||
    double max = 0;
 | 
				
			||||
    CHECK(!find_minmax({}, min, max));
 | 
				
			||||
}
 | 
				
			||||
TEST_CASE("vector of one elements"){
 | 
				
			||||
    double min = 0;
 | 
				
			||||
    double max = 0;
 | 
				
			||||
    find_minmax({3}, min, max);
 | 
				
			||||
    CHECK(min == max);
 | 
				
			||||
}
 | 
				
			||||
					Загрузка…
					
					
				
		Ссылка в новой задаче