From e49280205bb662ce4c8cf14ac0b1bd01d5f37aa6 Mon Sep 17 00:00:00 2001 From: Yana Kalsina Date: Mon, 1 Dec 2025 13:36:09 +0300 Subject: [PATCH 1/4] Add clang format config --- .clang-format | 244 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 244 insertions(+) create mode 100644 .clang-format diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..3754daf --- /dev/null +++ b/.clang-format @@ -0,0 +1,244 @@ +--- +Language: Cpp +# BasedOnStyle: WebKit +AccessModifierOffset: -4 +AlignAfterOpenBracket: DontAlign +AlignArrayOfStructures: None +AlignConsecutiveAssignments: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: true +AlignConsecutiveBitFields: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: false +AlignConsecutiveDeclarations: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: false +AlignConsecutiveMacros: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: false +AlignConsecutiveShortCaseStatements: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCaseColons: false +AlignEscapedNewlines: Right +AlignOperands: DontAlign +AlignTrailingComments: + Kind: Never + OverEmptyLines: 0 +AllowAllArgumentsOnNextLine: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowBreakBeforeNoexceptSpecifier: Never +AllowShortBlocksOnASingleLine: Empty +AllowShortCaseLabelsOnASingleLine: false +AllowShortCompoundRequirementOnASingleLine: true +AllowShortEnumsOnASingleLine: true +AllowShortFunctionsOnASingleLine: All +AllowShortIfStatementsOnASingleLine: Never +AllowShortLambdasOnASingleLine: All +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: MultiLine +AttributeMacros: + - __capability +BinPackArguments: true +BinPackParameters: true +BitFieldColonSpacing: Both +BraceWrapping: + AfterCaseLabel: false + AfterClass: false + AfterControlStatement: Never + AfterEnum: false + AfterExternBlock: false + AfterFunction: true + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + BeforeCatch: false + BeforeElse: false + BeforeLambdaBody: false + BeforeWhile: false + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true +BreakAdjacentStringLiterals: true +BreakAfterAttributes: Leave +BreakAfterJavaFieldAnnotations: false +BreakArrays: true +BreakBeforeBinaryOperators: All +BreakBeforeConceptDeclarations: Always +BreakBeforeBraces: WebKit +BreakBeforeInlineASMColon: OnlyMultiline +BreakBeforeTernaryOperators: true +BreakConstructorInitializers: BeforeComma +BreakInheritanceList: BeforeColon +BreakStringLiterals: true +ColumnLimit: 0 +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: false +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: false +DerivePointerAlignment: false +DisableFormat: false +EmptyLineAfterAccessModifier: Never +EmptyLineBeforeAccessModifier: LogicalBlock +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: false +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IfMacros: + - KJ_IF_MAYBE +IncludeBlocks: Preserve +IncludeCategories: + - Regex: '^"(llvm|llvm-c|clang|clang-c)/' + Priority: 2 + SortPriority: 0 + CaseSensitive: false + - Regex: '^(<|"(gtest|gmock|isl|json)/)' + Priority: 3 + SortPriority: 0 + CaseSensitive: false + - Regex: '.*' + Priority: 1 + SortPriority: 0 + CaseSensitive: false +IncludeIsMainRegex: '(Test)?$' +IncludeIsMainSourceRegex: '' +IndentAccessModifiers: false +IndentCaseBlocks: false +IndentCaseLabels: false +IndentExternBlock: AfterExternBlock +IndentGotoLabels: true +IndentPPDirectives: None +IndentRequiresClause: true +IndentWidth: 4 +IndentWrappedFunctionNames: false +InsertBraces: false +InsertNewlineAtEOF: false +InsertTrailingCommas: None +IntegerLiteralSeparator: + Binary: 0 + BinaryMinDigits: 0 + Decimal: 0 + DecimalMinDigits: 0 + Hex: 0 + HexMinDigits: 0 +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: true +KeepEmptyLinesAtEOF: false +LambdaBodyIndentation: Signature +LineEnding: DeriveLF +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: Inner +ObjCBinPackProtocolList: Auto +ObjCBlockIndentWidth: 4 +ObjCBreakBeforeNestedBlockParam: true +ObjCSpaceAfterProperty: true +ObjCSpaceBeforeProtocolList: true +PackConstructorInitializers: BinPack +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakOpenParenthesis: 0 +PenaltyBreakScopeResolution: 500 +PenaltyBreakString: 1000 +PenaltyBreakTemplateDeclaration: 10 +PenaltyExcessCharacter: 1000000 +PenaltyIndentedWhitespace: 0 +PenaltyReturnTypeOnItsOwnLine: 60 +PointerAlignment: Left +PPIndentWidth: -1 +QualifierAlignment: Leave +ReferenceAlignment: Pointer +ReflowComments: true +RemoveBracesLLVM: false +RemoveParentheses: Leave +RemoveSemicolon: false +RequiresClausePosition: OwnLine +RequiresExpressionIndentation: OuterScope +SeparateDefinitionBlocks: Leave +ShortNamespaceLines: 1 +SkipMacroDefinitionBody: false +SortIncludes: CaseSensitive +SortJavaStaticImport: Before +SortUsingDeclarations: LexicographicNumeric +SpaceAfterCStyleCast: false +SpaceAfterLogicalNot: false +SpaceAfterTemplateKeyword: true +SpaceAroundPointerQualifiers: Default +SpaceBeforeAssignmentOperators: true +SpaceBeforeCaseColon: false +SpaceBeforeCpp11BracedList: true +SpaceBeforeCtorInitializerColon: true +SpaceBeforeInheritanceColon: true +SpaceBeforeJsonColon: false +SpaceBeforeParens: ControlStatements +SpaceBeforeParensOptions: + AfterControlStatements: true + AfterForeachMacros: true + AfterFunctionDefinitionName: false + AfterFunctionDeclarationName: false + AfterIfMacros: true + AfterOverloadedOperator: false + AfterPlacementOperator: true + AfterRequiresInClause: false + AfterRequiresInExpression: false + BeforeNonEmptyParentheses: false +SpaceBeforeRangeBasedForLoopColon: true +SpaceBeforeSquareBrackets: false +SpaceInEmptyBlock: true +SpacesBeforeTrailingComments: 1 +SpacesInAngles: Never +SpacesInContainerLiterals: true +SpacesInLineCommentPrefix: + Minimum: 1 + Maximum: -1 +SpacesInParens: Never +SpacesInParensOptions: + InCStyleCasts: false + InConditionalStatements: false + InEmptyParentheses: false + Other: false +SpacesInSquareBrackets: false +Standard: Latest +StatementAttributeLikeMacros: + - Q_EMIT +StatementMacros: + - Q_UNUSED + - QT_REQUIRE_VERSION +TabWidth: 8 +UseTab: Never +VerilogBreakBetweenInstancePorts: true +WhitespaceSensitiveMacros: + - BOOST_PP_STRINGIZE + - CF_SWIFT_NAME + - NS_SWIFT_NAME + - PP_STRINGIZE + - STRINGIZE From 6333ba599c1db958df6cd713935c0298e8d2b5fb Mon Sep 17 00:00:00 2001 From: Yana Kalsina Date: Mon, 1 Dec 2025 14:45:59 +0300 Subject: [PATCH 2/4] Add solving for the second task --- src/Test2Dir/CMakeLists.txt | 9 ++++ src/Test2Dir/lib.h | 10 ++++ src/Test2Dir/main.c | 83 +++++++++++++++++++++++++++++++++ src/Test2Dir/tests.c | 92 +++++++++++++++++++++++++++++++++++++ 4 files changed, 194 insertions(+) create mode 100644 src/Test2Dir/CMakeLists.txt create mode 100644 src/Test2Dir/lib.h create mode 100644 src/Test2Dir/main.c create mode 100644 src/Test2Dir/tests.c diff --git a/src/Test2Dir/CMakeLists.txt b/src/Test2Dir/CMakeLists.txt new file mode 100644 index 0000000..18d3ddd --- /dev/null +++ b/src/Test2Dir/CMakeLists.txt @@ -0,0 +1,9 @@ +cmake_minimum_required(VERSION 3.25) + +project(ProgressTest2 C) + +add_compile_options(-Wall -Wextra -Wpedantic) + +add_executable(main main.c tests.c) + +enable_testing() \ No newline at end of file diff --git a/src/Test2Dir/lib.h b/src/Test2Dir/lib.h new file mode 100644 index 0000000..145bcf3 --- /dev/null +++ b/src/Test2Dir/lib.h @@ -0,0 +1,10 @@ +#pragma once +#include + +bool tests(); + +int convertToDecimal8bits(int* binary); + +int* convertBoolElementsToInt(bool* arr, int length); + +int compareTwoDecimalNumbers(bool* arr1, bool* arr2); \ No newline at end of file diff --git a/src/Test2Dir/main.c b/src/Test2Dir/main.c new file mode 100644 index 0000000..9915540 --- /dev/null +++ b/src/Test2Dir/main.c @@ -0,0 +1,83 @@ +#include "lib.h" +#include +#include +#include +#include + +int convertToDecimal8bits(int* binary) +{ + int decimal = 0; + int power = 128; + for (int i = 0; i < 8; i++) { + if (binary[i] == 1) { + decimal += power; + } + power /= 2; + } + return decimal; +} + +int* convertBoolElementsToInt(bool* arr, int length) +{ + int* newArr = malloc(sizeof(int) * length); + for (int i = 0; i < length; i++) { + if (arr[i] == false) { + newArr[i] = 0; + } else { + newArr[i] = 1; + } + } + return newArr; +} + +int compareTwoDecimalNumbers(bool* arr1, bool* arr2) +{ + bool* p1 = arr1; + bool* p2 = arr2; + int* newArr1 = convertBoolElementsToInt(p1, 8); + int decimal1 = convertToDecimal8bits(newArr1); + int* newArr2 = convertBoolElementsToInt(p2, 8); + int decimal2 = convertToDecimal8bits(newArr2); + if (decimal1 > decimal2) { + return 1; + } else if (decimal2 > decimal1) { + return -1; + } else { + return 0; + } +} + +void printResults(int res) +{ + if (res == 1) { + printf("Первое число больше чем второе число\n"); + } else if (res == -1) { + printf("Второе число больше чем первое число\n"); + } else if (res == 0) { + printf("Числа равны"); + } + return; +} + +// так как в условии ничего не сказано про длину масиива, пусть она будет всего 8 элементов (8 бит) +int main(int argc, char* argv[]) +{ + if (argc == 2 && strcmp(argv[1], "--test") == 0) { + bool allTestsPassed = tests(); + if (allTestsPassed) { + printf("Все тесты прошли успешно"); + } else { + printf("Некоторые тесты не были пройдены"); + } + printf("\n"); + return 0; + } + + bool arr1[] = { false, false, false, false, true, false, false, false }; + bool arr2[] = { false, false, false, false, false, false, true, false }; + bool* p1 = arr1; + bool* p2 = arr2; + int res = compareTwoDecimalNumbers(p1, p2); + printResults(res); + return 0; +} diff --git a/src/Test2Dir/tests.c b/src/Test2Dir/tests.c new file mode 100644 index 0000000..b244e18 --- /dev/null +++ b/src/Test2Dir/tests.c @@ -0,0 +1,92 @@ +#include "lib.h" +#include +#include +#include +#include + +bool testConverToDecimal8bits() +{ + + int num1[] = { 0, 0, 0, 0, 0, 0, 0, 0 }; + int* p1 = num1; + if (convertToDecimal8bits(p1) != 0) { + printf("Тесты сломались на проверке перевода в десятичную сс (00000000 -> 0)\n"); + return false; + } + + int num2[] = { 1, 1, 1, 1, 1, 1, 1, 1 }; + int* p2 = num2; + if (convertToDecimal8bits(p2) != 255) { + printf("Тесты сломались на проверке перевода в десятичную сс (11111111 -> 31)\n"); + return false; + } + + int num3[] = { 0, 0, 0, 0, 0, 1, 0, 1 }; + int* p3 = num3; + if (convertToDecimal8bits(p3) != 5) { + printf("Тесты сломались на проверке перевода в десятичную сс (00000101 -> 5)\n"); + return false; + } + return true; +} + +bool testConvertBoolToInt() +{ + + bool arr1[] = { false, true, false, true, false, true, false, true }; + int correctArr1[] = { 0, 1, 0, 1, 0, 1, 0, 1 }; + int* pointet_to_correctArr = correctArr1; + bool* p1 = arr1; + int* testArr = convertBoolElementsToInt(p1, 8); + + for (int i = 0; i < 8; i++) { + if (testArr[i] != pointet_to_correctArr[i]) { + printf("Тесты сломались на проверке перевода массивов с булевыми значениями в целочисленные\n"); + return false; + } + } + return true; +} + +bool testcompareElements() +{ + bool arr1[] = { false, false, false, false, false, false, false, true }; + bool arr2[] = { false, false, false, false, false, false, true, false }; + bool* p1 = arr1; + bool* p2 = arr2; + int res1 = compareTwoDecimalNumbers(p1, p2); + if (res1 != -1) { + printf("Тесты сломались на стандартной проверке (первое число больше второго)\n"); + return false; + } + + bool arr3[] = { false, false, false, false, true, true, false, false }; + bool arr4[] = { false, false, false, false, false, false, true, false }; + bool* p3 = arr3; + bool* p4 = arr4; + int res2 = compareTwoDecimalNumbers(p3, p4); + if (res2 != 1) { + printf("Тесты сломались на стандартной проверке (второе число больше первого)\n"); + return false; + } + + bool arr5[] = { false, false, false, false, true, true, true, false }; + bool arr6[] = { false, false, false, false, true, true, true, false }; + bool* p5 = arr5; + bool* p6 = arr6; + int res3 = compareTwoDecimalNumbers(p5, p6); + if (res3 != 0) { + printf("Тесты сломались на стандартной проверке (числа равны)\n"); + return false; + } + return true; +} + +bool tests() +{ + bool allTestsPassed = false; + if (testConvertBoolToInt() && testcompareElements() && testConverToDecimal8bits()) { + allTestsPassed = true; + } + return allTestsPassed; +} From 0c8df218f05c8783c57bdceb9656262cec211d55 Mon Sep 17 00:00:00 2001 From: Yana Kalsina Date: Mon, 1 Dec 2025 14:55:59 +0300 Subject: [PATCH 3/4] Add describtions to functions, free some dinamic massives --- src/Test2Dir/lib.h | 15 +++++++++++++++ src/Test2Dir/main.c | 2 ++ 2 files changed, 17 insertions(+) diff --git a/src/Test2Dir/lib.h b/src/Test2Dir/lib.h index 145bcf3..40beecb 100644 --- a/src/Test2Dir/lib.h +++ b/src/Test2Dir/lib.h @@ -1,10 +1,25 @@ #pragma once #include +// Функция запуска всех тестов, ничего не принимает, ничего не возвращает bool tests(); +/* + * функция перевода 8ми битного числа в десятичную систему счисления + * принимает на ход указатель на массив с целочисленными значениями 0 и 1 + */ int convertToDecimal8bits(int* binary); +/* +функция перевода массива с булевыми элементами в целочисленные 0 и 1 +на вход принимает указатель на массив и его длину +возвращает указатель на новый массив. +*/ int* convertBoolElementsToInt(bool* arr, int length); +/* функция (собирающая все другие функции) +она сравнивает два числа +на вход пинимает два указателя на массивы с булевыми значениями +возвращает 1, -1, 0 в зависимости от результата сравнения. +*/ int compareTwoDecimalNumbers(bool* arr1, bool* arr2); \ No newline at end of file diff --git a/src/Test2Dir/main.c b/src/Test2Dir/main.c index 9915540..38798f0 100644 --- a/src/Test2Dir/main.c +++ b/src/Test2Dir/main.c @@ -38,6 +38,8 @@ int compareTwoDecimalNumbers(bool* arr1, bool* arr2) int decimal1 = convertToDecimal8bits(newArr1); int* newArr2 = convertBoolElementsToInt(p2, 8); int decimal2 = convertToDecimal8bits(newArr2); + free(newArr1); + free(newArr2); if (decimal1 > decimal2) { return 1; } else if (decimal2 > decimal1) { From caa5ac3752941923c9d7dee7b1651e924912a041 Mon Sep 17 00:00:00 2001 From: Kalsina Yana Date: Mon, 1 Dec 2025 15:01:24 +0300 Subject: [PATCH 4/4] Update tests.c 31 to 255 --- src/Test2Dir/tests.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Test2Dir/tests.c b/src/Test2Dir/tests.c index b244e18..a0be40c 100644 --- a/src/Test2Dir/tests.c +++ b/src/Test2Dir/tests.c @@ -17,7 +17,7 @@ bool testConverToDecimal8bits() int num2[] = { 1, 1, 1, 1, 1, 1, 1, 1 }; int* p2 = num2; if (convertToDecimal8bits(p2) != 255) { - printf("Тесты сломались на проверке перевода в десятичную сс (11111111 -> 31)\n"); + printf("Тесты сломались на проверке перевода в десятичную сс (11111111 -> 255)\n"); return false; }