From b6162753089503f91b9033e363cdba0efc449442 Mon Sep 17 00:00:00 2001 From: ruddos Date: Sun, 1 Dec 2024 13:55:30 +0300 Subject: [PATCH] new --- lab1/check_general.bat | 3 ++ lab1/check_individual.bat | 9 ++++++ lab1/expected_output.txt | 2 ++ lab1/general_program.cpp | 48 ++++++++++++++++++++++++++++ lab1/individual_program.cpp | 33 +++++++++++++++++++ lab1/input.txt | 3 ++ lab1/output_general.txt | 5 +++ lab1/output_individual.txt | 2 ++ lab4/task_1.cpp | 45 ++++++++++++++++++++++++++ lab4/task_2.cpp | 31 ++++++++++++++++++ lab4/task_3.cpp | 40 +++++++++++++++++++++++ lab4/task_4.cpp | 63 +++++++++++++++++++++++++++++++++++++ 12 files changed, 284 insertions(+) create mode 100644 lab1/check_general.bat create mode 100644 lab1/check_individual.bat create mode 100644 lab1/expected_output.txt create mode 100644 lab1/general_program.cpp create mode 100644 lab1/individual_program.cpp create mode 100644 lab1/input.txt create mode 100644 lab1/output_general.txt create mode 100644 lab1/output_individual.txt create mode 100644 lab4/task_1.cpp create mode 100644 lab4/task_2.cpp create mode 100644 lab4/task_3.cpp create mode 100644 lab4/task_4.cpp diff --git a/lab1/check_general.bat b/lab1/check_general.bat new file mode 100644 index 0000000..286dcdb --- /dev/null +++ b/lab1/check_general.bat @@ -0,0 +1,3 @@ +@echo off +g++ -o general_program general_program.cpp +general_program.exe < input.txt > output_general.txt diff --git a/lab1/check_individual.bat b/lab1/check_individual.bat new file mode 100644 index 0000000..444c19c --- /dev/null +++ b/lab1/check_individual.bat @@ -0,0 +1,9 @@ +@echo off + +g++ individual_program.cpp -o individual_program.exe + + +individual_program.exe < input.txt > output_individual.txt + +fc output_individual.txt expected_output.txt +pause \ No newline at end of file diff --git a/lab1/expected_output.txt b/lab1/expected_output.txt new file mode 100644 index 0000000..2a0bd3f --- /dev/null +++ b/lab1/expected_output.txt @@ -0,0 +1,2 @@ +Number of columns: 2 +Formula used: Square root formula (sqrt(N)) \ No newline at end of file diff --git a/lab1/general_program.cpp b/lab1/general_program.cpp new file mode 100644 index 0000000..cabe253 --- /dev/null +++ b/lab1/general_program.cpp @@ -0,0 +1,48 @@ + +#include +#include +#include +#include +using namespace std; + +int main() { + size_t number_count; + cout << "Enter number count: "; + cin >> number_count; + + vector numbers(number_count); + cout << "Enter numbers:\n"; + for (size_t i = 0; i < number_count; ++i) { + cin >> numbers[i]; + } + + size_t bin_count; + cout << "Enter number of bins: "; + cin >> bin_count; + + double min = *min_element(numbers.begin(), numbers.end()); + double max = *max_element(numbers.begin(), numbers.end()); + double bin_size = (max - min) / bin_count; + + vector bins(bin_count, 0); + for (double number : numbers) { + size_t bin_index = static_cast((number - min) / bin_size); + if (bin_index >= bin_count) bin_index = bin_count - 1; + bins[bin_index]++; + } + + size_t max_bin_count = *max_element(bins.begin(), bins.end()); + const size_t max_width = 80; + double scaling_factor = max_bin_count > max_width ? static_cast(max_width) / max_bin_count : 1.0; + + for (size_t i = 0; i < bin_count; ++i) { + cout << bins[i] << "|"; + size_t scaled_height = static_cast(bins[i] * scaling_factor); + for (size_t j = 0; j < scaled_height; ++j) { + cout << '*'; + } + cout << '\n'; + } + + return 0; +} diff --git a/lab1/individual_program.cpp b/lab1/individual_program.cpp new file mode 100644 index 0000000..c8eb24a --- /dev/null +++ b/lab1/individual_program.cpp @@ -0,0 +1,33 @@ +#include +#include + +using namespace std; + +int main() { + int N; + cout << "Enter the total number of elements (N): "; + cin >> N; + + int columns; + string formula_used; + + if (N == 0) { + columns = 0; + formula_used = "None (N is 0)"; + } else { + double sqrt_value = sqrt(N); + + if (sqrt_value > 25) { + columns = 1 + static_cast(log2(N)); + formula_used = "Sturges' formula (1 + floor(log2(N)))"; + } else { + columns = static_cast(sqrt_value); + formula_used = "Square root formula (sqrt(N))"; + } + } + + cout << "Number of columns: " << columns << endl; + cout << "Formula used: " << formula_used << endl; + + return 0; +} \ No newline at end of file diff --git a/lab1/input.txt b/lab1/input.txt new file mode 100644 index 0000000..a121cf5 --- /dev/null +++ b/lab1/input.txt @@ -0,0 +1,3 @@ +7 +1 2 2 3 3 3 4 +4 diff --git a/lab1/output_general.txt b/lab1/output_general.txt new file mode 100644 index 0000000..8938ea5 --- /dev/null +++ b/lab1/output_general.txt @@ -0,0 +1,5 @@ +Enter number count: Enter numbers: +Enter number of bins: 1|* +2|** +3|*** +1|* diff --git a/lab1/output_individual.txt b/lab1/output_individual.txt new file mode 100644 index 0000000..4a40578 --- /dev/null +++ b/lab1/output_individual.txt @@ -0,0 +1,2 @@ +Enter the total number of elements (N): Number of columns: 2 +Formula used: Square root formula (sqrt(N)) diff --git a/lab4/task_1.cpp b/lab4/task_1.cpp new file mode 100644 index 0000000..7f34cd0 --- /dev/null +++ b/lab4/task_1.cpp @@ -0,0 +1,45 @@ + +#include +#include +#include +using namespace std; + +void print_in_hex(uint8_t byte) { + cout << hex << setw(2) << setfill('0') << static_cast(byte) << " "; +} + +void print_in_hex(const void* data, size_t size) { + const uint8_t* bytes = static_cast(data); + for (size_t i = 0; i < size; ++i) { + print_in_hex(bytes[i]); + if ((i + 1) % 16 == 0) cout << endl; + } + cout << endl; +} + +void print_in_binary(uint8_t byte) { + for (int i = 7; i >= 0; --i) cout << ((byte >> i) & 1); + cout << " "; +} + +void print_in_binary(const void* data, size_t size) { + const uint8_t* bytes = static_cast(data); + for (size_t i = 0; i < size; ++i) { + print_in_binary(bytes[i]); + if ((i + 1) % 4 == 0) cout << endl; + } + cout << endl; +} + +int main() { + uint8_t data[] = {0xDE, 0xAD, 0xBE, 0xEF, 0x12, 0x34, 0x56, 0x78}; + size_t size = sizeof(data); + + cout << "Hexadecimal representation:" << endl; + print_in_hex(data, size); + + cout << "Binary representation:" << endl; + print_in_binary(data, size); + + return 0; +} diff --git a/lab4/task_2.cpp b/lab4/task_2.cpp new file mode 100644 index 0000000..2258b03 --- /dev/null +++ b/lab4/task_2.cpp @@ -0,0 +1,31 @@ + +#include +#include +#include +using namespace std; + +int main() { + uint16_t operand1, operand2; + char operation; + + cout << "Enter first operand: "; + cin >> operand1; + cout << "Enter operation (&, |, ^): "; + cin >> operation; + cout << "Enter second operand: "; + cin >> operand2; + + uint16_t result = 0; + if (operation == '&') result = operand1 & operand2; + else if (operation == '|') result = operand1 | operand2; + else if (operation == '^') result = operand1 ^ operand2; + else { + cout << "Invalid operation" << endl; + return 1; + } + + cout << "Hexadecimal: " << hex << setw(4) << setfill('0') << result << endl; + cout << "Binary: " << bitset<16>(result) << endl; + + return 0; +} diff --git a/lab4/task_3.cpp b/lab4/task_3.cpp new file mode 100644 index 0000000..e22b78b --- /dev/null +++ b/lab4/task_3.cpp @@ -0,0 +1,40 @@ + +#include +#include +#include +#include +using namespace std; + +struct Student { + char name[17]; + uint16_t enrollment_year; + float gpa; + uint8_t gender : 1; // 0 = female, 1 = male + uint8_t courses_completed; + Student* group_leader; +}; + +void print_memory_info(const Student& student) { + cout << "Name address: " << &student.name << ", size: " << sizeof(student.name) << endl; + cout << "Year address: " << &student.enrollment_year << ", size: " << sizeof(student.enrollment_year) << endl; + cout << "GPA address: " << &student.gpa << ", size: " << sizeof(student.gpa) << endl; + cout << "Gender address: " << &student.gender << ", size: 1 bit" << endl; + cout << "Courses address: " << &student.courses_completed << ", size: " << sizeof(student.courses_completed) << endl; + cout << "Leader address: " << &student.group_leader << ", size: " << sizeof(student.group_leader) << endl; +} + +int main() { + Student students[3] = { + {"Alice", 2021, 3.8, 0, 5, nullptr}, + {"Bob", 2021, 3.5, 1, 4, nullptr}, + {"Charlie", 2020, 3.9, 1, 6, &students[0]} + }; + + for (size_t i = 0; i < 3; ++i) { + cout << "Student " << i + 1 << " memory info:" << endl; + print_memory_info(students[i]); + cout << endl; + } + + return 0; +} diff --git a/lab4/task_4.cpp b/lab4/task_4.cpp new file mode 100644 index 0000000..d0c667e --- /dev/null +++ b/lab4/task_4.cpp @@ -0,0 +1,63 @@ + +#include +#include +#include +using namespace std; + +bool is_valid_filename(const char* filename) { + const char* invalid_chars = "*<>?|"; + if (strpbrk(filename, invalid_chars)) return false; + + const char* colon = strchr(filename, ':'); + if (colon && (colon != filename + 1 || !isalpha(filename[0]) || colon[1] != '\n')) return false; + + const char* ext = strrchr(filename, '.'); + if (ext && strcasecmp(ext, ".txt") != 0) return false; + + return true; +} + +void add_txt_extension(char* filename) { + strcat(filename, ".txt"); +} + +int main() { + char filename[256]; + cout << "Enter filename: "; + cin >> filename; + + if (!is_valid_filename(filename)) { + cout << "Invalid filename." << endl; + return 1; + } + + if (!strrchr(filename, '.')) add_txt_extension(filename); + + ifstream file(filename, ios::binary | ios::ate); + if (!file.is_open()) { + cout << "Failed to open file." << endl; + return 1; + } + + streamsize size = file.tellg(); + file.seekg(0, ios::beg); + + char* buffer = new char[size]; + file.read(buffer, size); + + char search[256]; + cout << "Enter string to search: "; + cin >> search; + + size_t count = 0; + char* pos = buffer; + while ((pos = strstr(pos, search))) { + ++count; + pos += strlen(search); + } + + cout << "Occurrences: " << count << endl; + + delete[] buffer; + return 0; +}