Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions src/hw5_Sort_And_Queue/complexParenthese.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
//
// Created by sasha on 23.10.2025.
//

#include "complexParenthese.h"

#include <stdio.h>
#include <string.h>
#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;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

что-то с форматированием

}
// Если, например, встретились 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;
}
32 changes: 32 additions & 0 deletions src/hw5_Sort_And_Queue/complexParenthese.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
//
// Created by sasha on 23.10.2025.
//

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

этот файл должен содержать и код тоже

#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
35 changes: 35 additions & 0 deletions src/hw5_Sort_And_Queue/stack.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
//
// Created by sasha on 23.10.2025.
//

#include "stack.h"

// Создаем стэк, делая значение top равным -1 ("нет элементов")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

стек

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 - стек не пуст
}
}
51 changes: 51 additions & 0 deletions src/hw5_Sort_And_Queue/stack.h
Original file line number Diff line number Diff line change
@@ -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
25 changes: 25 additions & 0 deletions src/hw_Optimal_Sort/main.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#include <stdio.h>

// Объявление функции
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;
}
16 changes: 16 additions & 0 deletions src/hw_Optimal_Sort/sort.c
Original file line number Diff line number Diff line change
@@ -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;
}
67 changes: 67 additions & 0 deletions src/kr/diffPalindrome.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
//
// Created by sasha on 17.10.2025.
//

//Напечатать на экран все из диапазона [1;n],
//которые являются палиндромами в двоичной записи. Выводить в десятичной системе счисления.

#include <stdio.h>
#include <string.h>

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;
}
49 changes: 49 additions & 0 deletions src/kr/max.c
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

тут что-то странное: задачи с контрольной почему-то здесь (в PR должны быть только релевантные файлы). за это пока минус баллы, но ничего не делайте --- до того как я проверю контрольную

Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
//
// В массиве целых чисел найти число, сумма цифр которого была бы наибольшей.
// Если таких чисел несколько, вывести на экран все эти числа.
//

#include <stdio.h>

// Функция нахождения максимальной суммы
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;
}