DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Подання в пам'яті комп'ютера статичних даних базових типів

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

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерних наук та інформаційних технологій
Факультет:
Комп’ютерні науки
Кафедра:
Кафедра електронних обчислювальних машин

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

Рік:
2026
Тип роботи:
Лабораторна робота
Предмет:
Програмування Частина III Структури даних та алгоритми
Група:
КН
Коротко про документ

Про що ця робота

Звіт з лабораторної роботи присвячено дослідженню внутрішнього подання в пам'яті комп'ютера похідних типів даних статичної структури. У роботі наведено практичну реалізацію та аналіз розміщення масивів, структур і об'єднань мовою C++.

У роботі розглядаються

  • Програмування
  • Структури даних
  • Алгоритми
  • Пам'ять комп'ютера
  • Мова C++
  • Масиви
  • Об'єднання

Зміст і розділи

  1. Мета роботи
  2. Теоретичні відомості
  3. Вибір індивідуального завдання
  4. Внутрішнє представлення змінних
  5. Код програми
  6. Скріншот виконання
  7. Висновок
Для кого:Студенти технічних спеціальностей та виші, що вивчають програмування, структури даних та алгоритми.
Викладачі:Кафедра електронних обчислювальних машин

Ключові поняття

структураоб'єднаннямасивпам'ять комп'ютеравирівнюваннябітові полятип данихC++вказівникбазові типи

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

