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
60 changes: 60 additions & 0 deletions Control-works/Control-work-No.1/Task_1/Fibonacci.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
#include <stdio.h>



int fibonacci(int count)
{
int a = 1;
int b = 1;
int c = 0;
int n = 3;

while(n <= count)
{
c = a + b;
a = b;
b = c;
n++;
}

return c;
}


int main(void)
{
int number;

printf("Введите n: ");
scanf("%d", &number);

if (number < 0)
{
printf("Число n не должно быть отритцательнвм\n");
}

else if (number == 0)
{
printf("Нулевого числа Фибоначи не существует\n");
}

else if (number == 1 | number == 2)
{
printf("Число %d: 1\n", number);
}

else
{
if (number >= 47)
{
printf("Результат ниже может быть аномальным из-за использования типа int:\n");
}

int result = fibonacci(number);
printf("Число %d: %d\n", number, result);
}

return 0;
}


38 changes: 38 additions & 0 deletions Control-works/Control-work-No.1/Task_2/Sorting-by-choice.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#include <stdio.h>

void selection_sort(int array[], int length)
{
for (int n = 0; n < length - 1; n++)
{
int min = n;
for (int j = n + 1; j < length; j++)
{
if (array[j] < array[min])
{
min = j;
}
}

int temp = array[n];
array[n] = array[min];
array[min] = temp;
}
}

int main(void)
{
int arr[10] = {124, 828, 643, 820, 572, 5735, 5902, 55, 90, 12};
int l = sizeof(arr) / sizeof(arr[0]);



selection_sort(arr, l);

for (int i = 0; i < l; i++)
{
printf("%d ", arr[i]);
}
printf("\n");

return 0;
}
25 changes: 25 additions & 0 deletions Control-works/Control-work-No.2/Rewrite/Task_1/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Build
build/
*.exe
*.out

# Object files
*.o
*.obj

# Libraries
*.a
*.so
*.dylib

# CMake
CMakeCache.txt
CMakeFiles/
cmake_install.cmake
Makefile
compile_commands.json

# IDE
.vscode/
.idea/
*.swp
38 changes: 38 additions & 0 deletions Control-works/Control-work-No.2/Rewrite/Task_1/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
cmake_minimum_required(VERSION 3.10)
project(palindrome_check C)

set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Werror")

add_executable(palindrome_check
src/main.c
src/palindrome.c
)

target_include_directories(palindrome_check
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
)

add_executable(test_palindrome
tests/test_palindrome.c
src/palindrome.c
)

target_include_directories(test_palindrome
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
)

target_compile_definitions(test_palindrome
PRIVATE TEST_MAIN
)

enable_testing()
add_test(NAME palindrome_tests COMMAND test_palindrome)

message(STATUS "=== Проект 'Проверка палиндрома' ===")
message(STATUS "Доступные цели:")
message(STATUS " - palindrome_check (основная программа)")
message(STATUS " - test_palindrome (тесты)")
message(STATUS "Для сборки: mkdir build && cd build && cmake .. && make")
27 changes: 27 additions & 0 deletions Control-works/Control-work-No.2/Rewrite/Task_1/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# "Опять палиндром"

## Описание
Программа для проверки симметричности списка.
С клавиатуры вводятся натуральные числ. по ним строится список и определяется, симметричен ли он.

## Структура проекта
Task_1/
| .gitignore Игнорируемые файлы
| CMakeLists.txt Главный файл CMake
| README.md Документация
| include/ Заголовочные файлы
| - palindrome.h Объявление структур и функций
|
| src/ Исходный код
| - main.c Основная программа с вводом/выводом
| - palindrome.c Реализация алгоритмов работы со списком
|
| tests/ Модульные тесты
| - test_palindrome.c Тесты для проверки корректности

## Сборка
```bash
mkdir build
cd build
cmake ..
make
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
#ifndef PALINDROME_H
#define PALINDROME_H

#include <stdbool.h>

typedef struct Node {
int data;
struct Node *next;
} Node;

// Функции для работы со списком

/**
* Создает новый узел списка
* - param: data Значение для узла
* - return: Указатель на созданный узел или NULL при ошибке
*/
Node *create_node(int data);

/**
* Добавляет элемент в конец списка
* - param: head Указатель на начало списка
* data Значение для добавления
* - return: Указатель на начало списка
*/
Node *append_node(Node *head, int data);

/**
* Освобождает память, занятую списком
* - param: head Указатель на начало списка
*/
void free_list(Node *head);

/**
* Печатает элементы списка
* - param: head Указатель на начало списка
*/
void print_list(Node *head);

/**
* Проверяет, является ли список палиндромом
* - param: head Указатель на начало списка
* - return: true если список палиндром
* false в противном случае
*/
bool is_palindrome(Node *head);

/**
* Реверсирует список
* - param: head Указатель на начало списка
* - return: Указатель на начало реверсированного списка
*/
Node *reverse_list(Node *head);

/**
* Сравнивает два списка на равенство
* - param: list1 - первый список
* list2 - второй список
* - return: true если списки равны
* false в противном случае
*/
bool compare_lists(Node *list1, Node *list2);

#endif // PALINDROME_H
61 changes: 61 additions & 0 deletions Control-works/Control-work-No.2/Rewrite/Task_1/src/main.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
#include "../include/palindrome.h"
#include <stdio.h>
#include <stdlib.h>

int main() {
Node *head = NULL;
int number;

printf("=== \"Опять палиндром\" ===\n");
printf("Вводите натуральные числа по одному через пробел\n");
printf("(0 для окончания ввода):\n");

while (1) {
printf("> ");
if (scanf("%d", &number) != 1) {
printf("Ошибка ввода. Пожалуйста, введите число.\n");

// Очищаем буфер ввода
while (getchar() != '\n')
;
continue;
}

if (number == 0) {
break;
}

if (number < 0) {
printf("Пожалуйста, вводите только натуральные числа (положительные).\n");
continue;
}

head = append_node(head, number);

if (head == NULL) {
printf("Ошибка: не удалось добавить элемент в список.\n");
return 1;
}
}

if (head == NULL) {
printf("Список пуст.\n");
return 0;
}

printf("\nПолученный список: ");
print_list(head);

if (is_palindrome(head)) {
printf("Список является палиндромом.\n");
}

else {
printf("Список не является палиндромом.\n");
}

// Освобождаем память
free_list(head);

return 0;
}
Loading
Loading