Родитель
faa4758bbe
Сommit
fdbf740908
@ -0,0 +1,158 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <cstdint>
|
||||||
|
#include <cstring> // Для использования 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<const uint8_t*>(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;
|
||||||
|
}
|
Загрузка…
Ссылка в новой задаче