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

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

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

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

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

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

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра ЕОМ / Звіт про виконання лабораторної роботи №3 з дисципліни: “Програмування, частина 3 (Структури даних та алгоритми)” на тему:“ Перетворення типів даних ” Львів 2017 Мета: дослідження методів та засобів явного та неявного перетворення типів даних. Постановка задачі День народження студента = 07 Місяць народження студента = 08 Завдання №1 Оголошені наступні змінні: char x0 = 0; unsigned int x1 = 7; signed short int x2 = 2; long double x3 = 3; signed short int x4 = 4; unsigned short int x5 = 5; unsigned int x6 = 6; unsigned int x7 = 7; long double x8 = 8; unsigned int x9 = 9; unsigned int x10 = 10; unsigned short int x11 = 11; Потрібно визначити, які неявні перетворення будуть відбуватися при обчисленні таких виразів: x1 = x1 – 0xFFFFFFFA; x3 = ’a’ + x0 – x2; x7 = x4 + x5 + x6 * 0.1; x8 = x9 + x10 – x11*10; Завдання №2 Визначити, які явні і неявні перетворення типів будуть відбуватись. Результати обчислень підтвердити програмними результатами. В звіти пояснити кожне перетворення і кожний отриманий результат. int x = 2; //замість № підставити значення: DN % 5 float y = 1; // замість № підставити значення: DN % 3 char v4 = static_cast< char > (x) + 22; printf("%d %x %c \n", v4, v4, v4); short w6 = *(reinterpret_cast<short*>(&y) + 3) + 13; printf("%x %u %d \n", w6, w6, w6); char v0 = *reinterpret_cast<char*> (&x) + 3; printf("%d %x %c \n", v0 , v0, v0); short w3 = *reinterpret_cast<short*>(&y) + 1; printf("%x %u %d \n", w3, w3, w3); Система тестів Завдання 1 1. x1 = x1 – 0xFFFFFFFA; 1)”-“ unsigned int x1 -> signed int(0xFFFFFFFA) 2)”=” signed int -> unsigned int x1; Результат unsigned int, точність втрачається. 2) x3 = ’a’ + x0 – x2; ’a’ + x0 – відбулось не явне переведення char до типу signed int, дані не втратились. ’a’ + x0 – x2 – відбулось не явне переведення signed short int (х2) до типу signed int. Дані не втратились. x3 = ’a’ + x0 – x2; - відбулось не явне переведення signed int до типу double. Дані не втратились. 3) x7 = x4 + x5 + x6 * 0.1; x6 * 0.1 – відбулось не явне переведення unsigned int до типу signet int. Дані не втратились. x4 + x5 – відбулось не явне переведення signed short int до типу unsigned short int. Дані не втратились. x4 + x5 + x6 * 0.1 - відбулось не явне переведення unsigned short int до типу signet int. Дані не втратились. x7 = x4 + x5 + x6 * 0.1; - відбулось не явне переведення signet int до типу unsignet int. Дані не втратились. 4) x8 = x9 + x10 – x11*10; x11*10 – відбулось не явне переведення типів, загальний тип unsigned short int став signed int. Дані не втратились. x9 + x10 – переведення типів не відбулось, тому що х9 та х10 типу unsigned int. Дані не втратились. x9 + x10 – x11*10 – відбулось не явне переведення типe unsigned int до типу signed int. Дані не втратились. x8 = x9 + x10 – x11*10 – відбулось не явне перетворення signed int до long double. Дані не втратилися. / Рис.1 Результат виконання 1 завдання Завдання 2 1) static_cast< char > (x) – явне переведення типу int до типу char. static_cast< char > (x)+22 – не явне переведення типу char до типу int. char v4 = static_cast< char > (x)+22 - не явне переведення типу int до типу char. printf("%d %x %c \n", v4,v4,v4) – далі не явно переводимо перші два типи завдяки модифікаторам і виводимо змінні на екран. 1 модифікатор d – int,( відбулось переведення типу char до типу int ) 2 модифікатор х – int(16) ,( відбулось переведення типу char до типу int(16) ) 3 модифікатор с – тип char(не відбулось переведення типів). 2) *(reinterpret_cast<short*>(&y) - відбулось явне переведення вказівника типу double до вказівника типу short. Дані могли втратитись. *(reinterpret_cast<short*>(&y)+3); - зміщення вказівника на 8 байти. *(reinterpret_cast<short*>(&y)+3)+13- розіменування вказівника типу short, відбулось не явне переведення типу short до типу int. Дані не втратились. short w6=*(reinterpret_cast<short*>(&y)+3)+13; - відбулось не явне переведення типу int до типу short. Дані могли втратитись. printf("%x %u %d \n", w6,w6,w6); - далі завдяки модифікаторам і виводимо змінні на екран. 1 модифікатор x – int(16), (не відбулось перведення типів) 2 модифікатор u – unsigned int (відбулось переведення типу int до unsigned int ) 3 модифікатор d – int . (не відбулось переведення типів). 3) char v0 = *reinterpret_cast<char*> (&x) + 3 printf("%d %x %c \n", v0 , v0, v0); reinterpret_cast<char*> (&x) – відбулося явне переведення вказівника типу int до вказівника типу char. Дані не втратились. char v0 = reinterpret_cast<char*> (&x); - переведення типів не відбувається тому, що перед дорівнює вказівник на тип char і після дорівнює вказівник на тип char. 1 модифікатор d – 1) розадресування вказівника. 2) неявне переведення до типу int. 3) виведення в на екран переведення не відбулось. 2 модифікатор x - 1) розадресування вказівника. 2) неявне переведення до типу int (16). 3) виведення в на екран переведення не відбулось. 3 модифікатор c - 1) розадресування вказівника . 2) неявне переведення до типу int . 3) неявне переведення до типу char. 4) *(reinterpret_cast<short*>(&y) - відбулось явне переведення вказівника типу double до вказівника типу short. Дані могли втратитись. *reinterpret_cast<short*>(&y)+1; - зміщення вказівника на 4 байти. *reinterpret_cast<short*>(&y)+1- розіменування вказівника типу short, відбулось не явне переведення типу short до типу int. Дані не втратились. short w3=*reinterpret_cast<short*>(&y)+1; - відбулось не явне переведення типу int до типу short. Дані могли втратитись. printf("%x %u %d \n", w3,w3,w3); - далі завдяки модифікаторам і виводимо змінні на екран. 1 модифікатор x – int(16), (не відбулось перведення типів) 2 модифікатор u – unsigned int (відбулось переведення типу int до unsigned int ) 3 модифікатор d – int . (не відбулось переведення типів). / Рис.2 Результат виконання 2 завдання Спеціфікація програми int main() { x1 = x1 - 0xFFFFFFFA; x3 = 'a' + x0 - x2; x7 = x4 + x5 + x6 * 0.1; x8 = x9 + x10 - x11 * 10; showInMemory(x1); showInMemory(x3); showInMemory(x7); showInMemory(x8); char v4 = static_cast< char > (x) + 22; printf("%d %x %c \n", v4, v4, v4); hort w6 = *(reinterpret_cast<short*>(&y) + 3) + 13; printf("%x %u %d \n", w6, w6, w6); char v0 = *reinterpret_cast<char*> (&x) + 3; printf("%d %x %c \n", v0 , v0, v0); short w3 = *reinterpret_cast<short*>(&y) + 1; printf("%x %u %d \n", w3, w3, w3); return 0; } Висновок: на даній лабораторній роботі я виконав дослідження методів та засобів явного та неявного перетворення типів даних.
Антиботан аватар за замовчуванням

28.05.2019 17:05-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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