#include #include #include // Для использования strlen и strcpy using namespace std; // Структура Student, описывающая студента struct Student { char Name[17]; // Имя студента (максимум 16 символов + завершающий нулевой символ) uint16_t Year_of_receipt; // Год поступления float Average_score; // Средний балл uint16_t Sex : 1; // Пол (0 — женский, 1 — мужской) uint16_t Finished_courses; // Количество пройденных курсов Student* Team_lead; // Указатель на старосту группы }; // Вспомогательные массивы и функции для работы с шестнадцатеричным и двоичным представлением char digits[] = "0123456789ABCDEF"; // Функция преобразования данных в массив байтов const uint8_t* as_bytes(const void* data) { return reinterpret_cast(data); } // Функция преобразования nibble в шестнадцатеричный символ 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) { return (byte & (0x1 << bit)) ? '1' : '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() { setlocale(LC_ALL, "rus"); Student students[3]; // Массив студентов uint16_t gender; // Ввод данных для каждого студента for (int i = 0; i < 3; ++i) { if (i != 0) { cout << "Ученик " << i << "\n"; students[i].Team_lead = &students[0]; } else { students[i].Team_lead = nullptr; cout << "Староста\n"; } cout << "Имя: "; cin >> students[i].Name; cout << "Год поступления: "; cin >> students[i].Year_of_receipt; cout << "Средний балл: "; cin >> students[i].Average_score; cout << "Пол (0-1): "; cin >> gender; students[i].Sex = gender; cout << "Количество пройденных курсов: "; cin >> students[i].Finished_courses; } // Вывод информации о массиве cout << "Адрес массива: " << (void*)students << "\n"; cout << "Размер массива: " << sizeof(students) << " bytes\n"; // Вывод информации о каждом элементе массива for (int i = 0; i < 3; ++i) { cout << "Адрес элемента: " << i << ": " << (void*)&students[i] << "\n"; cout << "Размер элемента: " << i << ": " << sizeof(Student) << " bytes\n"; } // Вывод информации о полях второго студента cout << "Ученик 2\n"; cout << "Имя (адрес): " << (void*)&students[1].Name << " Смещение: " << offsetof(Student, Name) << " Размер: " << sizeof(students[1].Name) << "\nШестнадцатиричный код:\n"; print_in_hex(&students[1].Name, sizeof(students[1].Name)); cout << "\nВ двоичном представлении:\n"; print_in_binary(&students[1].Name, sizeof(students[1].Name)); cout << "\n\nГод поступления (адрес): " << (void*)&students[1].Year_of_receipt << " Смещение: " << offsetof(Student, Year_of_receipt) << " Размер: " << sizeof(students[1].Year_of_receipt) << "\nШестнадцатиричный код:\n"; print_in_hex(&students[1].Year_of_receipt, sizeof(students[1].Year_of_receipt)); cout << "\nВ двоичном представлении:\n"; print_in_binary(&students[1].Year_of_receipt, sizeof(students[1].Year_of_receipt)); cout << "\n\nСредний балл (адрес): " << (void*)&students[1].Average_score << " Смещение: " << offsetof(Student, Average_score) << " Размер: " << sizeof(students[1].Average_score) << "\nШестнадцатиричный код:\n"; print_in_hex(&students[1].Average_score, sizeof(students[1].Average_score)); cout << "\nВ двоичном представлении:\n"; print_in_binary(&students[1].Average_score, sizeof(students[1].Average_score)); cout << "\n\nКоличество пройденных курсов (адрес): " << (void*)&students[1].Finished_courses << " Смещение: " << offsetof(Student, Finished_courses) << " Размер = " << sizeof(students[1].Finished_courses) << "\nШестнадцатиричный код:\n"; print_in_hex(&students[1].Finished_courses, sizeof(students[1].Finished_courses)); cout << "\nВ двоичном представлении:\n"; print_in_binary(&students[1].Finished_courses, sizeof(students[1].Finished_courses)); cout << "\n\nСтароста (адрес): " << (void*)&students[1].Team_lead << " Смещение: " << offsetof(Student, Team_lead) << " Размер: " << sizeof(students[1].Team_lead) << "\nШестнадцатиричный код:\n"; print_in_hex(&students[1].Team_lead, sizeof(students[1].Team_lead)); cout << "\nВ двоичном представлении:\n"; print_in_binary(&students[1].Team_lead, sizeof(students[1].Team_lead)); // Вывод всего массива студентов cout << "\nВесь массив:\n"; print_in_hex(students, sizeof(students)); cout << "\nВ двоичном представлении:\n"; print_in_binary(students, sizeof(students)); cin >> gender; // Задержка завершения программы return 0; }