Міністерство освіти і науки,
Національний університет «Львівська Політехніка»
Кафедра ЕОМ
/
Лабораторна робота №1
з дисципліни «Програмування, частина 3(Структури даних та алгоритми)»
на тему:
«Внутрішнє представлення в пам’яті комп’ютера статичних даних базових типів»
Мета роботи: Дослідження внутрішнього представлення в пам’яті комп’ютера даних статичної структури.
Індивідуальне завдання(Частина 1.1)
(Варіант 03)
Дослідити внутрішнє представлення в пам’яті комп’ютера даних статичної структури. Розглянути основні базові і похідні типи даних:
bool b = 50;
wchar_t ch4=’н’;
unsigned short i1=300;
long double d3=-168.24e07;
Хід роботи
1. Запускаю програму на виконання.
/
Індивідуальне завдання(Частина 1.2)
(Варіант 0)
Дослідити внутрішнє представлення в пам’яті комп’ютера статичних даних базових та похідних типів. Тестування провести для заданих значень змінних.
st1 , un2 , m3
2. Запускаю програму на виконання.
/
Висновок: У цій лабораторній роботі я досліджував внутрішнє подання в пам’яті комп’ютера базових типів даних.
Текст програми:
(Частина 1.1)
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
setlocale(LC_ALL, "ukr");
bool b = 50;
unsigned char ch2='a';
unsigned i3=5160;
long double d3=-168.24e07;
cout << endl;
cout << "Представлення типу bool в пам'ятi: ";
unsigned char *vb = (unsigned char *)(&b);
for (int i = 0; i<sizeof(b); i++)
printf("%02X ", vb[i]);
printf("\n");
cout << "Представлення типу unsigned char в пам'ятi: ";
unsigned char *vch2 = (unsigned char *)(&ch2);
for (int i = 0; i<sizeof(ch2); i++)
printf("%02X ", vch2[i]);
printf("\n");
cout << "Представлення типу unsigned в пам'ятi: ";
unsigned char *vi3 = (unsigned char *)(&i3);
for (int i = 0; i<sizeof(i3); i++)
printf("%02X ", vi3[i]);
printf("\n");
cout << "Представлення типу long double в пам'ятi: ";
unsigned char *vd3 = (unsigned char *)(&d3);
for (int i = 0; i<sizeof(d3); i++)
printf("%02X ", vd3[i]);
printf("\n");
cout << endl;
system("pause");
}
(Частина 1.2)
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
setlocale(LC_ALL, "ukr");
typedef bool *vkaz;
bool b = true;
enum color {
BLUE = 2,
GREEN = BLUE + 7, // замість X підставити свій місяць народження
CYAN,
RED,
BROWN,
GRAY = RED - 24, // замість Y підставити свій день народження
YELLOW,
WHІTE = 0,
MAGENTA,
LІGHTGRAY,
DARKGRAY = -2,
BLACK
};
char m3[][2][4] = { { { 1,2,3,4 },{ 5 } },{ { 6,7 } },{ {},{ 8,9 } } };
// Для надання значень елементам масиву m3 використати одну з цифр номера мобільного
// телефону (10 цифр, починаючи з коду оператора, тобто 10 останніх цифр номера телефону):
m3[2][1][0] = 0,
m3[0][0][1] = 6,
m3[1][1][2] = 3,
m3[0][1][2] = 8,
m3[2][1][3] = 1,
m3[2][0][0] = 9,
m3[1][1][1] = 7,
m3[1][0][1] = 0,
m3[2][0][1] = 2,
m3[2][1][2] = 5;
struct str {
unsigned s1 : 2 + 1; // замість k1 підставити першу цифру дня народження
unsigned : 0;
unsigned s2 : 4 + 2; // замість k2 підставити другу цифру дня народження
unsigned : 0 + 3; // замість k3 підставити першу цифру місяця народження
unsigned s4 : 7 + 4; // замість k4 підставити другу цифру місяця народження
int s5;
} sr1 = { 1, 3, 10, 62047 }, sr2 = { 0, 2, 14, 59254 };
union {
int up1;
short up2;
double up3;
char up4[3][2];
bool up5;
color up6;
vkaz up7;
float up8;
str up9;
} un1, un2, un3, un4;
un2.up3 = 16800; // замість Z підставити значення, обчислене за формулою:
un2.up6 = BROWN; // Z = (день народження) * (місяць народження) * 100;
struct info {
char p1[11];
double p2;
short p3;
unsigned p4 : 4 + 5; // замість k1 підставити другу цифру дня народження
vkaz p5;
unsigned : 7 + 3; // замість k2 підставити другу цифру місяця народження
} st1 = { "Львiв", 25, 97,17, &b };
// замість слова "Місто" підставити назву свого
// міста або села, замість BD - номер будинку, //замість KV - номер квартири
struct {
info p1;
bool p2[3][2][3];
};
cout << "Представлення типу bool в пам'ятi: ";
unsigned char *vb = (unsigned char *)(&b);
for (int i = 0; i<sizeof(b); i++)
printf("%02X ", vb[i]);
printf("\n");
cout << endl;
cout << "Представлення типу struct в пам'ятi: ";
unsigned char *vst1 = (unsigned char *)(&st1);
for (int i = 0; i<sizeof(st1); i++)
printf("%02X ", vst1[i]);
printf("\n");
cout << endl;
cout << "Представлення типу union в пам'ятi: ";
unsigned char *vun2 = (unsigned char *)(&un2);
for (int i = 0; i<sizeof(un2); i++)
printf("%02X ", vun2[i]);
printf("\n");
cout << endl;
cout << "Представлення типу char в пам'ятi: ";
unsigned char *vm3 = (unsigned char *)(&m3);
for (int i = 0; i<sizeof(m3); i++)
printf("%02X ", vm3[i]);
printf("\n");
cout << endl;
system("pause");
}