
- •Курсова робота з дисципліни «Програмування. Частина ііі. Структури даних та алгоритми»
- •Завдання на курсову роботу
- •Теоретична частина
- •1.1 Базові типи даних
- •1.1.1 Логічний тип даних
- •1.1.2 Символьні типи даних
- •1.1.3 Цілочисельні типи даних
- •1.1.4 Дійсні типи даних
- •1.2 Похідні типи даних
- •1.2.1 Тип даних «Рядок»
- •1.2.2 Тип даних «Перерахування» («Перелік»)
- •1.2.3 Тип даних «Масив»
- •1.2.4 Тип даних «Структура»
- •1.2.5 Тип даних «Об’єднання»
- •Система тестів
- •3.1 Базові типи даних
- •3.2 Похідні типи даних
- •3.2.1 Рядок символів
- •3.2.2 Переліки
- •3.2.3 Масив
- •3.2.4 Структура
- •3.2.5 Об’єднання
- •Результати виконання програми
- •Висновки
- •Додатки
3.2.4 Структура
struct str6 {
unsigned long e:3;
unsigned long :2;
short :2;
signed short d;
unsigned :7;
double a;
short b:7;
char f;
char c[9];
}str;
str.a = 22.198;
str.b = 5 580;
str.c[0] = ‘K’
str.c[1] = ‘i’
str.c[2] = ‘n’
str.c[3] = ‘d’
str.c[4] = ‘r’
str.d =240 660;
str.e =7 128;
str.f = 7;
Структура, полям якої не присвоєно ніяких значень має всі байти однаковими і їх початковим значенням є число 11002 = С16, тому це може впливати на відображення певних полів при виводі зображення структури в пам’яті.
Визначимо представлення в пам'яті комп’ютера окремо кожного поля:
Представлення кожного поля в пям’яті комп’ютера:
-
Представлення дійсної змінної : double а = 22.19810;
Назва типу |
Іденти-фікатор |
Діапазон значень |
Внутрішній формат: s–знак,e–експонента,m–мантиса |
Значення числа |
Розмір пам’яті в байтах |
|||||
Дійсне подвійної точності |
double |
від 1.7 до
1.7 |
1 біт 11 біт 52 біта
|
(-1)S |
8 |
Перевід цілої частини:
2210 =>1616
Перевід дробової частини:
0,198 * 16 = 3.168 3
0,168 * 16 = 2,688 2
0.688 * 16 = 11,008 B
0.008 * 16 = 0,128 0
0.128 * 16 = 2,048 2
0.048 * 16 = 0,768 0
0.768 * 16 = 12,288 C
0.288 * 16 = 4,608 4
0.608 * 16 = 9,728 9
0.728 * 16 = 11,648 B
0.648 * 16 = 10,368 A
0.368 * 16 = 5,888 5
0.888 * 16 = 14,208 D
=0001 0110,0011 0010 1011 0000 0010 0000 1100 0100 1001 1011 1010 0101 11012
Нормалізація:
1.0110 0011 0010 1011 0000 0010 0000 1100 0100 1001 1011 1010 0101 11012* 100100
Заокруглення:
1.0110
0011 0010 1011 0000 0010 0000 1100 0100 1001 1011 1010 0101| 1101+
1
1.0110 0011 0010 1011 0000 0010 0000 1100 0100 1001 1011 1010 0110
Визначення мантиси: m=0110 0011 0010 1011 0000 0010 0000 1100 0100 1001 1011 1010 0110
Визначення зміщеного порядку: е = 102310 + 410 = 102710 = 40316 = 100 0000 00112
Визначення знакового розряду: s=0 (бо число додатнє).
Схема внутрішнього представлення:
Збірка за схемою:
s |
e |
M |
0 |
100 0000 0011 |
0110 0011 0010 1011 0000 0010 0000 1100 0100 1001 1011 1010 0110 |
В 16- ковій системі числення:
0100 0000 0011 0110 0011 0010 1011 0000 0010 0000 1100 0100 1001 1011 1010 01102=
= 40 36 32 B0 20 C4 9B A616
Відповідь: ВПК :A6 9B C4 20 B0 32 36 4016.
-
Представлення змінної short b 5 580;
b = 5 58010 = 15 CC16
Відповідь: ВПК : CC 1516.
Представлення змінної char c[5]: str.c[0] = ‘K’ = 4B16
str.c[1] = ‘i’ = 6916
str.c[2] = ‘n’ = 6E16
str.c[3] = ‘d’ = 6416
str.c[4] = ‘r’ = 7216
В пам’яті комп’ютера рядок зберігатиметься як: Відповідь: ВПК : 4B 69 6E 64 71 CC CC CC CC16.
-
Представлення змінної signed short d; d = 240 66010 = 3 AC 1416 = 1010 1100 0001 01002 = AC 1416
Відповідь: ВПК : 14 AC16.
-
Представлення змінної char f;
f =710= 716
Відповідь: ВПК : 0716.
-
Представлення змінної unsigned long e:3
e= 7 12810 = 1B D8;
оскільки виділено тільки 3 біти під змінну то вона набуде значення 0002
Відповідь: ВПК :016
Для розміщення даної структури в пам’яті комп’ютера вистачає 21 байт
struct str12 {
char :3;
float a;
int b:9;
unsigned e:3;
long d;
unsigned :2;
char c[8];
wchar_t f;
}str;
В і д п о в і д ь : В П К :
C8 CC CC CC CC CC 14 AC CC CC CC CC CC CC CC CC A6 9B C4 20 B0 32 36 40 CC CC 07 4B 69 6E 64 72 CC CC CC CC CC CC CC CC