исправленные тесты + защита 8

main
KoldinaAE 2 недель назад
Родитель 1112320b49
Сommit 1afefbed0e

Разница между файлами не показана из-за своего большого размера Загрузить разницу

@ -2,7 +2,10 @@
#include <iostream> #include <iostream>
#include <vector> #include <vector>
using namespace std; using namespace std;
static void find_minmax(const vector<double>& numbers, double& minN, double& maxN){ bool find_minmax(vector<double> numbers, double& minN, double& maxN){
if (numbers.empty()){
return false;
}
minN = numbers[0]; minN = numbers[0];
maxN = numbers[0]; maxN = numbers[0];
for (double x : numbers){ for (double x : numbers){
@ -13,6 +16,7 @@ static void find_minmax(const vector<double>& numbers, double& minN, double& max
maxN = x; maxN = x;
} }
} }
return true;
} }
vector<size_t> make_histogram(const vector<double>& numbers, size_t bin_count){ vector<size_t> make_histogram(const vector<double>& numbers, size_t bin_count){

@ -4,6 +4,7 @@
#include <vector> #include <vector>
std::vector<size_t> std::vector<size_t>
make_histogram(const std::vector<double>& numbers, size_t bin_count); make_histogram(const std::vector<double>& numbers, size_t bin_count);
bool find_minmax(std::vector<double> numbers, double& minN, double& maxN);

@ -0,0 +1,7 @@
#ifndef HISTOGRAM_INTERNAL_H_INCLUDED
#define HISTOGRAM_INTERNAL_H_INCLUDED
#include <vector>
bool find_minmax(std::vector<double> numbers, double& minN, double& maxN);
#endif // HISTOGRAM_INTERNAL_H_INCLUDED

@ -32,7 +32,22 @@
<Add option="-Wall" /> <Add option="-Wall" />
<Add option="-fexceptions" /> <Add option="-fexceptions" />
</Compiler> </Compiler>
<Unit filename="histogram.cpp" />
<Unit filename="histogram.h">
<Option target="&lt;{~None~}&gt;" />
</Unit>
<Unit filename="histogram_internal.h">
<Option target="&lt;{~None~}&gt;" />
</Unit>
<Unit filename="main.cpp" /> <Unit filename="main.cpp" />
<Unit filename="svg.cpp" />
<Unit filename="svg.h">
<Option target="&lt;{~None~}&gt;" />
</Unit>
<Unit filename="text.cpp" />
<Unit filename="text.h">
<Option target="&lt;{~None~}&gt;" />
</Unit>
<Extensions> <Extensions>
<lib_finder disable_auto="1" /> <lib_finder disable_auto="1" />
</Extensions> </Extensions>

@ -0,0 +1,32 @@
# depslib dependency file v1.0
1746452588 source:c:\users\koldinad\desktop\lab03\histogram.cpp
"histogram.h"
<iostream>
<vector>
1746451370 c:\users\koldinad\desktop\lab03\histogram.h
<vector>
1746452830 source:c:\users\koldinad\desktop\lab03\main.cpp
<iostream>
<vector>
"histogram.h"
"text.h"
"svg.h"
1745846054 c:\users\koldinad\desktop\lab03\text.h
<vector>
1745846055 source:c:\users\koldinad\desktop\lab03\text.cpp
"text.h"
<iostream>
<vector>
1746452588 c:\users\koldinad\desktop\lab03\svg.h
<iostream>
<vector>
1746452790 source:c:\users\koldinad\desktop\lab03\svg.cpp
"svg.h"
<string>

@ -2,11 +2,13 @@
#include <vector> #include <vector>
#include "histogram.h" #include "histogram.h"
#include "text.h" #include "text.h"
#include "svg.h"
using namespace std; using namespace std;
struct Input{ struct Input{
vector<double> numbers; vector<double> numbers;
size_t bin_count{}; size_t bin_count{};
size_t font_size{};
}; };
Input Input
input_data() input_data()
@ -21,6 +23,15 @@ input_data()
cin >> in.numbers[i]; cin >> in.numbers[i];
} }
cin >> in.bin_count; cin >> in.bin_count;
size_t font_size_input = 0;
while (font_size_input < 8 || font_size_input > 32) {
cerr << "Enter font size (8–32, default is 12): ";
cin >> font_size_input;
cerr << "Invalid font size. Must be between 8 and 32.\n";
}
in.font_size = font_size_input;
return in; return in;
} }
@ -29,5 +40,5 @@ int main()
size_t max_count; size_t max_count;
auto in = input_data(); auto in = input_data();
auto bins = make_histogram(in.numbers, in.bin_count); auto bins = make_histogram(in.numbers, in.bin_count);
show_histogram_text(bins, in.bin_count, max_count); show_histogram_svg(bins, in.font_size);
} }