Міністерство освіти І науки України національний університет “Львівська політехніка” Кафедра ЕОМ "Подання в пам’яті комп’ютера статичних даних базових типів" Звіт до лабораторної роботи № 2 з "Програмування. Частина III. Структури даних та алгоритми" МЕТА РОБОТИ Дослідження внутрішнього подання в пам’яті комп’ютера похідних типів даних статичної структури. Теоретичні відомості Структури: На відміну від масиву, всі елементи якого однотипні, структура може містити елементи різних типів. В мові C++ структура є видом класу і має всі його властивості, але в багатьох випадках достатньо використовувати структури так, як вони визначені в мові С: struct [ім'я_типу] { тип_1 елемент _1: тип_2 елемент _2; тип_n елемент _n; } [ список_оголошень ]; Елементи структури називаються полями структури і можуть мати будь-які типи, крім типу цієї ж структури, але можуть бути вказівниками на неї. Якщо відсутнє ім'я типу, то повинен бути заданий список оголошень перемінних, вказівників або масивів. В цьому випадку опис структури служить визначенням елементів цього списку. В пам'яті комп’ютера під кожний елемент структури виділяється визначений відповідно до типу цього елемента об’єм пам’яті. Елементи в пам'яті зберігаються в тому ж порядку, в якому вони були представлені в описі структури. Розмір змінної структурного типу не можна обчислити просто як суму його елементів, тому що змінні певних типів мають вирівнюватись в пам'яті комп’ютера по деяким залежним від реалізації границям, наприклад, повинні бути вирівняні по границі слова. Це може призводити до "дірок" в структурі. Значення в таких "дірках" невизначені. Навіть якщо значення двох змінних одного й того ж структурного типу дійсно рівні між собою, то не обов’язково, що при порівнянні вони виявляться рівними один одному, оскільки малоймовірно, що невизначені "дірки" містять однакові значення. Отже, порівняння структур є синтаксичною помилкою через різні вимоги по вирівнюванню в різних системах. Бітові поля - це особливий вид полів структури. Вони використовуються для щільного упакування даних, наприклад, прапорців типу "так/ні". Найменша по довжині комірка пам'яті, яку можна адресувати - 1 байт, а для збереження прапорця досить одного біта. При описі бітового поля після імені через двокрапку вказується довжина поля в бітах, що задається цілим виразом або константою. Поле нульової довжини означає вирівнювання на границю наступного слова. ВИБІР ІНДИВІДУАЛЬНОГО ЗАВДАННЯ (день народження студента) * (місяць народження студента) % 6 = = 6 *2 % 6 = 0 Завдання до 0 варіанту: Дослідити внутрішнє подання в пам’яті комп’ютера статичних даних базових та похідних типів : un2 , st1 , m3 Внутрішнє представлення змінних m3 Масив m3[][2][4] зберігає елементи типу short в пам’яті комп’ютера займає 2 байти, тому тривимірний масив буде займати 24*2=48 байт. Незаповнені елементу масиву будуть відображатися як нулі, а від’ємні у доповняльному коді. Тип short в пам’яті комп’ютера займає 2 байти, тому тривимірний масив буде займати 24*2=48 байт. 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] = 9; m3[0][1][2] = 4; m3[2][1][3] = 7; m3[2][0][0] = 7; m3[1][1][1] = 2; m3[1][0][1] = 6; m3[2][0][1] = 3; m3[2][1][2] = 9; 00000001 00000000 00001001 0000000 00000011 00000000 00000100 00000000 01 0016 09 0016 03 0016 04 0016 m3[0][0][0] m3[0][0][1] m3[0][0][2] m3[0][0][3] 00000101 00000000 00000000 00000000 00000100 00000000 00000000 00000000 05 0016 00 0016 04 0016 00 0016 m3[0][1][0] m3[0][1][1] m3[0][1][2] m3[0][1][3] 00000110 00000000 00000110 00000000 00000000 00000000 00000000 00000000 06 0016 06 0016 00 0016 00 0016 m3[1][0][0] m3[1][0][1] m3[1][0][2] m3[1][0][3] 00000000 00000000 00000010 00000000 00001001 0000000 00000000 00000000 00 0016 02 0016 09 0016 00 0016 m3[1][1][0] m3[1][1][1] m3[1][1][2] m3[1][1][3] 00000111 00000000 00000011 00000000 00000000 00000000 00000000 00000000 07 0016 03 0016 00 0016 00 0016 m3[2][0][0] m3[2][0][1] m3[2][0][2] m3[2][0][3] 00000000 00000000 00001001 00000000 00001001 00000000 00000111 00000000 00 0016 09 0016 09 0016 07 0016 m3[2][1][0] m3[2][1][1] m3[2][1][2] m3[2][1][3] Загальний вигляд значень масиву m3[][2][4] буде: : 1 9 3 4 5 0 4 0 6 6 0 0 0 2 9 0 7 3 0 0 0 9 9 7 Тоді, у пам’яті комп’ютера: 01 00 09 00 03 00 04 00 05 00 00 00 04 00 00 00 06 00 06 00 00 00 00 00 00 00 02 00 09 00 00 00 07 00 03 00 00 00 00 00 00 00 09 00 09 00 07 00 Un2 un2; un2.up3 = 6*2*100; un2.up6 = BROWN; Тип union займає стільки біт, скільки необхідною для розміщення найбільш довгого елемента об'єднання, для un2 це буде up3(double). Після чого un2.up3(double), який займає 10( на даному комп’ютері 8) байт приймає значення 1200, і дорівнює 120010 = 4B016 Знак- 1 біт Порядок- 11біт Мантиса – 53 біта 120010 = 10010110000 = 1. 0010110000*101010 Порядок=1023+10=10332=100000010012 Проводимо зборку за “sem” (40 92 с0 00 00 00 00 00)-> пам’яті комп’ютера(00 00 00 00 00 c0 92 40). Після цього un2 буде мати наступну структуру: 00 00 00 00 00 c0 92 40 Далі un2.up6(color), який займає 4 байти приймає значення 9 (BLUE = 2, - 2 GREEN = BLUE + 4,- 2+4=6 CYAN, - 6+1=7 RED, - 7+1=8 BROWN,) – 8+1=9 , і дорівнює 910 = 916 (00 00 00 09). Після цього un2 буде мати наступну структуру: 09 00 00 00 00 c0 92 40 (00 00 00 09 -> 09 00 00 00) Розмір un2 в пам’яті повинен бути еквівалентним розміру типу даних максимального з тих, що входять до un2 . Найбільший тип даних в un2 є double, що займає 8 байт. Проводимо вирівнювання по довжині слова cc cc cc cc cc cc cc cc Тому в пам’яті об’єднання буде мати наступний вигляд: 09 00 00 00 00 c0 92 40 cc cc cc cc cc cc cc cc(8 нових байтів) st1 struct info { char p1[11]; double p2; short p3; unsigned p4 : 1 + 5; vkaz p5; unsigned : 4 + 3; } st1 = { "Lviv", 4.0, 515, 17, &b }; p1: p[0] = 4C, p[1] = 76, p[2] = 69, p[3] = 76, p[4] = 00, p[5] = 00, p[6] = 00, p[7] = 00, p[8] = 00, p[8] = 00, p[10] = 00 p2: 410 = 01002 = 1.00 * 1010 = 0100 0000 0001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 = 40 10 00 00 00 00 00 00 де 100 0000 0001 – зміщений порядок на 1023 У пам’яті комп’ютера: 00 00 00 00 00 00 10 40 p3: 51510 = 20316 = 03 02 p4: вирівнювання 6 біт + вирівнювання по довжині слова СС СС p5: 11 00 00 00 43 f8 75 00 – адреса змінної b вирівнювання 4 біти + вирівнювання по довжині слова СС СС СС СС Остаточний результат: 4c 76 69 76 00 00 00 00 00 00 00 cc cc cc cc cc 00 00 00 00 00 00 10 40 03 02 cc cc 11 00 00 00 43 f8 75 00 cc cc cc cc Код програми: #include <iostream> #include <iomanip> using namespace std; int main() { typedef bool *vkaz; bool b = true; setlocale(LC_ALL, "Ukr"); enum color { BLUE = 2, GREEN = BLUE + 4, CYAN, RED, BROWN, GRAY = RED - 11, YELLOW, WHІTE = 0, MAGENTA, LІGHTGRAY, DARKGRAY = -2, BLACK }; 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] = 9; m3[0][1][2] = 4; m3[2][1][3] = 7; m3[2][0][0] = 7; m3[1][1][1] = 2; m3[1][0][1] = 6; m3[2][0][1] = 3; m3[2][1][2] = 9; struct info { char p1[11]; double p2; short p3; unsigned p4 : 1 + 5; vkaz p5; unsigned : 4 + 3; } st1 = { "Lviv", 4.0, 515, 17, &b }, st2; struct str { unsigned s1 : 1 + 1; unsigned : 0; unsigned s2 : 1 + 2; unsigned : 0 + 3; unsigned s4 : 4 + 4; int s5; }; union { int up1; short up2; double up3; char up4[3][2]; bool up5; color up6; vkaz up7; float up8; str up9; } un2; un2.up3 = 6*2*100; un2.up6 = BROWN; cout << "Внутрiшнє представлення масиву m3: " << endl; unsigned char *vm2 = (unsigned char *)(&m3); for (int i = 0; i < sizeof(m3); i++) { cout << hex << setfill('0') << setw(2) << (int)*vm2++ << ' '; } cout << endl << endl; cout << "Внутрiшнє представлення структури st1: " << endl; unsigned char *vst = (unsigned char *)(&st1); for (int i = 0; i < sizeof(st1); i++) { cout << hex << setfill('0') << setw(2) << (int)*vst++ << ' '; } cout << endl << endl; cout << "Внутрiшнє представлення об'єднання un2: " << endl; unsigned char *vun = (unsigned char *)(&un2); for (int i = 0; i < sizeof(un2); i++) { cout << hex << setfill('0') << setw(2) << (int)*vun++ << ' '; } getchar(); return 0; } Скріншот виконання: Висновок Досліджуючи внутрішнє представлення даних у пам’яті комп’ютера я дізнався про структуровані похідні типи, до яких відносяться: масиви, структури (struct), об'єднання (union) та нумерації (enum).
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

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

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

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

Admin

26.02.2023 12:38

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