From b3c74fc178c994de9c3ee7c1b146104f077896a3 Mon Sep 17 00:00:00 2001 From: VashchishinMV Date: Wed, 9 Apr 2025 16:51:42 +0000 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8=D0=BB(?= =?UTF-8?q?=D0=B0)=20=D0=BD=D0=B0=20'task=5F3'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- task_3 | 282 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 141 insertions(+), 141 deletions(-) diff --git a/task_3 b/task_3 index 26b5a46..2a9a858 100644 --- a/task_3 +++ b/task_3 @@ -1,154 +1,154 @@ -#inlude -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include using namespace std; struct Student { -char name[17]; // Массив из 17 байт -uint16_t year; // целое число без знака 2 байта -float average_score; // успеваемость, представлена числом с плавающей точкой -unsigned int gender : 1; // пол студента, 0 - мужской, 1 - женский -uint16_t courses; // количество пройденных курсов -Student* leader; // указатель на старосту - -// вывод данных в шестнадцатеричном формате -void print_hex(const void* data, size_t size) const { - const uint8_t* bytes = reinterpret_cast(data); - for (size_t i = 0; i < size; i++) { - cout << hex << uppercase << setw(2) << setfill('0') - << static_cast(bytes[i]) << " "; + char name[17]; // Массив из 17 байт + uint16_t year; // целое число без знака 2 байта + float average_score; // успеваемость, представлена числом с плавающей точкой + unsigned int gender : 1; // пол студента, 0 - мужской, 1 - женский + uint16_t courses; // количество пройденных курсов + Student* leader; // указатель на старосту + + // вывод данных в шестнадцатеричном формате + void print_hex(const void* data, size_t size) const { + const uint8_t* bytes = reinterpret_cast(data); + for (size_t i = 0; i < size; i++) { + cout << hex << uppercase << setw(2) << setfill('0') + << static_cast(bytes[i]) << " "; + } + cout << dec; // Возвращаем десятичный вывод } - cout << dec; // Возвращаем десятичный вывод -} - -// вывод данных в двоичном формате -void print_binary(const void* data, size_t size) const { - const uint8_t* bytes = reinterpret_cast(data); - for (size_t i = 0; i < size; i++) { - for (int j = 7; j >= 0; j--) { - cout << ((bytes[i] >> j) & 1); + + // вывод данных в двоичном формате + void print_binary(const void* data, size_t size) const { + const uint8_t* bytes = reinterpret_cast(data); + for (size_t i = 0; i < size; i++) { + for (int j = 7; j >= 0; j--) { + cout << ((bytes[i] >> j) & 1); + } + cout << " "; } - cout << " "; } -} }; int main() { -setlocale(LC_ALL, "Russian"); - -Student students[3]; - -// Вносим данные про студентов -strcpy(students[0].name, "Александр "); -students[0].year = 2019; -students[0].average_score = 4.2; -students[0].gender = 1; -students[0].courses = 6; -students[0].leader = nullptr; - -strcpy(students[1].name, "Алексей"); -students[1].year = 2022; -students[1].average_score = 3.5; -students[1].gender = 1; -students[1].courses = 3; -students[1].leader = &students[0]; - -strcpy(students[2].name, "Екатерина"); -students[2].year = 2021; -students[2].average_score = 4.1; -students[2].gender = 0; -students[2].courses = 4; -students[2].leader = &students[0]; - -// Выводим адрес массива и размер массива в байтах -cout << "Информация о массиве:" << endl; -cout << "Адрес массива: " << &students << endl; -cout << "Размер массива: " << sizeof(students) << " байт" << endl << endl; - -// Выводим номер, адрес и размер структуры студента -cout << "Информация об элементах массива:" << endl; -for (int i = 0; i < 3; i++) { - cout << "Студент " << i << ":" << endl; - cout << "Адрес: " << &students[i] << endl; - cout << "Размер: " << sizeof(Student) << " байт" << endl << endl; -} - -cout << "Данные о полях других студентов:" << endl; - -// Выводим смещение поля имени относительно начала структуры -cout << "Имя:" << endl; -cout << " Адрес: " << static_cast(students[1].name) << endl; -cout << " Смещение: " << offsetof(Student, name) << endl; -cout << " Размер: " << sizeof(students[1].name) << " байт" << endl; -cout << " Шестнацатеричный формат: "; -students[1].print_hex(students[1].name, sizeof(students[1].name)); -cout << endl << " Двоичный формат: "; -students[1].print_binary(students[1].name, sizeof(students[1].name)); -cout << endl << endl; - -// Выводим адрес, смещение, размер поля года -cout << "Год:" << endl; -cout << " Адрес: " << &students[1].year << endl; -cout << " Смещение: " << offsetof(Student, year) << endl; -cout << " Размер: " << sizeof(students[1].year) << " байт" << endl; -cout << " Шестнацатеричный формат: "; -students[1].print_hex(&students[1].year, sizeof(students[1].year)); -cout << endl << " Двоичный формат: "; -students[1].print_binary(&students[1].year, sizeof(students[1].year)); -cout << endl << endl; - -// Выводим смещение и размер поля успеваемости -cout << "Успеваемость:" << endl; -cout << " Адрес: " << &students[1].average_score << endl; -cout << " Смещение: " << offsetof(Student, average_score) << endl; -cout << " Размер: " << sizeof(students[1].average_score) << " байт" << endl; -cout << " Шестнацатеричный формат: "; -students[1].print_hex(&students[1].average_score, sizeof(students[1].average_score)); -cout << endl << " Двоичный формат: "; -students[1].print_binary(&students[1].average_score, sizeof(students[1].average_score)); -cout << endl << endl; - -// Выводим адрес, смещение, размер указателя на старосту -cout << "Староста:" << endl; -cout << " Адрес: " << &students[1].leader << endl; -cout << " Смещение: " << offsetof(Student, leader) << endl; -cout << " Размер: " << sizeof(students[1].leader) << " байт" << endl; -cout << " Шестнацатеричный формат: "; -students[1].print_hex(&students[1].leader, sizeof(students[1].leader)); -cout << endl << " Двоичный формат: "; -students[1].print_binary(&students[1].leader, sizeof(students[1].leader)); -cout << endl << endl; - -// все элементы массива в шестнадцатеричном виде с указанием соответствия блоков байт полям структур -cout << "Шестнадцатеричное представление структур:" << endl; -for (int i = 0; i < 3; i++) { - cout << "Студент " << i << (students[i].leader == nullptr ? " (не староста)" : " (староста, лидер - ") - << (students[i].leader == nullptr ? "нет лидера" : students[i].leader->name) << ")" << endl; - cout << " Все поля: "; - students[i].print_hex(&students[i], sizeof(Student)); - cout << endl; - cout << " Имя: "; - students[i].print_hex(students[i].name, sizeof(students[i].name)); - cout << endl; - cout << " Год: "; - students[i].print_hex(&students[i].year, sizeof(students[i].year)); - cout << endl; - cout << " Успеваемость: "; - students[i].print_hex(&students[i].average_score, sizeof(students[i].average_score)); - cout << endl; - - uint8_t bit_fields = (students[i].gender << 7) | students[i].courses; - cout << " Пол и количество курсов (как байт: старший бит - пол, младшие биты - количество курсов): "; - students[i].print_hex(&bit_fields, sizeof(bit_fields)); - - cout << " Староста: "; - students[i].print_hex(&students[i].leader, sizeof(students[i].leader)); + setlocale(LC_ALL, "Russian"); + + Student students[3]; + + // Вносим данные про студентов + strcpy(students[0].name, "Александр "); + students[0].year = 2019; + students[0].average_score = 4.2; + students[0].gender = 1; + students[0].courses = 6; + students[0].leader = nullptr; + + strcpy(students[1].name, "Алексей"); + students[1].year = 2022; + students[1].average_score = 3.5; + students[1].gender = 1; + students[1].courses = 3; + students[1].leader = &students[0]; + + strcpy(students[2].name, "Екатерина"); + students[2].year = 2021; + students[2].average_score = 4.1; + students[2].gender = 0; + students[2].courses = 4; + students[2].leader = &students[0]; + + // Выводим адрес массива и размер массива в байтах + cout << "Информация о массиве:" << endl; + cout << "Адрес массива: " << &students << endl; + cout << "Размер массива: " << sizeof(students) << " байт" << endl << endl; + + // Выводим номер, адрес и размер структуры студента + cout << "Информация об элементах массива:" << endl; + for (int i = 0; i < 3; i++) { + cout << "Студент " << i << ":" << endl; + cout << "Адрес: " << &students[i] << endl; + cout << "Размер: " << sizeof(Student) << " байт" << endl << endl; + } + + cout << "Данные о полях других студентов:" << endl; + + // Выводим смещение поля имени относительно начала структуры + cout << "Имя:" << endl; + cout << " Адрес: " << static_cast(students[1].name) << endl; + cout << " Смещение: " << offsetof(Student, name) << endl; + cout << " Размер: " << sizeof(students[1].name) << " байт" << endl; + cout << " Шестнацатеричный формат: "; + students[1].print_hex(students[1].name, sizeof(students[1].name)); + cout << endl << " Двоичный формат: "; + students[1].print_binary(students[1].name, sizeof(students[1].name)); + cout << endl << endl; + + // Выводим адрес, смещение, размер поля года + cout << "Год:" << endl; + cout << " Адрес: " << &students[1].year << endl; + cout << " Смещение: " << offsetof(Student, year) << endl; + cout << " Размер: " << sizeof(students[1].year) << " байт" << endl; + cout << " Шестнацатеричный формат: "; + students[1].print_hex(&students[1].year, sizeof(students[1].year)); + cout << endl << " Двоичный формат: "; + students[1].print_binary(&students[1].year, sizeof(students[1].year)); cout << endl << endl; -} -return 0; + // Выводим смещение и размер поля успеваемости + cout << "Успеваемость:" << endl; + cout << " Адрес: " << &students[1].average_score << endl; + cout << " Смещение: " << offsetof(Student, average_score) << endl; + cout << " Размер: " << sizeof(students[1].average_score) << " байт" << endl; + cout << " Шестнацатеричный формат: "; + students[1].print_hex(&students[1].average_score, sizeof(students[1].average_score)); + cout << endl << " Двоичный формат: "; + students[1].print_binary(&students[1].average_score, sizeof(students[1].average_score)); + cout << endl << endl; + + // Выводим адрес, смещение, размер указателя на старосту + cout << "Староста:" << endl; + cout << " Адрес: " << &students[1].leader << endl; + cout << " Смещение: " << offsetof(Student, leader) << endl; + cout << " Размер: " << sizeof(students[1].leader) << " байт" << endl; + cout << " Шестнацатеричный формат: "; + students[1].print_hex(&students[1].leader, sizeof(students[1].leader)); + cout << endl << " Двоичный формат: "; + students[1].print_binary(&students[1].leader, sizeof(students[1].leader)); + cout << endl << endl; + + // все элементы массива в шестнадцатеричном виде с указанием соответствия блоков байт полям структур + cout << "Шестнадцатеричное представление структур:" << endl; + for (int i = 0; i < 3; i++) { + cout << "Студент " << i << (students[i].leader == nullptr ? " (не староста)" : " (староста, лидер - ") + << (students[i].leader == nullptr ? "нет лидера" : students[i].leader->name) << ")" << endl; + cout << " Все поля: "; + students[i].print_hex(&students[i], sizeof(Student)); + cout << endl; + cout << " Имя: "; + students[i].print_hex(students[i].name, sizeof(students[i].name)); + cout << endl; + cout << " Год: "; + students[i].print_hex(&students[i].year, sizeof(students[i].year)); + cout << endl; + cout << " Успеваемость: "; + students[i].print_hex(&students[i].average_score, sizeof(students[i].average_score)); + cout << endl; + + uint8_t bit_fields = (students[i].gender << 7) | students[i].courses; + cout << " Пол и количество курсов (как байт: старший бит - пол, младшие биты - количество курсов): "; + students[i].print_hex(&bit_fields, sizeof(bit_fields)); + + cout << " Староста: "; + students[i].print_hex(&students[i].leader, sizeof(students[i].leader)); + cout << endl << endl; + } + + return 0; } \ No newline at end of file