From dfc6e5988b8bc95410038cab0988737bf16047c0 Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Tue, 7 Oct 2025 20:50:06 +0000 Subject: [PATCH 1/4] Add homework optimal sort --- src/hw_Optimal_Sort/main.c | 25 +++++++++++++++++++++++++ src/hw_Optimal_Sort/sort.c | 16 ++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 src/hw_Optimal_Sort/main.c create mode 100644 src/hw_Optimal_Sort/sort.c diff --git a/src/hw_Optimal_Sort/main.c b/src/hw_Optimal_Sort/main.c new file mode 100644 index 0000000..ea4fa97 --- /dev/null +++ b/src/hw_Optimal_Sort/main.c @@ -0,0 +1,25 @@ +#include + +// Объявление функции +extern int sort_array(int array[], int count); + +// Основной код - объявление массива на 100 чисел, создание счетчика, чтобы знать со сколькими числами надо будет работать, чтение чисел через for с scanf и вывод +int main() { + int array[100]; + int count = 0; + + int i = 0; + while (i < 100 && scanf("%d", &array[i]) == 1) { + i++; + count++; + } + + int moved = sort_array(array, count); + + printf("Отсортированный массив:"); + for (int i = 0; i < count; i++) { + printf("%d ", array[i]); + } + printf("\n"); + return 0; +} diff --git a/src/hw_Optimal_Sort/sort.c b/src/hw_Optimal_Sort/sort.c new file mode 100644 index 0000000..b535d0e --- /dev/null +++ b/src/hw_Optimal_Sort/sort.c @@ -0,0 +1,16 @@ +int sort_array(int* array, int count) { + int moved_count = 0; + // сортировка пузырьком + for (int i = 0; i < count - 1; i++) { + for (int j = 0; j < count - i - 1; j++) { + if (array[j] > array[j + 1]) { + int temp = array[j]; + array[j] = array[j + 1]; + array[j + 1] = temp; + moved_count++; + } + } + } + + return moved_count; +} From fa6c3545826240f24290b78e092bdaff416fd3ee Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Fri, 17 Oct 2025 14:16:57 +0000 Subject: [PATCH 2/4] Added 2 files --- src/kr/diffPalindrome.c | 67 +++++++++++++++++++++++++++++++++++++++++ src/kr/max.c | 49 ++++++++++++++++++++++++++++++ 2 files changed, 116 insertions(+) create mode 100644 src/kr/diffPalindrome.c create mode 100644 src/kr/max.c diff --git a/src/kr/diffPalindrome.c b/src/kr/diffPalindrome.c new file mode 100644 index 0000000..2520787 --- /dev/null +++ b/src/kr/diffPalindrome.c @@ -0,0 +1,67 @@ +// +// Created by sasha on 17.10.2025. +// + +//Напечатать на экран все из диапазона [1;n], +//которые являются палиндромами в двоичной записи. Выводить в десятичной системе счисления. + +#include +#include + +int systemChangerTo2(int n) { + int binaryNum[1000]; //Массив для числа во вторичной + char charBinaryNum[1000]; // Массив для числа во вторичной, но в виде строки + int i = 0; + int len = 0; + + while (n > 0) { + binaryNum[i] = n % 2; + n = n / 2; + i++; + len = i; // Длина массива + } + + for (i = 0; i < len; i++) { + charBinaryNum[i] = binaryNum[i] + '0'; + } + + int left = 0; + int right = strlen(charBinaryNum) - 1; + + while (left <= right) { + if (charBinaryNum[left] == charBinaryNum[right]) { + left++; + right--; + } else { + return 0; + } + if (left > right) { + return 1; + } + } +} + + + + +int main(void) { + int n = 0; + + printf("Введите n \n"); + scanf("%d",&n); + + int arr[n]; + int num = 0; + + for (int i = 0; i < n; i++) { + arr[i] = num; + num++; + + if (systemChangerTo2(num) == 1) { + printf("%d\n", num); + } + } + + + return 0; +} diff --git a/src/kr/max.c b/src/kr/max.c new file mode 100644 index 0000000..11e420e --- /dev/null +++ b/src/kr/max.c @@ -0,0 +1,49 @@ +// +// В массиве целых чисел найти число, сумма цифр которого была бы наибольшей. +// Если таких чисел несколько, вывести на экран все эти числа. +// + +#include + +// Функция нахождения максимальной суммы +int finder(int arr[], int size) { + int sum = 0; + for (int i = 0; i < size; i++) { + int tempSum = 0; // Временная сумма для каждого отдельно взятого числа + int temp = arr[i]; + + while (temp / 10 != 0) { // "Резатель числа", режем - пока оно не станет нулевым, прибавляем хвостик к сумме + tempSum += (temp % 10); + temp = temp/10; + printf("Sum %d\n", tempSum); + printf("%d \n", temp); + } + tempSum = temp + tempSum; + printf("Sum %d\n", tempSum); + + if (tempSum > sum) { + sum = tempSum; + } + } + return sum; +} + +int main(void) { + int size = 0; + + printf("Введите колво чисел в массиве (len) \n"); + scanf("%d",&size); + + int arr[size]; + + printf("Введите сами числа в массив \n"); + for (int i = 0; i < size; i++) { + scanf("%d",&arr[i]); + } + + int maxSum = finder(arr, size); + + printf("\n"); + printf("Max sum of numbers %d", maxSum); + return 0; +} From 129695f459559931083986efe2e185e24ba04598 Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Thu, 23 Oct 2025 20:21:11 +0000 Subject: [PATCH 3/4] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20stack.c=20?= =?UTF-8?q?=D0=B8=20stack.h=20=D0=B4=D0=BB=D1=8F=20=D1=81=D1=82=D1=8D?= =?UTF-8?q?=D0=BA=D0=B0,=20=D0=BD=D1=83=D0=B6=D0=BD=D0=BE=D0=B3=D0=BE=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=B4=D0=B2=D1=83=D1=85=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=B4=D0=B0=D1=87=20=D0=B2=20=D0=94=D0=97=5F5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hw5_Sort_And_Queue/stack.c | 35 +++++++++++++++++++++++ src/hw5_Sort_And_Queue/stack.h | 51 ++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 src/hw5_Sort_And_Queue/stack.c create mode 100644 src/hw5_Sort_And_Queue/stack.h diff --git a/src/hw5_Sort_And_Queue/stack.c b/src/hw5_Sort_And_Queue/stack.c new file mode 100644 index 0000000..9b785c9 --- /dev/null +++ b/src/hw5_Sort_And_Queue/stack.c @@ -0,0 +1,35 @@ +// +// Created by sasha on 23.10.2025. +// + +#include "stack.h" + +// Создаем стэк, делая значение top равным -1 ("нет элементов") +void init_stack(Stack *stack) { + stack->topIndex = -1; +} + +// Добавляем элемент +void push(Stack *stack, char value) { + stack->topIndex++; // Увеличиваем индекс на 1 + stack->elements[stack->topIndex] = value; // Добавляем сам элемент в массив +} + +// Берем верхний элемент и удаляем его +char pop(Stack *stack) { + if (StackEmptiness(stack)) { // Проверяем не пуст ли стек + return '\0'; // Возвращаем '\0' если пуст (в таком виде, потому что нужно вернуть char) + } + char value = stack->elements[stack->topIndex]; // Сохраняем верхний элемент + stack->topIndex--; // Уменьшаем индекс + return value; // Возвращаем сохраненный элемент +} + +// Проверяем пуст ли стек (Чтоб не убрать "пустоту") +int StackEmptiness(Stack *stack) { + if (stack->topIndex == -1) { + return 1; // 1 - стек пуст + } else { + return 0; // 0 - стек не пуст + } +} \ No newline at end of file diff --git a/src/hw5_Sort_And_Queue/stack.h b/src/hw5_Sort_And_Queue/stack.h new file mode 100644 index 0000000..a9a024a --- /dev/null +++ b/src/hw5_Sort_And_Queue/stack.h @@ -0,0 +1,51 @@ +// +// File: stack.h +// Author: Alexandra Dolzhenko +// +// Description: Этот модуль предоставляет функции для работы со стеком: +// создание стэка (init_stack), добавление (push), извлечение элементов (pop) и проверка на пустоту (is_empty). +// Нужен для двух задач: Продвинутый баланс скобок и Сортировочная станция +// + +#ifndef TEST_STACK_H +#define TEST_STACK_H +#define STACK_SIZE 1000 // Ограничим максимальный размер стэка до 1000 + + + +// +// Структура для стека +// В ней создаем char массив для хранения элементов длины STACK_SIZE и переменную для хранения индекса верхнего элемента +// +typedef struct { + char elements[STACK_SIZE]; // массив для хранения + int topIndex; // индекс верхнего элемента +} Stack; + +// +// Создание стека +// В качестве параметра берем указатель на стек (для изменения самого стека, а не только копии) +// +void init_stack(Stack *stack); + +// +// Добавление элемента в стек +// Параметр - Указатель на стек и значение элемента для добавления +// +void push(Stack *stack, char value); + +// +// Удаление элемента из стека с проверкой на пустоту +// Параметр - Указатель на стек +// Вернет значение элемента, если есть что удалять, и 0 если нет +// +char pop(Stack *stack); + +// +// Проверка стэка на пустоту +// Параметр - Указатель на стек +// Вернет +// +int StackEmptiness(Stack *stack); + +#endif //TEST_STACK_H \ No newline at end of file From ddcfffe2ca9ab501e4c362e0efe648f16a7fdb01 Mon Sep 17 00:00:00 2001 From: DolzhenkoAlexa Date: Thu, 23 Oct 2025 20:21:59 +0000 Subject: [PATCH 4/4] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20complexParenthe?= =?UTF-8?q?se.c=20=D0=B8=20complexParenthese.h=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=94=D0=97=5F5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hw5_Sort_And_Queue/complexParenthese.c | 53 ++++++++++++++++++++++ src/hw5_Sort_And_Queue/complexParenthese.h | 32 +++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 src/hw5_Sort_And_Queue/complexParenthese.c create mode 100644 src/hw5_Sort_And_Queue/complexParenthese.h diff --git a/src/hw5_Sort_And_Queue/complexParenthese.c b/src/hw5_Sort_And_Queue/complexParenthese.c new file mode 100644 index 0000000..d9a03d3 --- /dev/null +++ b/src/hw5_Sort_And_Queue/complexParenthese.c @@ -0,0 +1,53 @@ +// +// Created by sasha on 23.10.2025. +// + +#include "complexParenthese.h" + +#include +#include +#include "stack.h" + +int checkBrackets(char str[]) +{ + Stack stack; + init_stack(&stack); + + for (int i = 0; str[i] != '\0'; i++) { // Идем с первого символа строки до последнего, который в С \0 + + if (str[i] == '(' || str[i] == '[' || str[i] == '{') { + push(&stack, str[i]); // Если встретилась открывающаяся скобка, то добавляем в стэк + } else if (str[i] == ')' || str[i] == ']' || str[i] == '}') { + if (StackEmptiness(&stack)) { + return 0; // Обрабатываем случай, когда одна закрывающая и без открывающих + } + char lastElem = pop(&stack); // Достаем прошлый элемент стэка + + // проверяем соответствие скобок (они должны быть одного вида, если встретилась закрывающаяся) + if ((lastElem == '(' && str[i] != ')') || (lastElem == '[' && str[i] != ']') || (lastElem == '{' && str[i] != '}')) { + return 0; + } + // Если, например, встретились last == '{' и str[i] == '}', то все верно, идем дальше. + // В стэк не добавляется новый элемент, а прошлый удаляется через pop + } + } + return StackEmptiness(&stack); // если стек пуст, то все скобки проверены, и раз стэк не вернул 0, то строка сбалансирована +} + +int main() +{ + char str[1000]; // Фиксированный размер массива + + printf("Введите строку: "); + + fgets(str, sizeof(str), stdin); + str[strlen(str) - 1] = '\0'; + + if (checkBrackets(str)) { + printf("Сбалансирована\n"); + } else { + printf("Не слабалансирована\n"); + } + + return 0; +} diff --git a/src/hw5_Sort_And_Queue/complexParenthese.h b/src/hw5_Sort_And_Queue/complexParenthese.h new file mode 100644 index 0000000..7224a86 --- /dev/null +++ b/src/hw5_Sort_And_Queue/complexParenthese.h @@ -0,0 +1,32 @@ +// +// Created by sasha on 23.10.2025. +// + +#ifndef TEST_COMPLEXPARENTHESE_H +#define TEST_COMPLEXPARENTHESE_H + +// +// File: complexParenthese.h +// Author: Alexandra Dolzhenko +// +// Description: Этот модуль предоставляет функцию для проверки баланса скобок трех видов: +// круглые (), квадратные [], фигурные {}. Использует стек для проверки правильной вложенности. +// Скобочная последовательность вида ({)} считается некорректной, ({}) — корректной по условию задачи +// + + +// +// Проверка баланса скобок в строке +// Параметр: str - строка для проверки +// Возвращает: 1 если скобки сбалансированы, 0 если нет. Пользователю высвечивается "Строка сбалансирована" и "Строка несбалансирована" +// +// Алгоритм: +// 1. Проходим по каждому символу строки +// 2. Открывающие скобки добавляем в стек +// 3. При встрече закрывающей скобки проверяем соответствие с последней открывающей из стека. +// 4. Если вид соответствует, то закрывающую не добавляем, а прошлую открывающую удаляем. Если нет - возвращаем 0 и заканчиваем. +// 5. Если все скобки закрыты и стек пуст - последовательность сбалансирована +// +int checkBrackets(char str[]); + +#endif //TEST_COMPLEXPARENTHESE_H \ No newline at end of file