commit 16bdf15c3c8c0dc05312d9e5ded1a2b5144dda9e Author: KolesnikovaYA Date: Fri Dec 27 21:10:11 2024 +0300 first commit diff --git a/lab4.docx b/lab4.docx new file mode 100644 index 0000000..3e1a270 Binary files /dev/null and b/lab4.docx differ diff --git a/task1_2/Release/task1_2.exe b/task1_2/Release/task1_2.exe new file mode 100644 index 0000000..a961973 Binary files /dev/null and b/task1_2/Release/task1_2.exe differ diff --git a/task1_2/task1_2.cpp b/task1_2/task1_2.cpp new file mode 100644 index 0000000..3a6f146 --- /dev/null +++ b/task1_2/task1_2.cpp @@ -0,0 +1,92 @@ +#include +using namespace std; +char digits[] = "0123456789ABCDEF"; + +const uint8_t* +as_bytes(const void* data) { + return reinterpret_cast(data); +} + +char nibble_to_hex(uint8_t i) { + return digits[i & 0xf]; +} +void print_in_hex(uint8_t byte) { + cout << nibble_to_hex(byte >> 4) + << nibble_to_hex(byte & 0xf); +} +void print_in_hex(const void* data, size_t size) { + const uint8_t *bytes = as_bytes(data); + for (size_t i = 0; i < size; i++) { + print_in_hex(bytes[i]); + if ((i + 1) % 16 == 0) { + cout << '\n'; + } + else { + cout << ' '; + } + } +} +char bit_digit(uint8_t byte, uint8_t bit) { + if (byte &(0x1 << bit)) { + return '1'; + } + return '0'; +} + +void print_in_binary(uint8_t byte) { + for (int bit = 7; bit >= 0; bit--) { + cout << bit_digit(byte, bit); + } +} +void print_in_binary(const void* data, size_t size) { + const uint8_t *bytes = as_bytes(data); + for (size_t i = 0; i < size; i++) { + print_in_binary(bytes[i]); + if ((i + 1) % 4 == 0) { + cout << '\n'; + } + else { + cout << ' '; + } + } +} +int main() { + uint16_t c1, c2, result = 0; + char operation[8]; + bool calculated = false; + cout << "Input expression: "; + cin >> c1 >> operation >> c2; + switch (operation[0]) { + case '&': + result = c1&c2; + calculated = true; + break; + case '|': + result = c1 | c2; + calculated = true; + break; + case '^': + result = c1 ^ c2; + calculated = true; + break; + default: + cout << "Unknown operation\n"; + break; + } + if (calculated) { + print_in_hex(&c1, sizeof(uint16_t)); + cout << " & "; + print_in_hex(&c2, sizeof(uint16_t)); + cout << " = "; + print_in_hex(&result, sizeof(uint16_t)); + cout << "\n"; + print_in_binary(&c1, sizeof(uint16_t)); + cout << " &\n"; + print_in_binary(&c2, sizeof(uint16_t)); + cout << " =\n"; + print_in_binary(&result, sizeof(uint16_t)); + cout << "\n"; + } + cin >> result; +} + diff --git a/task1_2/task1_2.sln b/task1_2/task1_2.sln new file mode 100644 index 0000000..ae44670 --- /dev/null +++ b/task1_2/task1_2.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "task1_2", "task1_2.vcxproj", "{4F3F55AA-4FBD-448A-BB30-90F4A44C2907}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4F3F55AA-4FBD-448A-BB30-90F4A44C2907}.Debug|x64.ActiveCfg = Debug|x64 + {4F3F55AA-4FBD-448A-BB30-90F4A44C2907}.Debug|x64.Build.0 = Debug|x64 + {4F3F55AA-4FBD-448A-BB30-90F4A44C2907}.Debug|x86.ActiveCfg = Debug|Win32 + {4F3F55AA-4FBD-448A-BB30-90F4A44C2907}.Debug|x86.Build.0 = Debug|Win32 + {4F3F55AA-4FBD-448A-BB30-90F4A44C2907}.Release|x64.ActiveCfg = Release|x64 + {4F3F55AA-4FBD-448A-BB30-90F4A44C2907}.Release|x64.Build.0 = Release|x64 + {4F3F55AA-4FBD-448A-BB30-90F4A44C2907}.Release|x86.ActiveCfg = Release|Win32 + {4F3F55AA-4FBD-448A-BB30-90F4A44C2907}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/task1_2/task1_2.vcxproj b/task1_2/task1_2.vcxproj new file mode 100644 index 0000000..e99db76 --- /dev/null +++ b/task1_2/task1_2.vcxproj @@ -0,0 +1,154 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {4F3F55AA-4FBD-448A-BB30-90F4A44C2907} + Win32Proj + task1_2 + 8.1 + + + + Application + true + v140 + Unicode + + + Application + false + v140 + true + Unicode + + + Application + true + v140 + Unicode + + + Application + false + v140 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + + + Level3 + Disabled + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + + \ No newline at end of file diff --git a/task1_2/task1_2.vcxproj.filters b/task1_2/task1_2.vcxproj.filters new file mode 100644 index 0000000..a19bc0d --- /dev/null +++ b/task1_2/task1_2.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + \ No newline at end of file diff --git a/task3/Release/task3.exe b/task3/Release/task3.exe new file mode 100644 index 0000000..4da33b9 Binary files /dev/null and b/task3/Release/task3.exe differ diff --git a/task3/task3.cpp b/task3/task3.cpp new file mode 100644 index 0000000..5cb5705 --- /dev/null +++ b/task3/task3.cpp @@ -0,0 +1,135 @@ +#include +using namespace std; + +struct Student { + char Name[17]; + uint16_t Year_of_receipt; + float Average_score; + uint16_t Sex : 1; + uint16_t Finished_courses; + Student *Team_lead; +}; + +char digits[] = "0123456789ABCDEF"; +const uint8_t* +as_bytes(const void* data) { + return reinterpret_cast(data); +} + +char nibble_to_hex(uint8_t i) { + return digits[i & 0xf]; +} +void print_in_hex(uint8_t byte) { + cout << nibble_to_hex(byte >> 4) + << nibble_to_hex(byte & 0xf); +} +void print_in_hex(const void* data, size_t size) { + const uint8_t *bytes = as_bytes(data); + for (size_t i = 0; i < size; i++) { + print_in_hex(bytes[i]); + if ((i + 1) % 16 == 0) { + cout << '\n'; + } + else { + cout << ' '; + } + } +} +char bit_digit(uint8_t byte, uint8_t bit) { + if (byte &(0x1 << bit)) { + return '1'; + } + return '0'; +} + +void print_in_binary(uint8_t byte) { + for (int bit = 7; bit >= 0; bit--) { + cout << bit_digit(byte, bit); + } +} +void print_in_binary(const void* data, size_t size) { + const uint8_t *bytes = as_bytes(data); + for (size_t i = 0; i < size; i++) { + print_in_binary(bytes[i]); + if ((i + 1) % 4 == 0) { + cout << '\n'; + } + else { + cout << ' '; + } + } +} + +int main() { + Student students[3]; + uint16_t gender; + for (int i = 0; i < 3; i++) { + if (i != 0) { + cout << "Student " << i << ":\n"; + students[i].Team_lead = &students[0]; + } + else { + students[i].Team_lead = NULL; + cout << "Team lead:\n"; + } + cout << "Name: "; + cin >> students[i].Name; + cout << "Year of receiption: "; + cin >> students[i].Year_of_receipt; + cout << "Average score: "; + cin >> students[i].Average_score; + cout << "Gender (0-1): "; + cin >> gender; + students[i].Sex = gender; + cout << "Courses: "; + cin >> students[i].Finished_courses; + } + + cout << "Array address: " << (void*)students << "\n"; + cout << "Array size: " << sizeof(students) << "\n"; + for (int i = 0; i < 3; i++) { + cout << "Address of element " << i << ": " << (void*)&students[i] << "\n"; + cout << "Size of element: " << i << ": " << sizeof(Student) << "\n"; + } + cout << "students[1]:\n"; + cout << "Name: address = " << (void*)&students[1].Name + << " offset = " << offsetof(Student, Name) + << " size = " << sizeof(students[1].Name) << "\nhex:\n"; + print_in_hex(&students[1].Name, sizeof(students[1].Name)); + cout << "\nIn binary:\n"; + print_in_binary(&students[1].Name, sizeof(students[1].Name)); + + cout << "\n\nYear_of_receipt: address = " << (void*)&students[1].Year_of_receipt + << " offset = " << offsetof(Student, Year_of_receipt) + << " size = " << sizeof(students[1].Year_of_receipt) << "\nhex:\n"; + print_in_hex(&students[1].Year_of_receipt, sizeof(students[1].Year_of_receipt)); + cout << "\nIn binary:\n"; + print_in_binary(&students[1].Year_of_receipt, sizeof(students[1].Year_of_receipt)); + + cout << "\n\nAverage_score: address = " << (void*)&students[1].Average_score + << " offset = " << offsetof(Student, Average_score) + << " size = " << sizeof(students[1].Average_score) << "\nhex:\n"; + print_in_hex(&students[1].Average_score, sizeof(students[1].Average_score)); + cout << "\nIn binary:\n"; + print_in_binary(&students[1].Average_score, sizeof(students[1].Average_score)); + + cout << "\n\nFinished_courses: address = " << (void*)&students[1].Finished_courses + << " offset = " << offsetof(Student, Finished_courses) + << " size = " << sizeof(students[1].Finished_courses) << "\nhex:\n"; + print_in_hex(&students[1].Finished_courses, sizeof(students[1].Finished_courses)); + cout << "\nIn binary:\n"; + print_in_binary(&students[1].Finished_courses, sizeof(students[1].Finished_courses)); + + cout << "\n\nTeam_lead: address = " << (void*)&students[1].Team_lead + << " offset = " << offsetof(Student, Team_lead) + << " size = " << sizeof(students[1].Team_lead) << "\nhex:\n"; + print_in_hex(&students[1].Team_lead, sizeof(students[1].Team_lead)); + cout << "\nIn binary:\n"; + print_in_binary(&students[1].Team_lead, sizeof(students[1].Team_lead)); + cout << "\nFull array:\n"; + print_in_hex(students, sizeof(students)); + cout << "\nIn binary:\n"; + print_in_binary(students, sizeof(students)); + cin >> gender; + return 0; +} diff --git a/task3/task3.sln b/task3/task3.sln new file mode 100644 index 0000000..72fb52d --- /dev/null +++ b/task3/task3.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "task3", "task3.vcxproj", "{61673896-8D28-4E1E-8522-FCAD2883C239}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {61673896-8D28-4E1E-8522-FCAD2883C239}.Debug|x64.ActiveCfg = Debug|x64 + {61673896-8D28-4E1E-8522-FCAD2883C239}.Debug|x64.Build.0 = Debug|x64 + {61673896-8D28-4E1E-8522-FCAD2883C239}.Debug|x86.ActiveCfg = Debug|Win32 + {61673896-8D28-4E1E-8522-FCAD2883C239}.Debug|x86.Build.0 = Debug|Win32 + {61673896-8D28-4E1E-8522-FCAD2883C239}.Release|x64.ActiveCfg = Release|x64 + {61673896-8D28-4E1E-8522-FCAD2883C239}.Release|x64.Build.0 = Release|x64 + {61673896-8D28-4E1E-8522-FCAD2883C239}.Release|x86.ActiveCfg = Release|Win32 + {61673896-8D28-4E1E-8522-FCAD2883C239}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/task3/task3.vcxproj b/task3/task3.vcxproj new file mode 100644 index 0000000..02a8154 --- /dev/null +++ b/task3/task3.vcxproj @@ -0,0 +1,154 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {61673896-8D28-4E1E-8522-FCAD2883C239} + Win32Proj + task3 + 8.1 + + + + Application + true + v140 + Unicode + + + Application + false + v140 + true + Unicode + + + Application + true + v140 + Unicode + + + Application + false + v140 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + + + Level3 + Disabled + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + + \ No newline at end of file diff --git a/task3/task3.vcxproj.filters b/task3/task3.vcxproj.filters new file mode 100644 index 0000000..30d20e2 --- /dev/null +++ b/task3/task3.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + \ No newline at end of file diff --git a/task4/Release/task4.exe b/task4/Release/task4.exe new file mode 100644 index 0000000..49f92ee Binary files /dev/null and b/task4/Release/task4.exe differ diff --git a/task4/Release/test.txt b/task4/Release/test.txt new file mode 100644 index 0000000..7924794 --- /dev/null +++ b/task4/Release/test.txt @@ -0,0 +1,3 @@ +hello, world! +to be or not to be +toster \ No newline at end of file diff --git a/task4/task4.cpp b/task4/task4.cpp new file mode 100644 index 0000000..a750435 --- /dev/null +++ b/task4/task4.cpp @@ -0,0 +1,90 @@ +#define _CRT_SECURE_NO_WARNINGS +#include +#include + + +void getstring(char *s, size_t n) { + fgets(s, n, stdin); + if (s[strlen(s) - 1] == '\n') + s[strlen(s) - 1] = '\0'; +} + +void lower(char *s) +{ + for (; *s; s++) + *s = tolower(*s); +} +using namespace std; +const size_t MAX_SIZE = 256; +const char not_allowed[] = "*\"<>?|"; +const char separators[] = " \r\n,.!?:;()-"; +bool iscorrectname(char *name) { + char lext[8]; + for (int i = 0; name[i]; i++) { + if (strchr(not_allowed, name[i]) != 0) + return false; + } + char *colon = strchr(name, ':'); + if (colon != NULL) { + if (colon - name != 2) + return false; + if (colon[1] != '\\') + return false; + if (strrchr(name, ':') != colon) + return false; + } + char *fname = strrchr(name, '\\'); + fname = fname ? fname++ : name; + char *ext = strchr(fname, '.'); + if (ext == NULL) + strcat(name, ".txt"); + else { + strcpy(lext, ext); + lower(lext); + if (strcmp(lext, ".txt")) + return false; + } + return true; +} +int main() { + char filename[MAX_SIZE]; + char str[MAX_SIZE]; + cout << "Input file: "; + getstring(filename, MAX_SIZE); + if (iscorrectname(filename) == false) { + cout << "Entered not correct name\n"; + return -1; + } + FILE *fin = fopen(filename, "rb"); + if (fin == NULL) { + cout << "Can't open file\n"; + return -1; + } + fseek(fin, 0, SEEK_END); + size_t length = ftell(fin); + fseek(fin, 0, SEEK_SET); + char *text = new char[length + 1]; + memset(text, 0, length + 1); + fread(text, 1, length, fin); + cout << "Input string: "; + getstring(str, MAX_SIZE); + const char *start = text; + size_t count = 0; + while (true) { + const size_t separator_count = strspn(start, separators); + start += separator_count; + if (start[0] == '\0') { + break; + } + const size_t word_length = strcspn(start, separators); + if (word_length == strlen(str) && strncmp(str, start, word_length) == 0) { + count++; + } + start += word_length; + } + cout << "Result: " << count << "\n"; + fclose(fin); + delete text; + cin >> str; + return 0; +} \ No newline at end of file diff --git a/task4/task4.sln b/task4/task4.sln new file mode 100644 index 0000000..35dc4e4 --- /dev/null +++ b/task4/task4.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "task4", "task4.vcxproj", "{F1C3E237-5C45-4A39-8BB2-B09801F54B93}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F1C3E237-5C45-4A39-8BB2-B09801F54B93}.Debug|x64.ActiveCfg = Debug|x64 + {F1C3E237-5C45-4A39-8BB2-B09801F54B93}.Debug|x64.Build.0 = Debug|x64 + {F1C3E237-5C45-4A39-8BB2-B09801F54B93}.Debug|x86.ActiveCfg = Debug|Win32 + {F1C3E237-5C45-4A39-8BB2-B09801F54B93}.Debug|x86.Build.0 = Debug|Win32 + {F1C3E237-5C45-4A39-8BB2-B09801F54B93}.Release|x64.ActiveCfg = Release|x64 + {F1C3E237-5C45-4A39-8BB2-B09801F54B93}.Release|x64.Build.0 = Release|x64 + {F1C3E237-5C45-4A39-8BB2-B09801F54B93}.Release|x86.ActiveCfg = Release|Win32 + {F1C3E237-5C45-4A39-8BB2-B09801F54B93}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/task4/task4.vcxproj b/task4/task4.vcxproj new file mode 100644 index 0000000..557ab37 --- /dev/null +++ b/task4/task4.vcxproj @@ -0,0 +1,154 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {F1C3E237-5C45-4A39-8BB2-B09801F54B93} + Win32Proj + task4 + 8.1 + + + + Application + true + v140 + Unicode + + + Application + false + v140 + true + Unicode + + + Application + true + v140 + Unicode + + + Application + false + v140 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + + + Level3 + Disabled + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + + \ No newline at end of file diff --git a/task4/task4.vcxproj.filters b/task4/task4.vcxproj.filters new file mode 100644 index 0000000..629d3df --- /dev/null +++ b/task4/task4.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + \ No newline at end of file diff --git a/task4/test.txt b/task4/test.txt new file mode 100644 index 0000000..7924794 --- /dev/null +++ b/task4/test.txt @@ -0,0 +1,3 @@ +hello, world! +to be or not to be +toster \ No newline at end of file