-
Notifications
You must be signed in to change notification settings - Fork 291
/
Copy pathlab1.c
100 lines (81 loc) · 2.34 KB
/
lab1.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <stdio.h>
#include <stdlib.h>
#include "array.h"
Array* array_create_and_read(FILE* input)
{
int n;
fscanf(input, "%d", &n);
Array* arr = array_create(n, NULL);
if (arr == NULL) return NULL;
for (int i = 0; i < n; ++i)
{
int x;
fscanf(input, "%d", &x);
array_set(arr, i, x);
}
return 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)
{
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') {
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)
{
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);
arr = array_create_and_read(input);
task2(arr);
array_delete(arr);
fclose(input);
return 0;
}