Skip to content

Commit f17ad41

Browse files
committed
Implemented task1 and task2
1 parent b470a74 commit f17ad41

File tree

2 files changed

+96
-18
lines changed

2 files changed

+96
-18
lines changed

Lab1CPP/lab1.cpp

+90-13
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,33 @@
1-
#include <stdio.h>
1+
#include <cstdio>
2+
#include <cstdlib>
3+
#include <ctime>
24
#include "array.h"
35

6+
void qsort(Array *arr, size_t start, size_t end){
7+
if (start >= end) return;
8+
9+
size_t left = start;
10+
size_t right = end;
11+
Data pivot = array_get(arr, start + (end - start) / 2);
12+
13+
while (left <= right){
14+
while (array_get(arr, left) < pivot) left++;
15+
while (array_get(arr, right) > pivot) right--;
16+
17+
if (left <= right){
18+
Data temp = array_get(arr, right);
19+
array_set(arr, right, array_get(arr, left));
20+
array_set(arr, left, temp);
21+
left++; right--;
22+
if (right > end) right++;
23+
24+
}
25+
}
26+
27+
qsort(arr, start, right);
28+
qsort(arr, left, end);
29+
}
30+
431
Array *array_create_and_read(FILE *input)
532
{
633
int n;
@@ -17,24 +44,74 @@ Array *array_create_and_read(FILE *input)
1744
return arr;
1845
}
1946

20-
void task1(Array *arr)
47+
void task1(void)
2148
{
49+
size_t n;
50+
Array *arr = NULL;
51+
scanf("%lu", &n);
52+
arr = array_create(n);
53+
for (size_t index{0}; index < n; ++index) array_set(arr, index, rand() % 100);
54+
55+
for (size_t index{0}; index < array_size(arr); ++index){
56+
if (array_get(arr, index) % 2 == 0)
57+
array_set(arr, index, array_get(arr, index) * array_get(arr, index));
58+
else array_set(arr, index, 2 * array_get(arr, index));
59+
}
60+
61+
array_delete(arr);
2262
}
2363

24-
void task2(Array *arr)
64+
void task2(void)
2565
{
66+
size_t size_arr;
67+
Array *arr = NULL;
68+
scanf("%lu", &size_arr);
69+
arr = array_create(size_arr);
70+
for (size_t index{0}; index < size_arr; ++index) array_set(arr, index, rand() % 100);
71+
qsort(arr, 0, size_arr - 1);
72+
73+
for (size_t index{1}; index < size_arr; ++index){
74+
if (index == (size_arr - 1)){
75+
if (index == 1){
76+
if (array_get(arr, 0) == array_get(arr, 1)) printf("%d ", array_get(arr, 0));
77+
continue;
78+
}
79+
if ((array_get(arr, index - 1) == array_get(arr, index)) && (array_get(arr, index - 2) != array_get(arr, index)))
80+
printf("%d ", array_get(arr, index));
81+
continue;
82+
};
83+
84+
if (array_get(arr, index) != array_get(arr, index + 1)){
85+
if (index == 1) {
86+
if (array_get(arr, 0) == array_get(arr, 1))
87+
printf("%d ", array_get(arr, 1));
88+
continue;
89+
}
90+
91+
if ((array_get(arr, index - 1) == array_get(arr, index)) && (array_get(arr, index - 2) != array_get(arr, index)))
92+
printf("%d ", array_get(arr, index));
93+
}
94+
}
95+
96+
array_delete(arr);
97+
printf("\n");
2698
}
2799

28100
int main(int argc, char **argv)
29101
{
30-
Array *arr = NULL;
31-
FILE *input = fopen(argv[1], "r");
32-
arr = array_create_and_read(input);
33-
task1(arr);
34-
array_delete(arr);
35-
/* Create another array here */
36-
arr = array_create_and_read(input);
37-
task2(arr);
38-
array_delete(arr);
39-
fclose(input);
102+
if (argc > 1){
103+
Array *arr = NULL;
104+
FILE *input = fopen(argv[1], "r");
105+
arr = array_create_and_read(input);
106+
array_delete(arr);
107+
/* Create another array here */
108+
arr = array_create_and_read(input);
109+
array_delete(arr);
110+
fclose(input);
111+
}
112+
113+
task1();
114+
task2();
115+
116+
return 0;
40117
}

LibraryCPP/array.cpp

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include "array.h"
2+
#include <stdexcept>
23

34
struct Array
45
{
@@ -37,9 +38,9 @@ void array_delete(Array *arr)
3738
Data array_get(const Array *arr, size_t index)
3839
{
3940
if (!arr)
40-
throw "Array pointer is null";
41+
throw std::invalid_argument("Array pointer is null");
4142
if (index >= arr->size)
42-
throw "Index out of range";
43+
throw std::out_of_range("Index out of range");
4344

4445
return *(arr->first + index);
4546
}
@@ -48,16 +49,16 @@ Data array_get(const Array *arr, size_t index)
4849
void array_set(Array *arr, size_t index, Data value)
4950
{
5051
if (!arr)
51-
throw "Array pointer is null";
52+
throw std::invalid_argument("Array pointer is null");
5253
if (index >= arr->size)
53-
throw "Index out of range";
54+
throw std::out_of_range("Index out of range");
5455

5556
*(arr->first + index) = value;
5657
}
5758

5859
// returns array size
5960
size_t array_size(const Array *arr)
6061
{
61-
if (!arr) throw "Array pointer is null";
62+
if (!arr) throw std::invalid_argument("Array pointer is null");
6263
return arr->size;
6364
}

0 commit comments

Comments
 (0)