Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Yuzkov task 2 #1240

Open
wants to merge 30 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
9612512
Dmitriy Yuzkov is ready to complete the task.
YuzkovRepository Feb 6, 2025
56bb41f
create array
YuzkovRepository Feb 18, 2025
abe8fb9
task1
YuzkovRepository Feb 18, 2025
0a00e52
.
YuzkovRepository Feb 18, 2025
58ac419
пытаюсь собрать сборку
YuzkovRepository Feb 19, 2025
faeace8
проверка сборки
YuzkovRepository Feb 19, 2025
1f4dc11
проверка сборки
YuzkovRepository Feb 19, 2025
ba5fd18
пытаюсь собрать сборку. Попытка 40495
YuzkovRepository Feb 19, 2025
a5b9f36
Попытка собрать сборку 40496
YuzkovRepository Feb 19, 2025
def214f
Попытка собрать проект 40496
YuzkovRepository Feb 19, 2025
12292bb
Смотрю тесты
YuzkovRepository Feb 19, 2025
b7b7b8e
Не понимаю, в чём ошибка(
YuzkovRepository Feb 19, 2025
b4420f2
Исправляю проблемы с комментариями
YuzkovRepository Feb 19, 2025
0c9c182
проверка
YuzkovRepository Feb 19, 2025
292f53f
проверка теста
YuzkovRepository Feb 19, 2025
616088d
готово
YuzkovRepository Feb 19, 2025
8821acb
тест
YuzkovRepository Feb 20, 2025
2af990a
error correction
YuzkovRepository Feb 23, 2025
71d3056
error correction
YuzkovRepository Feb 24, 2025
82e9ecf
error correction
YuzkovRepository Feb 24, 2025
33ce83f
error correction
YuzkovRepository Feb 24, 2025
9684198
error correction
YuzkovRepository Feb 24, 2025
536aa3c
deleted temporary files
YuzkovRepository Feb 25, 2025
92f7b99
fixed bugs
YuzkovRepository Feb 26, 2025
9bae84d
fixed bugs
YuzkovRepository Feb 26, 2025
b796763
fixed bugs
YuzkovRepository Feb 26, 2025
ab1dcb6
fixed bugs
YuzkovRepository Feb 26, 2025
84de1dc
fixed bugs
YuzkovRepository Feb 26, 2025
fe45fd8
deleted files
YuzkovRepository Feb 27, 2025
846aac0
prepared the project for the second laboratory
YuzkovRepository Mar 12, 2025
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,4 @@ Release/*
.vs/*
build/*
.vscode/*
out/*
84 changes: 72 additions & 12 deletions Lab1C/lab1.c
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
#include <stdio.h>
#include <stdlib.h>
#include "array.h"

Array *array_create_and_read(FILE *input)
Array* array_create_and_read(FILE* input)
{
int n;
fscanf(input, "%d", &n);
/* Create array */
Array *arr = array_create(n, NULL);
/* Read array data */
for (int i = 0 ; i < n ; ++i)

Array* arr = array_create(n, NULL);
if (arr == NULL) return NULL;

for (int i = 0; i < n; ++i)
{
int x;
fscanf(input, "%d", &x);
Expand All @@ -17,24 +19,82 @@
return arr;
}

void task1(Array *arr)
void task1(Array* arr)
{
int sum = 0;

for (size_t i = 0; i < array_size(arr); i++) {
sum += (int)array_get(arr, i);
}

printf("Сумма всех элементов массива: %d\n", sum);
printf("Элементы, большие суммы: ");

for (size_t i = 0; i < array_size(arr); i++) {
if ((int)array_get(arr, i) > sum) {
printf("%d (index: %zu) ", (int)array_get(arr, i), i);
}
}
printf("\n");
}

void task2(Array *arr)
void task2(Array* arr)
{
int steps;
char direction;

printf("Введите количество шагов для сдвига: ");
scanf("%d", &steps);

printf("Введите направление сдвига (L - влево, R - вправо): ");
scanf(" %c", &direction);

size_t size = array_size(arr);

for (int step = 0; step < steps; step++) {
if (direction == 'R') {

Check warning on line 55 in Lab1C/lab1.c

View workflow job for this annotation

GitHub Actions / cpp-linter

repeated branch in conditional chain
for (size_t i = size - 1; i > 0; i--) {
array_set(arr, i, array_get(arr, i - 1));
}
array_set(arr, 0, 0);
}
else if (direction == 'L') {
for (size_t i = 0; i < size - 1; i++) {
array_set(arr, i, array_get(arr, i + 1));
}
array_set(arr, size - 1, 0);
}

printf("Массив после %d шага: ", step + 1);
for (size_t i = 0; i < size; i++) {
printf("%lu ", array_get(arr, i));
}
printf("\n");
}
}

int main(int argc, char **argv)
int main(int argc, char** argv)
{
Array *arr = NULL;
FILE *input = fopen(argv[1], "r");
arr = array_create_and_read(input);
if (argc < 2) {
printf("Ошибка: укажите файл с входными данными.\n");
return 1;
}

FILE* input = fopen(argv[1], "r");
if (input == NULL) {
printf("Ошибка: не удалось открыть файл %s.\n", argv[1]);
return 1;
}

Array* arr = array_create_and_read(input);
task1(arr);
array_delete(arr);
/* Create another array here */

arr = array_create_and_read(input);
task2(arr);
array_delete(arr);

fclose(input);
return 0;
}

5 changes: 5 additions & 0 deletions Lab2CPP/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
add_executable(Lab2CPP lab2.cpp)
target_include_directories(Lab2CPP PUBLIC ../LibraryCPP)
target_link_libraries(Lab2CPP LibraryCPP)

add_test(NAME TestLab2CPP COMMAND Lab2CPP ${CMAKE_CURRENT_SOURCE_DIR}/input.txt)
4 changes: 4 additions & 0 deletions Lab2CPP/input.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
10
1 2 3 4 5 6 7 8 9 0
4
1 2 3 4
3 changes: 3 additions & 0 deletions Lab2CPP/lab2.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
int main(int argc, char** argv){

}
8 changes: 4 additions & 4 deletions LibraryC/Tests/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
add_executable(TestArrayC array.cpp)
target_include_directories(TestArrayC PUBLIC ..)
target_link_libraries(TestArrayC LibraryC)
add_test(TestArrayC TestArrayC)
add_executable(TestArrayC array.cpp)
target_include_directories(TestArrayC PUBLIC ..)
target_link_libraries(TestArrayC LibraryC)
add_test(TestArrayC TestArrayC)

# add_executable(TestListC list.cpp)
# target_include_directories(TestListC PUBLIC ..)
Expand Down
14 changes: 7 additions & 7 deletions LibraryC/Tests/array.cpp
Original file line number Diff line number Diff line change
@@ -1,33 +1,33 @@
#include <iostream>
#include "array.h"

int main()
{
Array *arr = array_create(10, [](void *p) { delete (int*)p; });
Array* arr = array_create(10, [](void* p) { delete (int*)p; });

if (array_size(arr) != 10)
{
std::cout << "Invalid array size\n";
std::cout << "Íåâåðíûé ðàçìåð ìàññèâà\n";
array_delete(arr);
return 1;
}

for (int i = 0 ; i < 10 ; ++i)
for (int i = 0; i < 10; ++i)
{
int *d = new int;
int* d = new int;
*d = i * 2;
array_set(arr, i, (Data)d);
}

for (int i = 0 ; i < 10 ; ++i)
for (int i = 0; i < 10; ++i)
{
if (*(int*)array_get(arr, i) != i * 2)
{
std::cout << "Invalid array element " << i << "\n";
std::cout << "Íåâåðíûé ýëåìåíò ìàññèâà " << i << "\n";
array_delete(arr);
return 1;
}
}

array_delete(arr);
}
}
58 changes: 43 additions & 15 deletions LibraryC/array.c
Original file line number Diff line number Diff line change
@@ -1,35 +1,63 @@
#include <stdlib.h>
#include "array.h"

