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

..

8 Коммитов

Автор SHA1 Сообщение Дата
235345646546
61cb5628b1 Merge branch 'main' of http://uit.mpei.ru/git/DolganovVI/cs-lab34 2025-05-05 01:28:29 +03:00
31d9eed759 code: добавлен вывод 2025-05-05 01:22:21 +03:00
f4630d7ab9 code: исправления мелкие 2025-05-05 01:22:04 +03:00
235345646546
75680b6dbf code: файл проекта с тестами 2025-05-05 01:16:50 +03:00
235345646546
0b036581a4 code: библиотека для тестов 2025-05-05 01:15:42 +03:00
235345646546
b0edf2568c code: для работы тестов 2025-05-05 01:15:16 +03:00
235345646546
dbfc506d98 code: для работы теста 2025-05-05 01:14:11 +03:00
235345646546
b662a0b0e2 code: добавлены тесты 2025-05-05 00:50:48 +03:00
5 изменённых файлов: 84 добавлений и 75 удалений

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

@@ -0,0 +1,8 @@
#ifndef HISTOGRAM_INTERNAL_H_INCLUDED
#define HISTOGRAM_INTERNAL_H_INCLUDED
#include <vector>
void find_minmax(const std::vector<double>& numbers, double& min, double& max);
#endif // HISTOGRAM_INTERNAL_H_INCLUDED

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

@@ -1,4 +1,7 @@
#include <iostream> #include "histogram.h"
#include "text.h"
#include "svg.h"
#include <iostream>
#include <vector> #include <vector>
using namespace std; using namespace std;
@@ -21,84 +24,12 @@ input_data() {
cin >> in.bin_count; cin >> in.bin_count;
return in; 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;
}
else if (x > max) {
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 (double num : numbers) {
bool found = false;
for (size_t j = 0; j < bin_count - 1 && !found; j++) {
double lo = min + j * bin_size;
double hi = min + (j + 1) * bin_size;
if (lo <= num && num < hi) {
bins[j]++;
found = true;
}
}
if (!found) {
bins[bin_count - 1]++;
}
}
return bins;
}
void show_histogram_text(vector<size_t> bins, size_t bin_count)
{
double max_count = bins[0];
for (double x : bins) {
if (x > max_count) {
max_count = x;
}
}
size_t height;
bool flag = true;
for (size_t j = 0; j < bin_count; j++) {
if (bins[j] < 100) {
cout << " ";
}
if (bins[j] < 10) {
cout << " ";
}
cout << bins[j] << "|";
if (max_count > MAX_ASTERISK) {
for (size_t i = 0; i < bins[j]; i++) {
if (bins[j] != MAX_ASTERISK && flag) {
double count = bins[j];
height = MAX_ASTERISK * (static_cast<double>(count) / max_count);
bins[j] = height;
flag = false;
}
}
}
for (size_t i = 0; i < bins[j]; i++) {
cout << "*";
}
cout << endl;
flag = true;
}
}
int main() int main()
{ {
Input in = input_data(); Input 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); show_histogram_svg(bins);
return 0; return 0;
} }

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

@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17 # Visual Studio Version 17
VisualStudioVersion = 17.13.35919.96 d17.13 VisualStudioVersion = 17.13.35919.96
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mpei", "mpei.vcxproj", "{3F915897-865A-46B2-93EB-362990D3FBC2}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mpei", "mpei.vcxproj", "{3F915897-865A-46B2-93EB-362990D3FBC2}"
EndProject EndProject

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

@@ -0,0 +1,39 @@
#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("Identical numbers") {
double min = 0, max = 0;
find_minmax({ 5, 5, 5 }, min, max);
CHECK(min == 5);
CHECK(max == 5);
}
TEST_CASE("Empty vector") {
double min = 42, max = 42;
find_minmax({}, min, max);
CHECK(min == 42);
CHECK(max == 42);
}
TEST_CASE("Single element") {
double min = 0, max = 0;
find_minmax({ 42 }, min, max);
CHECK(min == 42);
CHECK(max == 42);
}
TEST_CASE("Negative numbers") {
double min = 0, max = 0;
find_minmax({ -3, -1, -2 }, min, max);
CHECK(min == -3);
CHECK(max == -1);
}

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

@@ -0,0 +1,31 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.13.35919.96 d17.13
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unittest", "unittest.vcxproj", "{D377E954-A910-442F-89B7-380240614335}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{D377E954-A910-442F-89B7-380240614335}.Debug|x64.ActiveCfg = Debug|x64
{D377E954-A910-442F-89B7-380240614335}.Debug|x64.Build.0 = Debug|x64
{D377E954-A910-442F-89B7-380240614335}.Debug|x86.ActiveCfg = Debug|Win32
{D377E954-A910-442F-89B7-380240614335}.Debug|x86.Build.0 = Debug|Win32
{D377E954-A910-442F-89B7-380240614335}.Release|x64.ActiveCfg = Release|x64
{D377E954-A910-442F-89B7-380240614335}.Release|x64.Build.0 = Release|x64
{D377E954-A910-442F-89B7-380240614335}.Release|x86.ActiveCfg = Release|Win32
{D377E954-A910-442F-89B7-380240614335}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {33670898-B3DF-4CA9-BB8F-B62E319D4269}
EndGlobalSection
EndGlobal