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

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

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

Рік:
2012
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Програмування Частина III Структури даних та алгоритми

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

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра ЕОМ Звіт з лабораторної роботи №1 з дисципліни "Програмування. Частина III. Структури даних та алгоритми" Варіант: i1 = 68 i2 = i1*(-5) = -340 f1 = 97.115 f2 = f1*(-2) = -194.23 Мета роботи Дослідження внутрішнього представлення в пам’яті комп’ютера базових типів даних статичної структури. 2. Постановка задачі Дослідити внутрішнє представлення в пам’яті комп’ютера цілих та дійсних типів даних. Розглянути наступні базові типи даних: int i1 , і2; float f1 , f2; 3. Алгоритм розв’язання задачі Спочатку ініціалізуємо змінні i1,i2,f1,f2 моїми значеннями мого варіанту. Потім почергово присвоюємо змінним типу char* адреси змінних i1, i2, f1, f2, які явно перетворюються у тип (unsigned char *) unsigned char *vi1=(unsigned char *)(&i1); unsigned char *vi2=(unsigned char *)(&i2); unsigned char *vf1=(unsigned char *)(&f1); unsigned char *vf2=(unsigned char *)(&f2); Потім у циклах виводимо значення наших вказівників *vi1, *vi2, *vf1, *vf2 на екран //print i1 printf("i1:\t"); for (int i=0;i<sizeof(i1);i++) printf("%02X ",vi1[i]); printf("\n"); //print i2 printf("i2:\t"); for (int i=0;i<sizeof(i2);i++) printf("%02X ",vi2[i]); printf("\n"); //print l1 printf("f1:\t"); for (int i=0;i<sizeof(f1);i++) printf("%02X ",vf1[i]); printf("\n"); //print i2 printf("f2:\t"); for (int i=0;i<sizeof(f2);i++) printf("%02X ",vf2[i]); printf("\n"); 4. Система тестів 4.1 Приклад 1 Int I1 = 68 68:16=4 (4); 4:16=0 (4). 6810 = 4416 = 100 01002 так як int займає 4 байта, то 100 01002 запишеться так: 0000 0000 0000 0000 0000 0000 0100 01002 ВПК: 0100 0100 0000 0000 0000 0000 0000 00002 4 4 0 0 0 0 0 016 4.2 Приклад 2 int i2 = i1*(-5) = -340 340:16=21 (4) 21:16=1 (5) 1:16=0 (1) -34010 =- 15416 = -0000 0000 0000 0000 0000 0001 0101 01002 1111 1111 1111 1111 1111 1110 1010 10112 + 1 1111 1111 1111 1111 1111 1110 1010 11002 ВПК: 1010 1100 1111 1110 1111 1111 1111 11112 A C F E F F F F16 4.3 Приклад 3 float f1 = 97.115 97.11510 = 61,1D70A3D716 = = 0110 0001,0001 1101 0111 0000 1010 0011 1101 01112 97:16=6 (1) 6:16=0 (6) 0.115*16=1.84 0.84*16=13.44 0.44*16=7.04 0.04*16=0.64 0.64*16=10.24 0.24*16=3.84 0.84*16=13.44 0.44*16=7.04 нормалізація: 01,10 0001 0001 1101 0111 0000 1010 0011 1101 01112*10110 заокруглення: 1,100 0010 0011 1010 1110 0001 мантиса m = 100 0010 0011 1010 1110 0001 Визначення зміщеного порядку: е = 12710 + 610 = 13310 = 8516 = 1000 01012 знак s = 0 Схема внутрішнього представлення: s e m  1 біт 8 біт 23 біт  Збірка за схемою: s e m  0 1000 0101 100 0010 0011 1010 1110 0001  0100 0010 1100 0010 0011 1010 1110 00012= 42 C2 3A E116 ВПК: E1 3A C2 42 4.4 Приклад 4 float f2=f1*(-2) =-194.2310 =-C2,3AE147AE16= =-1100 0010,0011 1010 1110 0001 0100 0111 1010 11102 194:16=12 (2) 12:16=0 (12) 0.23*16=3.68 0.68*16=10.88 0.88*16=14.08 0.8*16=1.28 0.28*16=4.48 0.48*16=7.68 0.68*16=10.88 0.88*16=14.08 float займає 4 байт нормалізація: 1,100 0010 0011 1010 1110 0001 0100 01112*10111 заокруглення: 1,100 0010 0011 1010 1110 00012*10111 мантиса m = 100 0010 0011 1010 1110 0001 Визначення зміщеного порядку: е = 12710 +710 =13410=8616 = 1000 01102 знак s = 1 Схема внутрішнього представлення: s e m  1 біт 8 біт 23 біт  Збірка за схемою: s e m  1 1000 0110 100 0010 0011 1010 1110 0001  1100 0011 0100 0010 0011 1010 1110 00102 = C3 42 3A E116 ВПК: E1 3A 42 C3 5. Pезультати виконання програми / Рис 1. Демонстрація роботи програми Висновки: Виконуючи лабораторну роботу я дізнався як в пам'яті комп'ютера представляються різні типи чисел, навчився вручну робити обрахунки та написав програму, яка це робить автоматично. Додатки Код програми: #include<stdio.h> #include<conio.h> int main (void) { int i1 = 67,i2 = i1*(-5); float f1 = 104.97,f2 = f1*(-2); unsigned char *vi1=(unsigned char *)(&i1); unsigned char *vi2=(unsigned char *)(&i2); unsigned char *vf1=(unsigned char *)(&f1); unsigned char *vf2=(unsigned char *)(&f2); //print i1 printf("i1:\t"); for (int i=0;i<sizeof(i1);i++) printf("%02X ",vi1[i]); printf("\n"); //print i2 printf("i2:\t"); for (int i=0;i<sizeof(i2);i++) printf("%02X ",vi2[i]); printf("\n"); //print l1 printf("f1:\t"); for (int i=0;i<sizeof(f1);i++) printf("%02X ",vf1[i]); printf("\n"); //print i2 printf("f2:\t"); for (int i=0;i<sizeof(f2);i++) printf("%02X ",vf2[i]); printf("\n"); getch(); return 0; }
Антиботан аватар за замовчуванням

18.03.2015 01:03-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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