-
Notifications
You must be signed in to change notification settings - Fork 291
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
lab1 #1238
base: master
Are you sure you want to change the base?
lab1 #1238
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
ÐниÑимов Ð˜Ð»ÑŒÑ Ðзатович группа 4097ду |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
add_executable(Lab1CPP lab1.cpp) | ||
target_include_directories(Lab1CPP PUBLIC ../LibraryCPP) | ||
target_link_libraries(Lab1CPP LibraryCPP) | ||
|
||
add_test(NAME TestLab1CPP COMMAND Lab1CPP ${CMAKE_CURRENT_SOURCE_DIR}/input.txt) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
10 20 50 |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
#include <iostream> | ||
Check notice on line 1 in Lab1CPP/lab1.cpp
|
||
#include <fstream> | ||
#include <cstdlib> | ||
#include <ctime> | ||
#include "../LibraryCPP/array.h" | ||
|
||
size_t find_max_odd_segment(const Array* arr) { | ||
size_t max_length = 0; | ||
size_t current_length = 0; | ||
|
||
for (size_t i = 0; i < array_size(arr); ++i) { | ||
if (array_get(arr, i) % 2 != 0) { | ||
current_length++; | ||
if (current_length > max_length) { | ||
max_length = current_length; | ||
} | ||
} else { | ||
current_length = 0; | ||
} | ||
} | ||
|
||
return max_length; | ||
} | ||
|
||
void compress_array(Array* arr, int a, int b) { | ||
size_t write_index = 0; | ||
|
||
for (size_t read_index = 0; read_index < array_size(arr); ++read_index) { | ||
int value = array_get(arr, read_index); | ||
if (value < a || value > b) { | ||
array_set(arr, write_index, value); | ||
write_index++; | ||
} | ||
} | ||
|
||
for (size_t i = write_index; i < array_size(arr); ++i) { | ||
array_set(arr, i, 0); | ||
} | ||
} | ||
|
||
int main(int argc, char* argv[]) { | ||
if (argc < 2) { | ||
std::cerr << "Èñïîëüçîâàíèå: " << argv[0] << " <input_file>" << std::endl; | ||
return 1; | ||
} | ||
|
||
std::ifstream input_file(argv[1]); | ||
if (!input_file.is_open()) { | ||
std::cerr << "Îøèáêà: íå óäàëîñü îòêðûòü ôàéë " << argv[1] << std::endl; | ||
return 1; | ||
} | ||
|
||
size_t size; | ||
int a, b; | ||
input_file >> size >> a >> b; | ||
|
||
Array* arr = array_create(size); | ||
std::srand(std::time(nullptr)); | ||
for (size_t i = 0; i < size; ++i) { | ||
array_set(arr, i, std::rand() % 100); | ||
} | ||
|
||
std::cout << "Èñõîäíûé ìàññèâ: "; | ||
for (size_t i = 0; i < array_size(arr); ++i) { | ||
std::cout << array_get(arr, i) << " "; | ||
} | ||
std::cout << std::endl; | ||
|
||
size_t max_odd_length = find_max_odd_segment(arr); | ||
std::cout << "Ìàêñèìàëüíàÿ äëèíà îòðåçêà èç íå÷åòíûõ ÷èñåë: " << max_odd_length << std::endl; | ||
|
||
compress_array(arr, a, b); | ||
|
||
std::cout << "Ñæàòûé ìàññèâ: "; | ||
for (size_t i = 0; i < array_size(arr); ++i) { | ||
std::cout << array_get(arr, i) << " "; | ||
} | ||
std::cout << std::endl; | ||
|
||
array_delete(arr); | ||
|
||
return 0; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,3 @@ | ||
add_library(LibraryCPP STATIC array.cpp list.cpp queue.cpp stack.cpp vector.cpp) | ||
add_library(LibraryCPP STATIC array.cpp) | ||
|
||
add_subdirectory(Tests) |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,34 +1,47 @@ | ||
#include "array.h" | ||
Check notice on line 1 in LibraryCPP/array.cpp
|
||
|
||
struct Array | ||
Check warning on line 3 in LibraryCPP/array.cpp
|
||
{ | ||
Data* data; | ||
size_t size; | ||
explicit Array(const size_t arr_size): data(new Data[arr_size]), size(arr_size) {} | ||
~Array() { | ||
delete[] data; | ||
} | ||
}; | ||
|
||
// create array | ||
Array *array_create(size_t size) | ||
Array *array_create(const size_t size) | ||
{ | ||
return new Array; | ||
return new Array(size); | ||
} | ||
|
||
// delete array, free memory | ||
void array_delete(Array *arr) | ||
void array_delete(Array* arr) | ||
{ | ||
delete arr; | ||
} | ||
|
||
// returns specified array element | ||
Data array_get(const Array *arr, size_t index) | ||
Data array_get(const Array *arr, const size_t index) | ||
{ | ||
return (Data)0; | ||
if (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) | ||
{ | ||
if (!arr || index >= arr->size) { | ||
return; | ||
} | ||
arr->data[index] = value; | ||
} | ||
|
||
// returns array size | ||
size_t array_size(const Array *arr) | ||
{ | ||
return 0; | ||
} | ||
return arr->size; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Тут не нужно указывать путь, потому что он уже есть в CMakeLists.txt