Skip to content

Commit 2d13058

Browse files
committed
Made changes
1 parent f4fd868 commit 2d13058

File tree

3 files changed

+30
-52
lines changed

3 files changed

+30
-52
lines changed

Lab1CPP/input.txt

-2
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,3 @@
22
1 2 3 4 5 6 7 8 9 0
33
4
44
1 2 3 4
5-
10
6-
10

Lab1CPP/lab1.cpp

+25-45
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
#include <cstdio>
2-
#include <cstdlib>
3-
#include <ctime>
42
#include <stdexcept>
53
#include "array.h"
64

@@ -29,6 +27,11 @@ void qsort(Array *arr, size_t start, size_t end){
2927
qsort(arr, left, end);
3028
}
3129

30+
void qsort(Array *arr)
31+
{
32+
qsort(arr, 0, array_size(arr) - 1);
33+
}
34+
3235
Array *array_create_and_read(FILE *input)
3336
{
3437
int n;
@@ -42,78 +45,55 @@ Array *array_create_and_read(FILE *input)
4245
if (fscanf(input, "%d", &x) < 1) throw std::invalid_argument("Failed to read number");
4346
array_set(arr, i, x);
4447
}
48+
4549
return arr;
4650
}
4751

48-
void task1(FILE *input)
52+
void task1(Array *arr)
4953
{
50-
size_t n;
51-
Array *arr = NULL;
52-
if (fscanf(input, "%lu", &n) < 1) throw std::runtime_error("Failed to read size");
53-
arr = array_create(n);
54-
for (size_t index{0}; index < n; ++index) array_set(arr, index, rand() % 100);
54+
size_t size = array_size(arr);
5555

56-
for (size_t index{0}; index < array_size(arr); ++index){
56+
for (size_t index{0}; index < size; ++index){
5757
if (array_get(arr, index) % 2 == 0)
5858
array_set(arr, index, array_get(arr, index) * array_get(arr, index));
5959
else array_set(arr, index, 2 * array_get(arr, index));
6060
}
61-
62-
array_delete(arr);
6361
}
6462

65-
void task2(FILE *input)
63+
void task2(Array *arr)
6664
{
67-
size_t size_arr;
68-
Array *arr = NULL;
69-
if (fscanf(input, "%lu", &size_arr) < 1) throw std::runtime_error("Failed to read size");
70-
arr = array_create(size_arr);
71-
for (size_t index{0}; index < size_arr; ++index) array_set(arr, index, rand() % 100);
72-
qsort(arr, 0, size_arr - 1);
65+
if (!arr) std::invalid_argument("Array pointer is null");
66+
if (array_size(arr) < 2) return;
67+
qsort(arr);
68+
69+
unsigned cnt = 1;
70+
size_t size_arr = array_size(arr);
71+
Data item = array_get(arr, 0);
7372

7473
for (size_t index{1}; index < size_arr; ++index){
75-
if (index == (size_arr - 1)){
76-
if (index == 1){
77-
if (array_get(arr, 0) == array_get(arr, 1)) printf("%d ", array_get(arr, 0));
78-
continue;
79-
}
80-
if ((array_get(arr, index - 1) == array_get(arr, index)) && (array_get(arr, index - 2) != array_get(arr, index)))
81-
printf("%d ", array_get(arr, index));
82-
continue;
83-
};
84-
85-
if (array_get(arr, index) != array_get(arr, index + 1)){
86-
if (index == 1) {
87-
if (array_get(arr, 0) == array_get(arr, 1))
88-
printf("%d ", array_get(arr, 1));
89-
continue;
90-
}
91-
92-
if ((array_get(arr, index - 1) == array_get(arr, index)) && (array_get(arr, index - 2) != array_get(arr, index)))
93-
printf("%d ", array_get(arr, index));
74+
if (array_get(arr, index) == item) cnt++;
75+
else {
76+
if (cnt == 2) printf("%d ", item);
77+
cnt = 1;
78+
item = array_get(arr, index);
9479
}
9580
}
9681

97-
array_delete(arr);
82+
if (cnt == 2) printf("%d", item);
9883
printf("\n");
9984
}
10085

10186
int main(int argc, char **argv)
10287
{
103-
/*
104-
Не совсем понял откуда берётся с клавиатуры или из файла. В задание сказано из файла, но если запускать тесты, то будет
105-
вызвано исключение runtime_error (в случае если мы ждем числа с клавиатуры)
106-
*/
10788
Array *arr = NULL;
10889
FILE *input = fopen(argv[1], "r");
10990
arr = array_create_and_read(input);
91+
task1(arr);
11092
array_delete(arr);
11193
/* Create another array here */
11294
arr = array_create_and_read(input);
95+
task2(arr);
11396
array_delete(arr);
114-
115-
task1(input);
116-
task2(input);
11797

11898
fclose(input);
11999
return 0;

LibraryCPP/array.cpp

+5-5
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@ Array *array_create(size_t size)
1212
{
1313
if (size == 0) return nullptr;
1414

15-
Array *arr = new Array;
15+
Array *arr = (Array*) malloc(sizeof(Array));
1616
if (!arr) return nullptr;
1717

1818
arr->size = size;
19-
arr->first = new Data[size];
19+
arr->first = (Data*) malloc(size * sizeof(Data));
2020
if (!(arr->first)){
21-
delete arr;
21+
free(arr);
2222
return nullptr;
2323
}
2424

@@ -30,8 +30,8 @@ void array_delete(Array *arr)
3030
{
3131
if (!arr) return;
3232

33-
delete[] arr->first;
34-
delete arr;
33+
free(arr->first);
34+
free(arr);
3535
}
3636

3737
// returns specified array element

0 commit comments

Comments
 (0)