@ -19,8 +19,10 @@ svg_end() {
//Ïîäïèñè ê ñòîëáöàì //Ïîäïèñè ê ñòîëáöàì
void void
svg_text(double left, double baseline, string text) { svg_text(double left, double baseline, string text, size_t font_size) {
cout << "<text x='" << left << "' y='" << baseline << "'>" << text << "</text>\n"; cout << "<text x='" << left << "' y='" << baseline
<< "' font-size='" << font_size
<< "'>" << text << "</text>\n";
} }
//Âûâîä ïðÿìîóãîëüíèêà //Âûâîä ïðÿìîóãîëüíèêà
@ -32,7 +34,7 @@ svg_rect(double x, double y, double width, double height, string stroke = "black
//Ãðàôè÷åñêèé âûâîä ãèñòîãðàììû //Ãðàôè÷åñêèé âûâîä ãèñòîãðàììû
void void
show_histogram_svg(const vector<size_t>& bins) { show_histogram_svg(const vector<size_t>& bins, size_t font_size) {
const auto IMAGE_WIDTH = 400; const auto IMAGE_WIDTH = 400;
const auto IMAGE_HEIGHT = 300; const auto IMAGE_HEIGHT = 300;
const auto TEXT_LEFT = 20; const auto TEXT_LEFT = 20;
@ -41,6 +43,7 @@ show_histogram_svg(const vector<size_t>& bins) {
const auto BIN_HEIGHT = 30; const auto BIN_HEIGHT = 30;
const auto BLOCK_WIDTH = 10; const auto BLOCK_WIDTH = 10;
vector<string> colors = { vector<string> colors = {
"#F4F2A9",
"#ECE1AC", "#ECE1AC",
"#ECACD6", "#ECACD6",
"#CEACEC" "#CEACEC"
@ -50,7 +53,7 @@ show_histogram_svg(const vector<size_t>& bins) {
for (size_t i = 0; i < bins.size(); i++) { for (size_t i = 0; i < bins.size(); i++) {
string color = colors[i]; string color = colors[i];
const double bin_width = BLOCK_WIDTH * bins[i]; const double bin_width = BLOCK_WIDTH * bins[i];
svg_text(TEXT_LEFT, top + TEXT_BASELINE, to_string(bins[i])); //âûâîä ïîäïèñåé svg_text(TEXT_LEFT, top + TEXT_BASELINE, to_string(bins[i]), font_size); //âûâîä ïîäïèñåé
svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT, "#ACB0EC", color); //âûâîä ñòîëáöîâ svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT, "#ACB0EC", color); //âûâîä ñòîëáöîâ
top += BIN_HEIGHT; top += BIN_HEIGHT;
} }

@ -3,5 +3,5 @@
#include <iostream> #include <iostream>
#include <vector> #include <vector>
void show_histogram_svg(const std::vector<size_t>& bins); void show_histogram_svg(const std::vector<size_t>& bins, size_t font_size);
#endif // SVG_H_INCLUDED #endif // SVG_H_INCLUDED

@ -36,9 +36,7 @@ TEST_CASE("distinct equals numbers")
CHECK(max == 1); CHECK(max == 1);
} }
TEST_CASE("distinct equals numbers") { TEST_CASE("distinct equals numbers") {
double min = 0; double min = -1;
double max = 0; double max = -1;
find_minmax({1, 2}, min, max); CHECK(!find_minmax({}, min, max));
CHECK(min == 1);
CHECK(max == 2);
} }

@ -1,13 +1,13 @@
# depslib dependency file v1.0 # depslib dependency file v1.0
1745847481 source:c:\users\koldinad\desktop\lab03\histogram.cpp 1746452588 source:c:\users\koldinad\desktop\lab03\histogram.cpp
"histogram.h" "histogram.h"
<iostream> <iostream>
<vector> <vector>
1745847606 c:\users\koldinad\desktop\lab03\histogram.h 1746451370 c:\users\koldinad\desktop\lab03\histogram.h
<vector> <vector>
1745847891 source:c:\users\koldinad\desktop\lab03\unittest.cpp 1746451448 source:c:\users\koldinad\desktop\lab03\unittest.cpp
"doctest.h" "doctest.h"
"histogram_internal.h" "histogram_internal.h"
@ -56,6 +56,6 @@
<sys/time.h> <sys/time.h>
<unistd.h> <unistd.h>
1745847614 c:\users\koldinad\desktop\lab03\histogram_internal.h 1746451281 c:\users\koldinad\desktop\lab03\histogram_internal.h
<vector> <vector>

Загрузка…
Отмена
Сохранить