diff --git a/lab04_3.cpp b/lab04_3.cpp new file mode 100644 index 0000000..b302ade --- /dev/null +++ b/lab04_3.cpp @@ -0,0 +1,88 @@ +#include +#include +#include + +// Шаг 1: Определение структуры Student +struct Student { + char name[17]; + unsigned short year; + float average_score; + unsigned int gender : 1; + unsigned int courses_completed; + struct Student* group_leader; +}; + +// Функция для вывода информации о студенте +void print_student_info(struct Student* student, int index) { + printf("Name: %s\n", student->name); + printf("Year of reception: %d\n", student->year); + printf("Average score: %.1f\n", student->average_score); + printf("Gender (0-1): %d\n", student->gender); + printf("Courses: %d\n", student->courses_completed); + printf("Group leader: %p\n", student->group_leader); + printf("\n"); +} + +// Функция для вывода адресов и размеров полей +void print_addresses_and_sizes(struct Student* student, int index) { + printf("Address of element %d: %p\n", index, (void*)student); + printf("Size of element: %lu\n", sizeof(*student)); + printf("Address of element %d:\n", index); + printf(" name: %p\n", (void*)student->name); + printf(" year: %p\n", (void*)&student->year); + printf(" average_score: %p\n", (void*)&student->average_score); + printf(" courses_completed: %p\n", (void*)&student->courses_completed); + printf(" group_leader: %p\n", (void*)&student->group_leader); + printf("\n"); +} + +// Функция для вывода шестнадцатеричного представления данных +void print_hex_representation(struct Student* student) { + unsigned char* ptr = (unsigned char*)student; + printf("Array size: %lu\n", sizeof(struct Student)); + for (size_t j = 0; j < sizeof(struct Student); j++) { + printf("%02X ", ptr[j]); + if ((j + 1) % 16 == 0) printf("\n"); + } + printf("\n"); +} + +// Функция для вывода двоичного представления данных +void print_binary_representation(struct Student* student) { + unsigned char* ptr = (unsigned char*)student; + for (size_t j = 0; j < sizeof(struct Student); j++) { + for (int i = 7; i >= 0; i--) { + printf("%d", (ptr[j] >> i) & 1); + } + printf(" "); + } + printf("\n"); +} + +int main() { + setlocale(LC_ALL, "Russian"); + + // Шаг 3: Объявление и заполнение массива структур Student + struct Student students[3] = { + {"Alex", 2020, 4.5, 0, 2, NULL}, + {"Julia", 2021, 3.8, 1, 1, NULL}, + {"Sofia", 2022, 4.2, 1, 3, NULL} + }; + + // Установим старосту для Alex и Julia + students[0].group_leader = &students[2]; + students[1].group_leader = &students[2]; + + // Шаг 4: Вывод информации + printf("Array size: %lu\n", sizeof(students)); + printf("Address of array: %p\n", (void*)students); + + for (int i = 0; i < 3; i++) { + print_student_info(&students[i], i); + print_addresses_and_sizes(&students[i], i); + print_hex_representation(&students[i]); + print_binary_representation(&students[i]); + } + + return 0; +}