Міністерство освіти і науки, молоді та спорту України
Національний університет „Львівська політехніка”
Звіт
з лабораторної роботи № 2
з дисципліни: “Програмування (частина 3)”
на тему: “ Перетворення типів даних ”
Варіант [1,1] (v5 , w6 , v0 , w1)
Мета роботи: Дослідження методів та засобів явного і неявного перетворення типів даних.
Постановка задачі: Дослідити методи та засоби явного і неявного перетворення типів даних. Розробити алгоритм розв’язання задачі, і підтвердити роботу алгоритму програмною реалізацією.
Завдання 1
Алгоритм розв’язання задачі:
#include <stdio.h>
#include <conio.h>
int main()
{
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;
type_0 x0=0; // замість № підставити значення: DN % 9
type_0 x1=9; // замість № підставити значення: DN % DN
type_0 x2=2; // замість № підставити значення: MN % 9
type_9 x3=3; // замість № підставити значення: MN % 13
type_0 x4=4; // замість № підставити значення: (DN * MN) % 9
type_9 x5=5; // замість № підставити значення: DN % 12
type_0 x6=6; // замість № підставити значення: MN % 3
type_9 x7=7; // замість № підставити значення: (DN * MN) % 12
type_9 x8=8; // замість № підставити значення: DN % 13
type_3 x9=9; // замість № підставити значення: MN % 6
type_9 x10=10; // замість № підставити значення: (DN * MN) % 10
type_0 x11=11; // замість № підставити значення: DN % 3
x1 = x1 - 0xFFFFFFFA;
x3 = 'a' + x0 - x2;
x7 = x4 + x5 + x6 * 0.1;
x8 = x9 + x10 - x11 * 10;
printf("x0: ");
unsigned char *vx0 = (unsigned char *)(&x0);
for (int i = 0; i < sizeof(x0); i++)
printf("%02X ", vx0[i]);
printf("\n");
printf("x1: ");
unsigned char *vx1 = (unsigned char *)(&x1);
for (int i = 0; i < sizeof(x1); i++)
printf("%02X ", vx1[i]);
printf("\n");
printf("x2: ");
unsigned char *vx2 = (unsigned char *)(&x2);
for (int i = 0; i < sizeof(x2); i++)
printf("%02X ", vx2[i]);
printf("\n");
printf("x3: ");
unsigned char *vx3 = (unsigned char *)(&x3);
for (int i = 0; i < sizeof(x3); i++)
printf("%02X ", vx3[i]);
printf("\n");
printf("x4: ");
unsigned char *vx4 = (unsigned char *)(&x4);
for (int i = 0; i < sizeof(x4); i++)
printf("%02X ", vx4[i]);
printf("\n");
printf("x5: ");
unsigned char *vx5 = (unsigned char *)(&x5);
for (int i = 0; i < sizeof(x5); i++)
printf("%02X ", vx5[i]);
printf("\n");
printf("x6: ");
unsigned char *vx6 = (unsigned char *)(&x6);
for (int i = 0; i < sizeof(x6); i++)
printf("%02X ", vx6[i]);
printf("\n");
printf("x7: ");
unsigned char *vx7 = (unsigned char *)(&x7);
for (int i = 0; i < sizeof(x7); i++)
printf("%02X ", vx7[i]);
printf("\n");
printf("x8: ");
unsigned char *vx8 = (unsigned char *)(&x8);
for (int i = 0; i < sizeof(x8); i++)
printf("%02X ", vx8[i]);
printf("\n");
printf("x9: ");
unsigned char *vx9 = (unsigned char *)(&x9);
for (int i = 0; i < sizeof(x9); i++)
printf("%02X ", vx9[i]);
printf("\n");
printf("x10: ");
unsigned char *vx10 = (unsigned char *)(&x10);
for (int i = 0; i < sizeof(x10); i++)
printf("%02X ", vx10[i]);
printf("\n");
printf("x11: ");
unsigned char *vx11 = (unsigned char *)(&x11);
for (int i = 0; i < sizeof(x11); i++)
printf("%02X ", vx11[i]);
printf("\n");
getch();
return 0;
}
Результати виконання програми
Завдання 2
Алгоритм розв’язання задачі:
#include<stdio.h>
#include<conio.h>
using namespace std;
int main ()
{
const int x_4 = 0x0909;
int x = x_4;
const float y_0 = 9*9/100;
float y = y_0;
int v0=*reinterpret_cast<char*> (&x) +3;
printf("%d %x %c \n", v0,v0,v0);
int v5=*reinterpret_cast<char*> (&x) +2;
printf("%d %x %c \n\n", v5,v5,v5);
long w1 =*reinterpret_cast<long*>(&y)+33;
printf("%lx %lu %ld \n",w1,w1,w1);
short w6=*(reinterpret_cast<short*>(&y)+1)+13;
printf("%x %u %d \n", w6,w6,w6);
getch();
return 0;
}
Результати виконання програми:
Контрольні питання
1.
Оголошено змінні:
signed char sch;
unsigned char uch;
double dх;
Які неявні перетворення типів будуть виконані:
sch = uch + dx;
Виберіть зі списку справа необхідні перетворення і запишіть їх номери в порядку зростання через кому (наприклад: а,б,в).
а)short→char
б)long→char
в)int→char
г)float→char
д)double→char
е)short→int
ж)long→int
з)char→int
и)float→int
і)double→int
к)short→float
л)long→float
м)char→float
н)int→float
о)double→float
п)short→double
р)long→double
с)char→double
т)int→double
ф)float→double
Визначити результат виконання фрагменту програми. Відповідь пояснити.
2.
int x=0XC17C0000;
printf("%f",* reinterpret_cast<float*> (&x));
4.
float x=2670.05;
//2670.0510 = 0XA6E.0CCCCC16
printf("%d",*reinterpret_cast<short*> (&x));
3.
int x=0XC17C0000;
printf("%c ",* reinterpret_cast<char*> (&x)+1);
5.
float x=2670.05;
//2670.0510 = 0XA6E.0CCCCC16
printf("%d", static_cast<int> (x));
Відповіді
с)char→double
д)double→char
2. -15.750000
3. 0
4. -7987
5. 2670
Висновок
В результаті виконання лабораторної роботи я освоїв основні методи та засоби явного та неявного представлення типів даних та використав ці знання для виконання прикладних програм.