Сравнить коммиты
	
		
			23 Коммитов 
		
	
	
		
			ddd2854898
			...
			d7fa671218
		
	
	
											
												
													Разница между файлами не показана из-за своего большого размера
													Загрузить разницу
												
											
										
									
								| @ -0,0 +1,40 @@ | ||||
| #include "histogram.h" | ||||
| #include "histogram_internal.h" | ||||
| #include <iostream> | ||||
| #include <vector> | ||||
| using namespace std; | ||||
| 
 | ||||
| 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; | ||||
|         if (x > max) | ||||
|             max = x; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| vector<size_t> make_histogram(const vector<double>& numbers, size_t bin_count) { | ||||
|     vector<size_t> bins(bin_count, 0); | ||||
|     double min, max; | ||||
|     find_minmax(numbers, min, max); | ||||
|     double bin_size = (max - min) / 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++) { | ||||
|             double lo = min + j * bin_size; | ||||
|             double hi = min + (j + 1) * bin_size; | ||||
|             if (numbers[i] >= lo && numbers[i] < hi) { | ||||
|                 bins[j]++; | ||||
|                 found = true; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         if (!found) | ||||
|             bins[bin_count - 1]++; | ||||
|     } | ||||
|     return bins; | ||||
| } | ||||
| @ -0,0 +1,4 @@ | ||||
| #pragma once | ||||
| #include <vector> | ||||
| 
 | ||||
| std::vector<size_t> make_histogram(const std::vector<double>& numbers, size_t bin_count); | ||||
| @ -0,0 +1,6 @@ | ||||
| #pragma once | ||||
| #include <vector> | ||||
| 
 | ||||
| void find_minmax(const std::vector<double>& numbers, | ||||
|     double& min, | ||||
|     double& max); | ||||
| @ -0,0 +1,69 @@ | ||||
| #include "svg.h" | ||||
| #include <string> | ||||
| using namespace std; | ||||
| 
 | ||||
| void svg_begin(double width, double height) { | ||||
|     cout << "<?xml version='1.0' encoding='UTF-8'?>\n"; | ||||
|     cout << "<svg "; | ||||
|     cout << "width='" << width << "' "; | ||||
|     cout << "height='" << height << "' "; | ||||
|     cout << "viewBox='0 0 " << width << " " << height << "' "; | ||||
|     cout << "xmlns='http://www.w3.org/2000/svg'>\n"; | ||||
| } | ||||
| 
 | ||||
| void svg_end() { | ||||
|     cout << "</svg>\n"; | ||||
| } | ||||
| void svg_text(double left, double baseline, const string& text) { | ||||
|     cout << "<text x='" << left | ||||
|         << "' y='" << baseline | ||||
|         << "'>" << text | ||||
|         << "</text>\n"; | ||||
| } | ||||
| 
 | ||||
