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

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

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

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

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

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

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра ЕОМ Лабораторна робота №1 з дисципліни: "Програмування. Частина III. Структури даних та алгоритми" Тема: "Подання в пам’яті комп’ютера статичних даних базових типів" Львів 2016 МЕТА РОБОТИ Дослідження внутрішнього подання в пам’яті комп’ютера базових типів даних статичної структури. ТЕОРЕТИЧНІ ВІДОМОСТІ Охарактеризуємо типи даних мови С++, які відіграють важливу роль в обробці даних. Під типом даних розуміють множину припустимих значень цих даних і множину дозволених операцій над ними. Водночас тип даних визначає і розмір пам'яті, що займають змінні і константи даного типу. Кожен тип даних має ім'я (ідентифікатор). Пам'ять не виділяється для типу даних, а виділяється для розміщення змінної або константи. У мові С++ виділяють наступні категорії типів: базові типи даних; похідні типи. Базові типи мають імена, які є ключовими словами мови. До базових типів належать: скалярні типи і порожній тип — void. Тип void не має значення і введений для опису функцій, які не повертають значень, та для деяких інших цілей. Скалярні типи поділяються на цілочисельні та дійсні типи. Логічний тип, символьні і цілі типи даних є цілочисельним типом, для якого визначені всі операції з цілими числами. Похідні типи визначаються на основі базових типів. Похідні типи поділяються на скалярні і структурні (агрегатні). До скалярних похідних типів належать: перерахування (enum — enumeration) — множина поіменованих цілих значень; вказівники (ім'я_типу *); посилання (ім'я_типу &). Структурні типи: масиви (тип_елементу ім'я_масиву[число_елементів]); структури (struct); об'єднання (union), класи (class). Дані в програмі можна розділити на змінні і константи. Перед використанням змінні і константи повинні бути оголошені за допомогою оператора оголошення. Ключове слово const вказує, що записані праворуч ідентифікатори є константами (константними змінними). При цьому значення константи задається обов'язково і у програмі змінюватися не може. Крім константних змінних, константи можуть задаватися у вигляді літеральних (самовизначених) констант . Логічні змінні типу bool можуть приймати одне з двох значень: false (хиба) та true (істина). За визначенням false рівне 0, a true рівне 1. Логічні змінні широко використовуються в операціях порівняння, логічних операціях і логічних виразах. Розмір змінної залежить від реалізації, але звичайно складає 2 байти. Приклад оголошення: bool reload = false, in_range = true; Для явного задання діапазону можна використовувати модифікатори signed, unsigned. Змінні і константи цілих типів також можуть оголошуватись за допомогою модифікаторів signed і unsigned. При використанні модифікаторів short і long дозволяється опускати ім'я int. Типи з плаваючою точкою або дійсні типи представлені трьома модифікаціями, що характеризують точність подання дійсних чисел: float — одиничної точності; double — подвійної точності; long double — розширеної точності. Таблиця 2. Характеристики основних типів даних мови С++ Ім'я типу Розмір пам'яті, байтів (16/32-розрядна) Діапазон значень для 16-розрядної архітектури  [signed] char 1 -128 127  unsigned char 1 0 255  [signed] short [int] 2 -32 768 32 767  unsigned short [int] 2 0 65 535  [signed] int машинне слово -32 768 32 767  unsigned int машинне слово 0 65 535  [signed] long [int] 4 -2 147 483 648 2 147 483 647  [unsigned] long [int] 4 0 4 294 967 295  float 4 3.4e-38 3.4e38  double 8 1.7e-308 1.7e308  long double 10 3.4e-4932 3.4e4932   ВИБІР ІНДИВІДУАЛЬНОГО ЗАВДАННЯ (день народження студента) % 6 = 6 % 6 = 0 (місяць народження студента) % 5 = 2 % 5 = 2 Завдання до (0,2) варіанту: Дослідити внутрішнє подання в пам’яті комп’ютера даних статичної структури для 4-х змінних : b,ch2,i6,d3 bool b b = (день народження * 5) % 10 * місяць народження b = (6 * 5) % 10 * 2 = 0 bool займає 1 байт. Внутрiшнє придставлення змiнної b(bool): 00 unsigned char ch2 ch2 = друга літера = ‘A’ = 9710 = 6116 unsigned char займає 1 байт. Внутрiшнє придставлення змiнної ch2(unsigned char ): 61 long i3 i3 = день народження * 215 = 6 * 215 = 129010 129010 = 50A16=0000 0000 0000 0000 0000 0101 0000 10102 – в прямому коді long займає 4 байта. В пам’яті комп’ютера буде зберігатися у зворотному порядку розміщення байт числа Внутрiшнє придставлення змiнної i3(long ): 0a 05 00 00 long double d3 X – день народження, Y – місяць народження, Z = X * Y d3 = – Z . X e Y d3 = -12.6e2 long double займає 8 байтів. знак – 1 біт порядок – 11 біт мантиса – 52 біта знак дорівнює 1 s(1біт) е(11 біт) m(52 біта)  1 10000001001 0011 1011 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000  мантиса = 12.6 * 10210 =126010 = 10011101100.02 = 1. 0011101100* 101010 порядок = 1023 + 10= 103310 = 100000010012 1100 0000 1001 0011 1011 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 00002 = C0 93 B0 00 00 00 00 0016 d3 = C0 93 B0 00 00 00 00 0016 В пам’яті комп’ютера буде зберігатися у зворотному порядку розміщення байт числа Внутрiшнє придставлення змiнної d3(long double ): 00 00 00 00 00 b0 93 C0 Код програми: #include <iostream> #include <stdio.h> #include <conio.h> using namespace std; int main() { setlocale(LC_ALL, "Russian"); bool b = 6 * 5 % 10; unsigned char ch2 = 'a'; unsigned i3 = 6 * 215; long double d3 = -12.6e2; unsigned char *vb = (unsigned char *)(&b); cout << "Внутрiшнє представлення змiнної b(bool): "; for (int i = 0; i<sizeof(b); i++) printf("%02x ", vb[i]); printf("\n"); vb = (unsigned char *)(&ch2); cout << "Внутрiшнє представлення змiнної ch2(signed char): "; for (int i = 0; i<sizeof(ch2); i++) printf("%02x ", vb[i]); printf("\n"); vb = (unsigned char *)(&i3); cout << "Внутрiшнє представлення змiнної i3(long): "; for (int i = 0; i<sizeof(i3); i++) printf("%02x ", vb[i]); printf("\n"); vb = (unsigned char *)(&d3); cout << "Внутрiшнє представлення змiнної d3(long double): "; for (int i = 0; i<sizeof(d3); i++) printf("%02x ", vb[i]); _getch(); return 0; } Скріншот виконання: Висновок У цій лабораторній роботі я навчився визначати кількість біт, які необхідні для пердставлення різних типів даних в пам'яті комп’ютера, визначити розмір вказівника і адреси на ці типи
Антиботан аватар за замовчуванням

28.05.2019 17:05-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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