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

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

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

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

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

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

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

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

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

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

У звіті досліджуються методи та засоби явного й неявного перетворення типів даних у програмуванні. Наведено практичні приклади реалізації алгоритмів та результати виконання програм на C++.

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

  • Перетворення типів даних
  • Структури даних та алгоритми
  • Мова програмування C++
  • Пам'ять комп'ютера
  • Статичні дані
  • Вказівники та приведення типів

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

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

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

перетворення типівстатичні даністатичні типистатична пам'ятьвказівникиreinterpret_caststatic_castструктури данихалгоритмипрограмуваннябазові типипохідні типи

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” Кафедра ЕОМ / ЗВІТ до лабораторної роботи № 2 на тему: "Представлення в пам’яті комп’ютера статичних даних базових та похідних типів" з дисципліни: "Програмування, частина 3(Структури даних та алгоритми)" Львів – 2015 Мета роботи: Дослідження методів та засобів явного та неявного перетворення типів даних. Хід роботи: 1. При підготовці до лабораторної роботи, необхідно засвоїти теоретичний матеріал по темі і підготуватись до контрольного опитування по розумінню питань даної тематики. 2. Згідно з індивідуальним завданням розробити алгоритм розв’язання задачі. 3. Підготувати програмну реалізацію розробленого алгоритму. Засобами вбудованого текстового редактора інтегрованого середовища набрати текст підготовленої програми. Відкомпілювати, налагодити та виконати програму. 4. Протестувати програму згідно зі складеною системою тестів і, при потребі, відкоректувати текст програми. Проаналізувати отримані результати. 5. Написати контрольне опитування по темі. 6. Оформити звіт по роботі. Iндивiдуальне завдання : Завдання 1: Визначити, які неявні перетворення типів будуть відбуватись при обчисленнях. З’ясувати, чи відбудуться втрати значимості даних. Хід міркувань підтвердити програмними результатами. В звіти пояснити кожне перетворення і метод, яким воно здійснено. typedef unsigned int type_0; typedef unsigned short int type_1; typedef unsigned long int type_2; typedef signed short int type_3; typedef signed int type_4; typedef signed long int type_5; typedef bool type_6; typedef char type_7; typedef wchar_t type_8; typedef float type_9; typedef double type_10; typedef long double type_11; // позначимо через DN - день народження, MN – місяць народження type_№ x0=0; // замість № підставити значення: DN % 9 type_№ x1=DN; // замість № підставити значення: DN % DN type_№ x2=2; // замість № підставити значення: MN % 9 type_№ x3=3; // замість № підставити значення: MN % 13 type_№ x4=4; // замість № підставити значення: (DN * MN) % 9 type_№ x5=5; // замість № підставити значення: DN % 12 type_№ x6=6; // замість № підставити значення: MN % 3 type_№ x7=7; // замість № підставити значення: (DN * MN) % 12 type_№ x8=8; // замість № підставити значення: DN % 13 type_№ x9=9; // замість № підставити значення: MN % 6 type_№ x10=10; // замість № підставити значення: (DN * MN) % 10 type_№ x11=11; // замість № підставити значення: DN % 3 /* 1 */ x1 = x1 – 0xFFFFFFFA; /* 2 */ x3 = ’a’ + x0 – x2; /* 3 */ x7 = x4 + x5 + x6 * 0.1; /* 4 */ x8 = x9 + x10 – x11*10; Завдання 2 Визначити, які явні і неявні перетворення типів будуть відбуватись. Результати обчислень підтвердити програмними результатами. В звіти пояснити кожне перетворення і кожний отриманий результат. // позначимо через DN і MN числа, що відповідають дню і місяцю народження, // через dn і mn – по дві цифри, що відповідають дню і місяцю народження, // наприклад: DN=5 , MN=3 , dn=05 , mn =03 const x_0=DN*MN*100; // наприклад: 5*3*100=1500 => x_0=1500; const x_1= 0dnmn0; // наприклад: x_1=005030; const x_2= 0xdnmn; // наприклад: x_2=0x0503; const x_3= 0mndn0; // наприклад: x_3=003050; const x_4= 0xmndn; // наприклад: x_4=0x0305; const y_0=DN*MN/100; // наприклад: 5*3/100=0.15 => y_0=0.15; const y_1= - DN.MN; // наприклад: y_1=-5.3; const y_2= MN. DN e +2; // наприклад: y_2=3.5e+2; const y_3= - DN.MN e 1; // наприклад: y_3=-5.3e1; const y_4= - MN. DN e -1; // наприклад: y_4=-3.5e-1; int x = х_№; // замість № підставити значення: DN % 5 float y = y_№; // замість № підставити значення: DN % 3 int v0=*reinterpret_cast<char*> (&x) +3; printf("%d %x %c \n", v0,v0,v0); int v1 = static_cast< char > (x)+11; printf("%d %x %c \n", v1,v1,v1); int v2=*reinterpret_cast<char*> (&x) +1; printf("%d %x %c \n", v2,v2,v2); int v3=*(reinterpret_cast<char*> (&x)+1)+11; printf("%d %x %c \n", v3,v3,v3); int v4 = static_cast< char > (x)+22; printf("%d %x %c \n", v4,v4,v4); int v5=*reinterpret_cast<char*> (&x) +2; printf("%d %x %c \n", v5,v5,v5); int v6=*(reinterpret_cast<char*> (&x)+2)+22; printf("%d %x %c \n", v6,v6,v6); char *v7=reinterpret_cast<char*> (&x); printf("%d %x %c \n", *v7+1,*v7+2,x+3); char w0 =*(reinterpret_cast<char*>(&y)+2)+12; printf("%x %u %d \n",w0,w0,w0); long w1 =*reinterpret_cast<long*>(&y)+33; printf("%lx %lu %ld \n",w1,w1,w1); long w2=static_cast<long>(y)+55; printf("%lx %lu %ld \n", w2,w2,w2); short w3=*reinterpret_cast<short*>(&y) + 1; printf("%x %u %d \n", w3,w3,w3); short w4=*(reinterpret_cast<short*>(&y)+1)+11; printf("%x %u %d \n", w4,w4,w4); short w5=*(reinterpret_cast<short*>(&y)+2)+12; printf("%x %u %d \n", w5,w5,w5); short w6=*(reinterpret_cast<short*>(&y)+3)+13; printf("%x %u %d \n", w6,w6,w6); short w7=*(reinterpret_cast<short*>(&y)+2)+2; printf("%x %u %d \n", w7,w7,w7); Варіант: V4, v0, w3, w6 Код програми: #include <iostream> using namespace std; void main() { setlocale(LC_ALL, "Ukrainian"); typedef unsigned int type_0; typedef unsigned short int type_1; typedef unsigned long int type_2; typedef signed short int type_3; typedef signed int type_4; typedef signed long int type_5; typedef bool type_6; typedef char type_7; typedef wchar_t type_8; typedef float type_9; typedef double type_10; typedef long double type_11; // позначимо через DN - день народження, MN – місяць народження type_6 x0 = 0; // замість № підставити значення: DN % 9 type_0 x1 = 24; // замість № підставити значення: DN % DN type_7 x2 = 2; // замість № підставити значення: MN % 9 type_7 x3 = 3; // замість № підставити значення: MN % 13 type_6 x4 = 4; // замість № підставити значення: (DN * MN) % 9 type_0 x5 = 5; // замість № підставити значення: DN % 12 type_1 x6 = 6; // замість № підставити значення: MN % 3 type_0 x7 = 7; // замість № підставити значення: (DN * MN) % 12 type_11 x8 = 8; // замість № підставити значення: DN % 13 type_1 x9 = 9; // замість № підставити значення: MN % 6 type_8 x10 = 10; // замість № підставити значення: (DN * MN) % 10 type_3 x11 = 11; // замість № підставити значення: DN % 3 /* 1 */ x1 = x1 - 0xFFFFFFFA; /* 2 */ const char* a = "a"; x3 = static_cast<unsigned int>(*a) + x0 - x2; /* 3 */ x7 = x4 + x5 + x6 * 0.1; /* 4 */ x8 = x9 + x10 - x11 * 10; unsigned char* var = (unsigned char*)(&x3); cout << "Неявнi перетворення результатiв: " << endl; cout << "x1 : " << x1 << endl; cout << "x7 : " << x7 << endl; cout << "x8 : " << x8 << endl; cout << "\nЯвнi перетворення результатiв:" << endl; cout << "x3 : " << endl; for (int i = 0; i<sizeof(x3); i++) printf("%02X ", var[i]); cout << endl; cout << endl; cout << endl; ////////// int z1 = 0xc1a70000; printf("%f", *reinterpret_cast<float*> (&z1)); cout << endl; int z2 = 0xc1a70000; printf("%c", *(reinterpret_cast<char*>(&z2) + 2) + 5); cout << endl; float z3 = 2670.05; //2670.05 = 0xa6e.0ccccc printf("%d", *reinterpret_cast<short*> (&z3)); cout << endl; float z4 = 2670.05; printf("%d", static_cast<int> (z4)); ////////////// // 2 частина ----------------------------------------------------------------- // позначимо через DN і MN числа, що відповідають дню і місяцю народження, // через dn і mn – по дві цифри, що відповідають дню і місяцю народження, // наприклад: DN=5 , MN=3 , dn=05 , mn =03 cout << "\n-----------------------------------------------------" << endl; const int x_0 = 24 * 7 * 100; // наприклад: 5*3*100=1500 => x_0=1500; const int x_1 = 024070; // наприклад: x_1=005030; const int x_2 = 0x2407; // наприклад: x_2=0x0503; const int x_3 = 007240; // наприклад: x_3=003050; const int x_4 = 0x0724; // наприклад: x_4=0x0305; const double y_0 = 24 * 7 / 100; // наприклад: 5*3/100=0.15 => y_0=0.15; const double y_1 = -24.7; // наприклад: y_1=-5.3; const double y_2 = 7.24e+2; // наприклад: y_2=3.5e+2; const double y_3 = -24.7e1; // наприклад: y_3=-5.3e1; const double y_4 = -7.24e-1; // наприклад: y_4=-3.5e-1; int x = x_4; // замість № підставити значення: DN % 5 double y = y_0; // замість № підставити значення: DN % 3 char v4 = static_cast< char > (x) + 22; printf("%d %x %c \n", v4, v4, v4); char v0 = *reinterpret_cast<char*> (&x) + 3; printf("%d %x %c \n", v0, v0, v0); long w3 = *reinterpret_cast<short*>(&y) + 1; printf("%lx %lu %ld \n", w3, w3, w3); short w6 = *(reinterpret_cast<short*>(&y) + 3) + 13; printf("%x %u %d \n", w6, w6, w6); } Результат виконання програми : / Висновок: на лабораторній роботі №2, ознайомився з явним і неявним перетворенням типів.
Допоможи студентському архіву

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

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

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

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

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

Admin

26.02.2023 12:38

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