| void svg_rect(double x, double y, double width, double height, | ||||
|     const string& stroke, const string& fill) { | ||||
|     cout << "<rect x='" << x | ||||
|         << "' y='" << y | ||||
|         << "' width='" << width | ||||
|         << "' height='" << height | ||||
|         << "' stroke='" << stroke | ||||
|         << "' fill='" << fill | ||||
|         << "' />\n"; | ||||
| } | ||||
| void show_histogram_svg(const vector<size_t>& bins) { | ||||
|     const double IMAGE_WIDTH = 400; | ||||
|     const double IMAGE_HEIGHT = 300; | ||||
|     const double TEXT_LEFT = 20; | ||||
|     const double TEXT_BASELINE = 20; | ||||
|     const double TEXT_WIDTH = 50; | ||||
|     const double BIN_HEIGHT = 30; | ||||
|     const double BLOCK_WIDTH = 10; | ||||
| 
 | ||||
|     svg_begin(IMAGE_WIDTH, IMAGE_HEIGHT); | ||||
| 
 | ||||
|     size_t max_count = 0; | ||||
|     for (size_t count : bins) { | ||||
|         if (count > max_count) { | ||||
|             max_count = count; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     double max_width = IMAGE_WIDTH - TEXT_WIDTH; | ||||
|     double top = 0; | ||||
|     for (size_t count : bins) { | ||||
|         double bin_width; | ||||
|         if (max_count > 0) { | ||||
|             bin_width = static_cast<double>(count) / max_count * max_width; | ||||
|         } | ||||
|         else { | ||||
|             bin_width = 0.0; | ||||
|         } | ||||
| 
 | ||||
|         svg_text(TEXT_LEFT, top + TEXT_BASELINE, to_string(count)); | ||||
|         svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT, "blue", "blue"); | ||||
|         top += BIN_HEIGHT; | ||||
|     } | ||||
| 
 | ||||
|     svg_end(); | ||||
| } | ||||
| @ -0,0 +1,12 @@ | ||||
| #pragma once | ||||
| #include <iostream> | ||||
| #include <string> | ||||
| #include <vector> | ||||
| 
 | ||||
| void svg_begin(double width, double height); | ||||
| void svg_end(); | ||||
| void svg_text(double left, double baseline, const std::string& text); | ||||
| void svg_rect(double x, double y, double width, double height, | ||||
|     const std::string& stroke = "black", | ||||
|     const std::string& fill = "black"); | ||||
| void show_histogram_svg(const std::vector<size_t>& bins); | ||||
| @ -0,0 +1,33 @@ | ||||
| #include "text.h" | ||||
| #include <iostream> | ||||
| #include <vector> | ||||
| using namespace std; | ||||
| 
 | ||||
| const size_t SCREEN_WIDTH = 80; | ||||
| const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; | ||||
| 
 | ||||
| void show_histogram_text(const vector<size_t>& bins) { | ||||
|     size_t max_count = bins[0]; | ||||
|     for (size_t count : bins) { | ||||
|         if (count > max_count) | ||||
|             max_count = count; | ||||
|     } | ||||
|     for (size_t j = 0; j < bins.size(); j++) { | ||||
|         if (bins[j] < 100) cerr << " "; | ||||
|         if (bins[j] < 10)  cerr << " "; | ||||
|         cerr << bins[j] << "|"; | ||||
| 
 | ||||
|         size_t height = 0; | ||||
|         if (max_count > MAX_ASTERISK) { | ||||
|             height = static_cast<size_t>( | ||||
|                 static_cast<double>(bins[j]) / max_count * MAX_ASTERISK | ||||
|                 ); | ||||
|         } | ||||
|         else { | ||||
|             height = bins[j]; | ||||
|         } | ||||
|         for (size_t i = 0; i < height; i++) | ||||
|             cerr << "*"; | ||||
|         cerr << endl; | ||||
|     } | ||||
| } | ||||
| @ -0,0 +1,5 @@ | ||||
| #pragma once | ||||
| #include <vector> | ||||
| 
 | ||||
| 
 | ||||
| void show_histogram_text(const std::vector<size_t>& bins); | ||||
											
												
													Разница между файлами не показана из-за своего большого размера
													Загрузить разницу
												
											
										
									
								| @ -0,0 +1,6 @@ | ||||
| #pragma once | ||||
| #include <vector> | ||||
| 
 | ||||
| void find_minmax(const std::vector<double>& numbers, | ||||
|     double& min, | ||||
|     double& max); | ||||
| @ -0,0 +1,38 @@ | ||||
| #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, max = 0; | ||||
|     find_minmax({ 1, 2 }, min, max); | ||||
|     CHECK(min == 1); | ||||
|     CHECK(max == 2); | ||||
| } | ||||
| 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({ 5.5 }, min, max); | ||||
|     CHECK(min == 5.5); | ||||
|     CHECK(max == 5.5); | ||||
| } | ||||
| 
 | ||||
| TEST_CASE("all negative") { | ||||
|     double min = 0, max = 0; | ||||
|     find_minmax({ -1, -5, -3 }, min, max); | ||||
|     CHECK(min == -5); | ||||
|     CHECK(max == -1); | ||||
| } | ||||
| 
 | ||||
