Сравнить коммиты

...

9 Коммитов

Автор SHA1 Сообщение Дата
81ff18f02d code:portection[6] 2025-05-02 13:22:42 +03:00
f37d1cd25c code:finished[5] 2025-05-02 12:13:26 +03:00
332a78f708 code:scaling[5] 2025-05-01 15:29:26 +03:00
a60b3a0445 code:scaling[5] 2025-05-01 14:27:39 +03:00
adcd8e719a code:svg_output_rectangle3.0[5] 2025-05-01 02:15:59 +03:00
76c58a3c2e code:svg_output_rectangle2.0[5] 2025-05-01 02:03:41 +03:00
e28c2321bc code:svg_output_rectangle[5] 2025-05-01 01:59:19 +03:00
f7e2afa797 code:svg_3[5] 2025-05-01 01:51:34 +03:00
30a95a6811 code:svg_2[5] 2025-05-01 01:46:49 +03:00
9 изменённых файлов: 128 добавлений и 10 удалений

Просмотреть файл

@@ -47,6 +47,10 @@
<Option target="&lt;{~None~}&gt;" />
</Unit>
<Unit filename="main.cpp" />
<Unit filename="prot.cpp" />
<Unit filename="prot.h" />
<Unit filename="svg.cpp" />
<Unit filename="svg.h" />
<Unit filename="text.cpp">
<Option target="Debug" />
</Unit>

Просмотреть файл

@@ -26,9 +26,13 @@ std::vector<size_t> make_histogram(std::vector<double> numbers, size_t bin_count
}
void find_minmax(std::vector<double> numbers, double& min, double& max) {
bool find_minmax(std::vector<double> numbers, double& min, double& max) {
if(numbers.size()==0){
return false;
}
min = numbers[0];
max = numbers[0];
for (double number : numbers) {
if (min > number) {
min = number;
@@ -37,5 +41,5 @@ void find_minmax(std::vector<double> numbers, double& min, double& max) {
max = number;
}
}
return;
return true;
}

Просмотреть файл

@@ -4,7 +4,7 @@
#include <vector>
void find_minmax(std::vector<double> numbers, double& min, double& max);
bool find_minmax(std::vector<double> numbers, double& min, double& max);
std::vector<size_t> make_histogram(std::vector<double> numbers, size_t bin_count);
#endif // HISTOGRAM_H_INCLUDED

Просмотреть файл

@@ -2,12 +2,13 @@ using namespace std;
#include "histogram.h"
#include "text.h"
#include "svg.h"
#include "prot.h"
#include <cstdio>
struct Input {
std::vector<double> numbers;
size_t bin_count{};
int width;
};
Input input_data();
@@ -17,25 +18,31 @@ int main()
Input in = input_data();
std::vector<size_t> bins = make_histogram(in.numbers, in.bin_count);
show_histogram_text(bins, in.bin_count);
show_histogram_svg(bins, in.width);
return 0;
}
Input input_data() {
Input input_struct;
size_t countOfNumbers;
cerr << "Input your count of numbers:\n";
cin >> countOfNumbers;
input_struct.numbers.resize(countOfNumbers);
cerr << "Input bin count:\n";
cin >> input_struct.bin_count;
cerr << "Input numbers:\n";
for (int i = 0; i < countOfNumbers; i++) {
cerr << i << ":" << endl;
cin >> input_struct.numbers[i];
}
cerr << endl;
cerr << "Input bin count:\n";
cin >> input_struct.bin_count;
input_struct.width = input_width(countOfNumbers);
return input_struct;
}

25
prot.cpp Обычный файл
Просмотреть файл

@@ -0,0 +1,25 @@
#include "prot.h"
int input_width(int countOfNumbers){
const int BLOCK_WIDTH = 10;
bool check = false;
int width =0;
while(check == false){
std::cout << "Input width:"<<std::endl;
std::cin >> width;
if(width < 70){
std::cout << "width less 70" << std::endl;
}
else if(width > 800){
std::cout << "width more 800" << std::endl;
}
else if(width < countOfNumbers*BLOCK_WIDTH / 3.0){
std::cout << "ìåíåå òðåòè êîëè÷åñòâà ÷èñåë, óìíîæåííûõ íà øèðèíó áëîêà " << std::endl;
}
else{
check = true;
}
}
return width;
}

8
prot.h Обычный файл
Просмотреть файл

@@ -0,0 +1,8 @@
#ifndef PROT_H_INCLUDED
#define PROT_H_INCLUDED
#include <vector>
#include <iostream>
int input_width(int countOfNumbers);
#endif // PROT_H_INCLUDED

26
svg.cpp
Просмотреть файл

@@ -1,4 +1,5 @@
#include "svg.h"
#include "text.h"
void svg_begin(double width, double height) {
std::cout << "<?xml version='1.0' encoding='UTF-8'?>\n";
std::cout << "<svg ";
@@ -12,7 +13,30 @@ void svg_end() {
std::cout << "</svg>\n";
}
void show_histogram_svg(const std::vector<size_t>& bins) {
void show_histogram_svg(const std::vector<size_t>& bins, int TEXT_WIDTH) {
const auto IMAGE_WIDTH = 400;
const auto IMAGE_HEIGHT = 300;
const auto TEXT_LEFT = 20;
const auto TEXT_BASELINE = 20;
const auto BIN_HEIGHT = 30;
svg_begin(400, 300);
size_t maxCount = maxBin(bins);
double top = 0;
for (size_t bin : bins) {
const double bin_width = (IMAGE_WIDTH - TEXT_WIDTH) * (bin / double(maxCount));
svg_text(TEXT_LEFT, top + TEXT_BASELINE, std::to_string(bin));
svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT,"red","#006B3C");
top += BIN_HEIGHT;
}
svg_end();
}
void svg_text(double left, double baseline, std::string text) {
std::cout << "<text x='" << left << "' y='"<< baseline <<"'>" << text<<"</text>";
}
void svg_rect(double x, double y, double width, double height,std::string stroke="black", std::string fills="black"){
std::cout << "<rect x='"<<x<<"' y='"<<y<<"' width='"<<width<<"' height='"<<height<<"' stroke='"<<stroke<<"' fill='"<<fills<<"' />";
}

4
svg.h
Просмотреть файл

@@ -5,6 +5,8 @@
#include <iostream>
void svg_begin(double width, double height);
void svg_end();
void show_histogram_svg(const std::vector<size_t>& bins);
void show_histogram_svg(const std::vector<size_t>& bins, int width);
void svg_text(double left, double baseline, std::string text);
void svg_rect(double x, double y, double width, double height,std::string stroke, std::string fills);
#endif // SVG_H_INCLUDED

44
unittest.cpp Обычный файл
Просмотреть файл

@@ -0,0 +1,44 @@
#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("empty vector") {
std::vector<double> numbers{};
double min=0, max=0;
CHECK(!find_minmax(numbers, min, max));
}
TEST_CASE("1 val") {
std::vector<double> numbers{1};
double min=0, max=0;
find_minmax(numbers, min, max);
CHECK(min == 1);
CHECK(max == 1);
}
TEST_CASE("- val") {
std::vector<double> numbers{-1,-2};
double min=0, max=0;
find_minmax(numbers, min, max);
CHECK(min == -2);
CHECK(max == -1);
}
TEST_CASE("same val") {
std::vector<double> numbers{2,2};
double min=0, max=0;
find_minmax(numbers, min, max);
CHECK(min == 2);
CHECK(max == 2);
}
TEST_CASE("check prot1") {
check(input_width(int countOfNumbers, 10));
}