Лабораторна робота №2 Програмування, ч3

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2017
Тип роботи:
Лабораторна робота
Предмет:
Програмування алгоритмів цифрової обробки сигналів та зображень

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра ЕОМ / Звіт про виконання лабораторної роботи №2 з дисципліни: “Програмування, частина 3 (Структури даних та алгоритми)” на тему:“ Внутрішнє представлення в пам’яті комп’ютера статичних даних похідних типів ” Львів 2017 Мета: дослідження внутрішнього представлення в пам’яті комп’ютера похідних типів даних статичної структури. Постановка задачі Дослідити внутрішнє представлення примітивних, складних та похідних типів даних статичної структури на прикладі змінних таких типів даних, які задані у завданні за варіантом. ( {день народження студента} * {місяць народження студента} ) % 6 = ( 25* 12 ) % 6 = 0; В звіті для кожної змінної похідного типу окремо показати представлення в пам'яті комп’ютера кожного її елемента, а після об’єднання всіх цих представлень у складену структуру даних, підписати і пояснити вміст кожного байта цієї структури. Змінні які потрібно проаналізувати: short m3[][2][4] = {{{1,2,3,4},{5}},{{6,7}},{{},{8,9}}}; m3[2][1][0] = 0 m3[0][0][1] = 9 m3[1][1][2] = 5 m3[0][1][2] = 8 m3[2][1][3] = 4 m3[2][0][0] = 6 m3[1][1][1] = 9 m3[1][0][1] = 5 m3[2][0][1] = 8 m3[2][1][2] = 9 Об’єднання: union { int up1; short up2; double up3; char up4[3][2]; bool up5; color up6; vkaz up7; float up8; str up9; }un2; un2.up3 = 30000; un2.up6 = BROWN; 3) Структура struct info { char p1[11]; double p2; short p3; unsigned p4 : 5 + 5; vkaz p5; unsigned : 2 + 3; } st1 = { "Lviv", 5, 505, 17, &b }; Система тестів 1) Аналіз представлення в пам’яті змінної: m3 short m3[][2][4] = {{{1,2,3,4},{5}},{{6,7}},{{},{8,9}}}; m3[2][1][0] = 0 m3[0][0][1] = 9 m3[1][1][2] = 5 m3[0][1][2] = 8 m3[2][1][3] = 4 m3[2][0][0] = 6 m3[1][1][1] = 9 m3[1][0][1] = 5 m3[2][0][1] = 8 m3[2][1][2] = 9 Даний тип даних – трьох вимірний масив типу short. Тип short у пам’яті комп’ютера займає 2 байти. Ті комірки пам’яті, значення яких не задані у рядку ініціалізації масиву - по замовчуванню рівні 0. В пам'яті комп'ютера елементи масиву з першого до останнього запам'ятовуються в послідовних зростаючих комірках пам'яті. Між елементами масиву в пам'яті розриви відсутні. Елементи масиву з найменшим індексом зберігаються по найменшій адресі пам’яті. Багатовимірні масиви зберігаються так, що найбільш правий індекс збільшується першим. Розмір змінної m3 48 байт Внутрішнє представлення змінної m3 в пам'яті комп’ютера: 0100 0900 0300 0400 0500 0000 0800 0000 0600 0500 0000 0000 0000 0900 0500 0000 0600 0800 0000 0000 0000 0900 0900 0400. 2) Аналіз представлення в пам’яті змінної: un2 • Розглянемо структуру даних – «об’єднання» : union { int up1; //Чотирибайтовий знаковий цілий тип short up2; //Двобайтовий знаковий цілий тип double up3; //Восьми байтовий дійсний тип даних char up4[3][2]; //Двовимірний масив типу char - розмір 12 байт bool up5; //Логічний тип даних (булівський) 1 байт color up6; //Перелічуваний тип даних розмір змінної 4 байти vkaz up7; //Вказівник на булівський тип даних float up8; //Змінна дійсного типу одинарної точності 4 байти str up9; //Структура }un1, un2, un3, un4; Об'єднання дуже схожі на структури. Однак на відміну від структури об'єднання зберігає значення тільки одного елемента в кожний момент часу. Інакше кажучи, коли виконується операція присвоювання значення елементу об'єднання, то перезаписується будь-яке попереднє присвоювання. Головною особливістю об'єднання є те, що для кожного з оголошених елементів виділяється та сама область пам'яті, тобто вони перекриваються. Пам'ять, що відповідає змінній типу об'єднання, визначається величиною, необхідною для розміщення найбільш довгого елемента об'єднання. Коли використовується елемент меншої довжини, то змінна типу об'єднання може містити зайву пам'ять, що не використовується. Всі елементи об'єднання зберігаються в одній і тій cамій області пам'яті, починаючи з однієї адреси. Найбільший елемент об’єднання по відношенню до об’єму пам’яті, який він займає – це змінна типу структура - str up9, як вже було показано вище її розмір 12 байт. Розмір об’єднання визначається як найменше спільне кратне всіх розмірів елементів об’єднання. Висновок розмір об’єднання буде рівний шістнадцяти байтам. Об’єднання у пам’яті комп’ютера до ініціалізації буде виглядати так: № байту 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15  Вмістиме 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  Пояснення Зазвичай, по замовчуванню байти ініціалізуються нулями   Структура змінної об’єднання після виконання присвоєння un2.up3 = 25*12*100=3000010. Так як основним завданням лабораторної роботи є дослідження похідних типів, а не примітивних - просто визначимо значення кожного байту змінної double up3 без глибоких пояснень. 30000 = 1110101001100002 = 1,11010100110000* 101110. e = 3FF16 + E16 = 40D16 s = 0. 1біт 11 біт 52 біта  s e m  0 100 0000 1101 1101 0100 1100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000   Внутрішнє представлення змінної up2.up3 в пам'яті комп’ютера: № байту 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15  Вмістиме 00 00 00 00 00 4C DD 40 00 00 00 00 00 00 00 00  Пояснення un2.up3 неініціалізована частина   Структура змінної об’єднання після виконання присвоєння un2.up6 = BROWN = 17 = 1116 Внутрішнє представлення змінної up2.up6 в пам'яті комп’ютера: № байту 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15  Вмістиме 11 00 00 00 00 4C DD 40 00 00 00 00 00 00 00 00  Пояснення un2.up6 неініціалізована частина   3)Аналіз представлення в пам’яті змінної: st1 struct info { char p1[11]; double p2; short p3; unsigned p4 : 5 + 5; vkaz p5; unsigned : 2 + 3; } st1 = { "Lviv", 5, 505, 17, &b }; Вона включає структуру даних info. Розглянемо структуру даних info – «структуру» : Для повного аналізу цієї структури потрібно проаналізувати кожну змінну цієї структури, щоб могти пояснити призначення кожного її байту і сказати, що він буде вміщувати. char p1[11]; Це масив типу char і його вмістим буде ASCII рядок, із термінальним нулем. Внутрішнє представлення змінної st1.p1 в пам'яті комп’ютера: № байту 0 1 2 3 4 5 6 7 8 9 10  Вмістиме 4C 76 69 76 00 00 00 00 00 00 00  Пояснення ‘L’ ‘v’ ‘i’ ‘v’ ‘\0’ неініцілізована частина   double p2 = 5; Так як основним завданням лабораторної роботи є дослідження похідних типів, а не примітивних - просто визначимо значення кожного байту змінної double p2 без глибоких пояснень. 5 = 101 = 1,01* 1010. e = 3FF16 + 216 = 40116. s = 0. 1біт 11 біт 52 біта  s e m  0 100 0000 0001 0100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000   Внутрішнє представлення змінної st1.p2 в пам'яті комп’ютера № байту 0 1 2 3 4 5 6 7  Вмістиме 00 00 00 00 00 00 14 40   short p3 = 505; Це цілий двобайтовий знаковий тип даних, який зберігається у доповняльному коді. Внутрішнє представлення змінної short st1.p3 в основній пам'яті: F9 01. unsigned p4 : 5+5 Це бітове поле розмірністю 10 біт, яке буде вирівняне по границі 4 байт тому, що наступний елемент – вказівник розміром 4 байти. Значення, яке зберігається в бітовому полі 1116. № байту 0 1 2 3  Вмістиме 11 00 00 00  Пояснення Бітове поле із вирівнюванням   vkaz p5; Це вказівник на тип bool. Ця змінна буде містити адресу, розміщення змінної типу bool b. Розмір адреси 4 байти. Вмістиме змінної залежить від реалізації – розміщення змінної b в пам’яті. unsigned : 2+3; Це безіменне бітове поле, яке використовується для вирівнювання. В даному випадку воно буде використане для вирівнювання після змнної p5 + 5 байт і буде вирівняне до границі слова. Внутрішнє представлення змінної st1 в пам’яті комп’ютера буде таким: байт№ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15  Вмістиме 4C 76 69 76 00 00 00 00 00 00 00 00 00 00 00 00  Пояснення char p1[11] dw   байт№ 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31  Вмістиме 00 00 00 00 00 00 14 40 F9 01 00 00 11 00 00 00  Пояснення double p2 short p3 w unsigned p4:10+ w   байт№ 32 33 34 35 36 37 38 39  Вмістиме xx xx xx xx 00 00 00 00  Пояснення vkaz p5 unsigned :5 + dw   dw – вирівнювання до границі подвійного слова w – вирівнювання до границі слова хх – невідоме значення Спеціфікація програми #include <stdio.h> #include <conio.h> typedef bool *vkaz; bool b = true; enum color { BLUE = 2, GREEN = BLUE + 12, CYAN, RED, BROWN, GRAY = RED - 25, YELLOW, WHІTE = 0, MAGENTA, LІGHTGRAY, DARKGRAY = -2, BLACK }; struct info { char p1[11]; double p2; short p3; unsigned p4 : 5 + 5; vkaz p5; unsigned : 2 + 3; } st1 = { "Lviv", 5, 505, 17, &b }; struct str { unsigned s1 : 2 + 1; // замість k1 підставити першу цифру дня народження unsigned : 0; unsigned s2 : 5 + 2; // замість k2 підставити другу цифру дня народження unsigned : 1 + 3; // замість k3 підставити першу цифру місяця народження unsigned s4 : 2 + 4; // замість k4 підставити другу цифру місяця народження int s5; } sr1 = { 1, 3, 10, 62047 }, sr2 = { 0, 2, 14, 59254 }; union { int up1; short up2; double up3; char up4[3][2]; bool up5; color up6; vkaz up7; float up8; str up9; }un2; template<typename T> void showInMemory(T data) { unsigned char *vx = (unsigned char *)(&data); for (int i =0; i<sizeof data; i++) printf("%02X ", vx[i]); printf("\n"); } void main() { vkaz vk = &b; un2.up3 = 30000; un2.up6 = BROWN; char *cp; short m3[][2][4] = { { { 1,2,3,4 },{ 5 } },{ { 6,7 } },{ {},{ 8,9 } } }; m3[2][1][0] = 0, m3[0][0][1] = 9, m3[1][1][2] = 5, m3[0][1][2] = 8, m3[2][1][3] = 4, m3[2][0][0] = 6, m3[1][1][1] = 9, m3[1][0][1] = 5, m3[2][0][1] = 8, m3[2][1][2] = 9; cp = (char*)&m3; printf("\nm3 VPK: "); for (int i = 0; i<sizeof(m3); i++) { printf("%X", *cp / 16); printf("%X", *cp % 16); printf(" "); cp++; } printf("\n"); printf("\n"); printf("un2 VPK: "); showInMemory(un2); printf("\nst1 VPK: "); showInMemory(st1); } Результати виконання програми / Висновок: на даній лабораторній роботі я виконав дослідження внутрішнього представлення в пам’яті комп’ютера похідних типів даних статичної структури.
Антиботан аватар за замовчуванням

28.05.2019 17:05-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!