| TEST_CASE("all equal") { | ||||
|     double min = 0, max = 0; | ||||
|     find_minmax({ 7, 7, 7 }, min, max); | ||||
|     CHECK(min == 7); | ||||
|     CHECK(max == 7); | ||||
| } | ||||
| @ -0,0 +1,141 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||||
|   <ItemGroup Label="ProjectConfigurations"> | ||||
|     <ProjectConfiguration Include="Debug|Win32"> | ||||
|       <Configuration>Debug</Configuration> | ||||
|       <Platform>Win32</Platform> | ||||
|     </ProjectConfiguration> | ||||
|     <ProjectConfiguration Include="Release|Win32"> | ||||
|       <Configuration>Release</Configuration> | ||||
|       <Platform>Win32</Platform> | ||||
|     </ProjectConfiguration> | ||||
|     <ProjectConfiguration Include="Debug|x64"> | ||||
|       <Configuration>Debug</Configuration> | ||||
|       <Platform>x64</Platform> | ||||
|     </ProjectConfiguration> | ||||
|     <ProjectConfiguration Include="Release|x64"> | ||||
|       <Configuration>Release</Configuration> | ||||
|       <Platform>x64</Platform> | ||||
|     </ProjectConfiguration> | ||||
|   </ItemGroup> | ||||
|   <PropertyGroup Label="Globals"> | ||||
|     <VCProjectVersion>17.0</VCProjectVersion> | ||||
|     <Keyword>Win32Proj</Keyword> | ||||
|     <ProjectGuid>{07f838bf-1065-4d95-9eac-ca2a1e9b6597}</ProjectGuid> | ||||
|     <RootNamespace>unittest</RootNamespace> | ||||
|     <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion> | ||||
|   </PropertyGroup> | ||||
|   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> | ||||
|     <ConfigurationType>Application</ConfigurationType> | ||||
|     <UseDebugLibraries>true</UseDebugLibraries> | ||||
|     <PlatformToolset>v143</PlatformToolset> | ||||
|     <CharacterSet>Unicode</CharacterSet> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> | ||||
|     <ConfigurationType>Application</ConfigurationType> | ||||
|     <UseDebugLibraries>false</UseDebugLibraries> | ||||
|     <PlatformToolset>v143</PlatformToolset> | ||||
|     <WholeProgramOptimization>true</WholeProgramOptimization> | ||||
|     <CharacterSet>Unicode</CharacterSet> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> | ||||
|     <ConfigurationType>Application</ConfigurationType> | ||||
|     <UseDebugLibraries>true</UseDebugLibraries> | ||||
|     <PlatformToolset>v143</PlatformToolset> | ||||
|     <CharacterSet>Unicode</CharacterSet> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> | ||||
|     <ConfigurationType>Application</ConfigurationType> | ||||
|     <UseDebugLibraries>false</UseDebugLibraries> | ||||
|     <PlatformToolset>v143</PlatformToolset> | ||||
|     <WholeProgramOptimization>true</WholeProgramOptimization> | ||||
|     <CharacterSet>Unicode</CharacterSet> | ||||
|   </PropertyGroup> | ||||
|   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> | ||||
|   <ImportGroup Label="ExtensionSettings"> | ||||
|   </ImportGroup> | ||||
|   <ImportGroup Label="Shared"> | ||||
|   </ImportGroup> | ||||
|   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||
|     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||
|   </ImportGroup> | ||||
|   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||
|     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||
|   </ImportGroup> | ||||
|   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> | ||||
|     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||
|   </ImportGroup> | ||||
|   <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> | ||||
|     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | ||||
|   </ImportGroup> | ||||
|   <PropertyGroup Label="UserMacros" /> | ||||
|   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||
|     <ClCompile> | ||||
|       <WarningLevel>Level3</WarningLevel> | ||||
|       <SDLCheck>true</SDLCheck> | ||||
|       <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
|       <ConformanceMode>true</ConformanceMode> | ||||
|     </ClCompile> | ||||
|     <Link> | ||||
|       <SubSystem>Console</SubSystem> | ||||
|       <GenerateDebugInformation>true</GenerateDebugInformation> | ||||
|     </Link> | ||||
|   </ItemDefinitionGroup> | ||||
|   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||
|     <ClCompile> | ||||
|       <WarningLevel>Level3</WarningLevel> | ||||
|       <FunctionLevelLinking>true</FunctionLevelLinking> | ||||
|       <IntrinsicFunctions>true</IntrinsicFunctions> | ||||
|       <SDLCheck>true</SDLCheck> | ||||
|       <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
|       <ConformanceMode>true</ConformanceMode> | ||||
|     </ClCompile> | ||||
|     <Link> | ||||
|       <SubSystem>Console</SubSystem> | ||||
|       <EnableCOMDATFolding>true</EnableCOMDATFolding> | ||||
|       <OptimizeReferences>true</OptimizeReferences> | ||||
|       <GenerateDebugInformation>true</GenerateDebugInformation> | ||||
|     </Link> | ||||
|   </ItemDefinitionGroup> | ||||
|   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> | ||||
|     <ClCompile> | ||||
|       <WarningLevel>Level3</WarningLevel> | ||||
|       <SDLCheck>true</SDLCheck> | ||||
|       <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
|       <ConformanceMode>true</ConformanceMode> | ||||
|     </ClCompile> | ||||
|     <Link> | ||||
|       <SubSystem>Console</SubSystem> | ||||
|       <GenerateDebugInformation>true</GenerateDebugInformation> | ||||
|     </Link> | ||||
|   </ItemDefinitionGroup> | ||||
|   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> | ||||
|     <ClCompile> | ||||
|       <WarningLevel>Level3</WarningLevel> | ||||
|       <FunctionLevelLinking>true</FunctionLevelLinking> | ||||
|       <IntrinsicFunctions>true</IntrinsicFunctions> | ||||
|       <SDLCheck>true</SDLCheck> | ||||
|       <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
|       <ConformanceMode>true</ConformanceMode> | ||||
|     </ClCompile> | ||||
|     <Link> | ||||
|       <SubSystem>Console</SubSystem> | ||||
|       <EnableCOMDATFolding>true</EnableCOMDATFolding> | ||||
|       <OptimizeReferences>true</OptimizeReferences> | ||||
|       <GenerateDebugInformation>true</GenerateDebugInformation> | ||||
|     </Link> | ||||
|   </ItemDefinitionGroup> | ||||
|   <ItemGroup> | ||||
|     <ClCompile Include="..\histogram.cpp" /> | ||||
|     <ClCompile Include="unittest.cpp" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ClInclude Include="..\doctest.h" /> | ||||
|     <ClInclude Include="..\histogram.h" /> | ||||
|     <ClInclude Include="..\histogram_internal.h" /> | ||||
|   </ItemGroup> | ||||
|   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> | ||||
|   <ImportGroup Label="ExtensionTargets"> | ||||
|   </ImportGroup> | ||||
| </Project> | ||||
| @ -0,0 +1,36 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||||
|   <ItemGroup> | ||||
|     <Filter Include="Исходные файлы"> | ||||
|       <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> | ||||
|       <Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions> | ||||
|     </Filter> | ||||
|     <Filter Include="Файлы заголовков"> | ||||
|       <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> | ||||
|       <Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions> | ||||
|     </Filter> | ||||
|     <Filter Include="Файлы ресурсов"> | ||||
|       <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> | ||||
|       <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> | ||||
|     </Filter> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ClCompile Include="..\histogram.cpp"> | ||||
|       <Filter>Исходные файлы</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="unittest.cpp"> | ||||
|       <Filter>Исходные файлы</Filter> | ||||
|     </ClCompile> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ClInclude Include="..\histogram_internal.h"> | ||||
|       <Filter>Файлы заголовков</Filter> | ||||
|     </ClInclude> | ||||
|     <ClInclude Include="..\doctest.h"> | ||||
|       <Filter>Файлы заголовков</Filter> | ||||
|     </ClInclude> | ||||
|     <ClInclude Include="..\histogram.h"> | ||||
|       <Filter>Файлы заголовков</Filter> | ||||
|     </ClInclude> | ||||
|   </ItemGroup> | ||||
| </Project> | ||||
					Загрузка…
					
					
				
		Ссылка в новой задаче