typedef struct Array
{
typedef struct Array {
size_t size;
Data* data;
FFree free_func;
} Array;

// create array
Array *array_create(size_t size, FFree f)
{
return malloc(sizeof(Array));
Array* array_create(size_t size, FFree f) {
Array* arr = (Array*)malloc(sizeof(Array));
if (arr == NULL) return NULL;

arr->size = size;
arr->data = (Data*)malloc(size * sizeof(Data));
if (arr->data == NULL) {
free(arr);
return NULL;
}

arr->free_func = f;

for (size_t i = 0; i < size; i++) {
arr->data[i] = 0;
}

return arr;
}

// delete array, free memory
void array_delete(Array *arr)
{
void array_delete(Array* arr) {
if (arr == NULL) return;

if (arr->free_func != NULL) {
for (size_t i = 0; i < arr->size; i++) {
arr->free_func((void*)arr->data[i]);
}
}

free(arr->data);
free(arr);
}

// returns specified array element
Data array_get(const Array *arr, size_t index)
{
return (Data)0;
Data array_get(const Array* arr, size_t index) {
if (arr == NULL || index >= arr->size) {
return 0;
}
return arr->data[index];
}

// sets the specified array element to the value
void array_set(Array *arr, size_t index, Data value)
{
void array_set(Array* arr, size_t index, Data value) {
if (arr == NULL || index >= arr->size) return;
arr->data[index] = value;
}

// returns array size
size_t array_size(const Array *arr)
{
return 0;
size_t array_size(const Array* arr) {
if (arr == NULL) return 0;
return arr->size;
}
2 changes: 1 addition & 1 deletion LibraryC/array.h
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
#ifndef ARRAY_H
#define ARRAY_H

Expand All @@ -8,7 +8,7 @@
// Stores pointer to custom user data
typedef uintptr_t Data;
// Custom function to free user pointers on delete
typedef void (FFree)(void*);
typedef void (*FFree)(void*);

typedef struct Array Array;

Expand Down
3 changes: 3 additions & 0 deletions Юзьков.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
4097 Юзьков Дмитрий
[email protected]
[email protected]