Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки, молоді та спорту України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
Звіт
з лабораторної роботи № 2
на тему:
"Перетворення типів даних"
з дисципліни:
" Програмування. Частина III. Структури даних та алгоритми "
Вибір індивідуального завдання:
RN = 1994
MN = 8 % 8 = 0
DN = 23
mn = 23
dn = 00
Pr1 = №(C) = 70
рr2 = №(h) = 114
рr3 = №(a) =101
Львів – 2013
Мета роботи:
Дослідження методів та засобів явногоі неявного перетворення типів даних.
Постановка задачі:
Обчислити вирази та визначити, які неявні та явні перетворення типів будуть відбуватись. Хід міркувань підтвердити програмними результатами.
Далі використовувати такі позначення:
RN- число, що відповідає року народження,
MN- число, що відповідає місяцю народження% 8,
DN - число, що відповідає дню народження,
mn і dn– ті ж самі значення, що й MNі DN відповідно, записані у вигляді двох цифр,
Pr1 – ASCII-код першої літери прізвища (латинська велика літера),
pr2 – ASCII-код другої літери прізвища (латинська мала літера),
pr3 – ASCII-код третьої літери прізвища (латинська мала літера).
Система тестів:
•Неявні перетворення типів даних
x1 = x0 + x2 + x4+0Х123;
а) float x0 = 0х1994 – 10
0х1994
ВПК = 94 19 00 00
199416 = -10810 (1 байт)
б) unsigned short x2 = 00
ВПК = 00 00 00 00
в)bool x4 = 23% 3 * 10
23 % 3 * 10 =1
г) 0х123
12316 = 29110
х1 = -107 – 10 + 2 +1 +291 = 174
Результат: 174
x2 = x2 + x3 - 0123;
а) unsigned short x2 = 00
ВПК = 00 00
б) short x3 = 70 – 110
ВПК = D8 FF(преведено за допомогою програми, розробленої в лаб. роб. №1)
D8 FF16 = 55551
в) 01238 = 8310
3) x3 = x1+x2 * 0.123 + ’1’;
а) х1
ВПК = СС СС(преведено за допомогою програми, розробленої в лаб. роб. №1)
СС СС16 = -1310810
б) unsigned short x2 = 00
ВПК = 00 00 00 00
0*0,123 = 0
в) ‘1’ – у таблиці ASCII це код 49
ВПК = 31 00(преведено за допомогою програми, розробленої в лаб. роб. №1)
31 0016 = 1254410
• Явні перетворення типів даних
1) floatv1 = static_cast<float> (x);
х = 23*0*100 = 0
2) char v2 = static_cast<char> (x);
х = 23*0*100 = 0
Оскільки char займає 1 байт, то х = 63, а в таблиці ASCII це “?”
3) float v3 =*reinterpret_cast<float*> (&x)+1;
х = 23*2*100 = 0
Оскільки char займає 1 байт, то 00 + 1 = 1
4) char v4 =*(reinterpret_cast<char*> (&x)+2)+3;
х = 23*0*100 = 0
Оскільки char займає 1 байт, то 00 + 3= 3. В таблиці ASCII це “♥”
5) int w1 =static_cast<int>(y)+0X0E2;
у = 0
0х0E2 = 226
w1 = 0 + 226= 226
6) long w2 =*reinterpret_cast<long*>(&y)+1;
у = 0
ВПК = 00 00 00 00 00 00 00 00. Оскільки long– 4 байти і перші 4 байти = 0, то
0 + 1 = 1
7) short w3 =*(reinterpret_cast<short*>(&y)+2);
ВПК = 00 00 00 00 00 00 00 00. Short – 2 байти
00 00 = 0
8) char w4 =*(reinterpret_cast<char*>(&y)+7)+3;
ВПК = 00 00 00 00 00 00 00 00. Сhar – 1 байт
Оскільки char займає 1 байт, то 00 + 3= 3. В таблиці ASCII це “♥”
Алгоритм розв’язання задачі:
#include<iostream>
#include<cmath>
using namespace std;
int main(void)
{
setlocale(0,"rus");
cout<<"Неявне перетворення типiв даних:\n";
char x0=0x1994-10;//Rn=1994
float x1;
unsigned short x2=00;//MN=0
short x3=70-110;//Pr1=70
bool x4=23%3*10;//DN=23
cout<<"x0: "<<x0<<endl;
cout<<"x2: "<<x2<<endl;
cout<<"x3: "<<x3<<endl;
cout<<"x4: "<<x4<<endl;
x1=x0+x2+x4+0X123;
x2=x2+x3-0123;
x3=x1+x2*0.123+'1';
cout<<"x1: "<<x1<<endl;
cout<<"x2: "<<x2<<endl;
cout<<"x3: "<<x3<<endl;
cout<<"Явне перетворення типiв даних:\n";
const int x_0=23*0*100;
const int x_1=023000;
const int x_2=0x2300;
const int x_3=000230;
const int x_4=0x0023;
const double y_0=23*0/100;
const double y_1=-23.0;
const double y_2=0.23e+2;
const double y_3=-23.0e1;
const double y_4=-0.23e-1;
int x=x_3;
double y=y_0;
float v1 = static_cast< float > (x);
char v2 = static_cast<char> (x);
float v3 =*reinterpret_cast<float*> (&x)+1;
char v4 =*(reinterpret_cast<char*> (&x)+2)+3;
cout<<"v1= "<<v1<<endl;
cout<<"v2= "<<v2<<endl;
cout<<"v3= "<<v3<<endl;
cout<<"v4= "<<v4<<endl<<endl;
int w1 = static_cast<int>(y)+0X0E2;
long w2 =*reinterpret_cast<long*>(&y)+1;
short w3 =*(reinterpret_cast<short*>(&y)+2);
char w4 =*(reinterpret_cast<char*>(&y)+7)+3;
cout<<"w1= "<<w1<<endl;
cout<<"w2= "<<w2<<endl;
cout<<"w3= "<<w3<<endl;
cout<<"w4= "<<w4<<endl;
}
Результат виконання програми:
Рис1. Ескіз вікна з результатом виконання програми
Висновок: в даній лабораторній роботі я навчився явно і неявно перетворювати типи даних.