МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра ЕОМ
"Представлення в пам’яті комп’ютера
статичних даних"
МЕТОДИЧНІ ВКАЗІВКИ
до курсової роботи (Частина 1)
з дисципліни
" Програмування. Частина III.
Структури даних та алгоритми "
для студентів напряму
6.050102 “Комп’ютерна інженерія”
Львів – 2011
Методичні вказівки до курсової роботи "Представлення в пам’яті комп’ютера статичних даних" з дисципліни “Програмування. Частина IIІ. Структури даних та алгоритми" для підготовки студентів напряму 6.050102 “Комп’ютерна інженерія” / Укл. Т.А.Матвейчук – Львів: Видавництво НУ “Львівська політехніка”, 2011 – 10 с.
Укладач: Матвейчук Т.А., ст. викладач каф.ЕОМ
Відповідальний
за випуск: Мельник А.О., д-р техн. наук, проф.
Рецензенти: Мороз І.В., ст. викладач каф.ЕОМ
Юрчак І.Ю., доцент кафедри САПР, к.т.н.
1. МЕТА РОБОТИ
Дослідження внутрішнього представлення в пам’яті комп’ютера базових та похідних типів даних статичної структури.
2. ВИМОГИ ДО ПОРЯДКУ ВИКОНАННЯ ТА ОФОРМЛЕННЯ
КУРСОВОЇ РОБОТИ
Індивідуальні завдання на курсову роботу вибираються студентом самостійно згідно з його анкетними даними. Можливі їх корегування керівником під час виконання роботи.
Виконуючи курсову роботу студент повинен розробити, відлагодити та протестувати програму на мові С++ (або іншій, узгодивши із керівником роботи) і оформити звіт.
2.1. Вимоги до оформлення програмного продукту
Роздруківки програм з необхідними коментарями виносяться в додатки. При цьому назви програмних блоків у тексті записки й відповідних фрагментів програм у додатках повинні бути однаковими.
Для оформлення роздруківки тексту програми рекомендується використовувати шрифт гарнітури Courier розміром 10 або 12 пунктів. Допустиме шрифтове виділення службових слів і синтаксичних конструкцій мови програмування. Текст програми оформляється відповідно до загальноприйнятих норм оформлення:
Кількість операторів в рядку повинна дорівнювати 1.
Всі оператори, що входять у складений оператор, повинні бути зміщені вправо на однакову кількість позицій, "Драбинка" повинна відображати структурну вкладеність мовних конструкцій. Рекомендується відступ не менше 2-х і не більше 8-і пробілів. Прийнятого відступу потрібно дотримуватись у всьому тексті програми.
Операторні дужки (тобто те, що обмежує складений оператор), що відносяться до одного блоку, повинні розташовуватися в такий спосіб: відкриваюча дужка повинна знаходитись на тому ж рядку, що й оператор, який відкриває блок, а закриваюча повинна знаходитись в тому ж стовпчику, з якого починається оператор, що відкриває блок. Допускається розташовувати відкриваючу дужку на рядку, що іде за оператором, що відкриває блок, у тому ж стовпчику, з якого починається цей оператор.
Рядок вихідного тексту програми повинен цілком розташовуватись в одному типографському рядку (до 80 символів залежно від шрифту). Недотримання цього правила говорить про занадто велику вкладеність блоків, що означає невдалий алгоритм або структуру програми. У такому випадку рекомендується переосмислити структуру програми, ввести додаткові функції, замінивши якісь більші частини коду їхніми викликами, переробити алгоритм і т.п.
Якщо синтаксис мови дозволяє, бажано відокремлювати знаки операцій пробілами від операндів. Як і у звичайному тексті, після ком повинен випливати пробіл.
Визначення функцій або логічні частини програми варто відокремлювати одна від одної порожніми рядками.
Ідентифікатори (назви змінних, типів, підпрограм) повинні бути значимими настільки, щоб читаючий текст програми міг розуміти їхній зміст без присутності поруч автора. При необхідності оголошення змінної або типу може супроводжуватися коментарем. Ідентифікатори рекомендується підбирати зі слів англійської мови.
Текст програми повинен містити коментарі, що відображають функціональне призначення того або іншого блоку програми, структуру програми. Коментарі варто писати українською мовою й по суті так, щоб програміст, що не брав участь у розробці програми (але має досвід роботи мовою С++), міг без особливих проблем розібратися в логіці програми.
Для кожної користувацької функції повинна бути описана у вигляді коментаря специфікація, що містить наступну інформацію:
призначення функції;
опис семантики параметрів, переданих у функцію, якщо вона неочевидна;
опис семантики значення, що повертається, якщо вона неочевидна.
2.2. Вимоги до оформлення звіту
Звіт має бути написана українською мовою. Він може бути надрукований або написаний від руки. В обох випадках текст має розміщуватись на одному боці аркуша паперу формату А4. Рекомендується розміщувати до 30 рядків на сторінці.
На аркушах необхідно залишити поля з усіх чотирьох боків. Розмір лівого поля - 25 мм, правого - не менше 10 мм, верхнього і нижнього - не менше 20 мм.
На аркушах, де починаються розділи, зміст, анотація, вступ, висновки, список літератури (всі ці пункти мають починатись з нової сторінки) рекомендується збільшувати розмір верхнього поля до 40 мм.
Чорнило, яким виконується робота, має бути чорним, фіолетовим чи синім .
Звіт має бути стислим, чітким, лаконічним і містити лише інформацію, яка має пряме відношення до курсової роботи.
2.3. Зміст звіту
I. Оформити титульну сторінку звіту стандартного зразка, на якій обов’язково показати процес знаходження номерів варіантів індивідуальних завдань.
II. В звіті мають бути відображені наступні пункти:
Завдання на курсову роботу
Зміст
Вступ
Теоретична частина
Алгоритм розв’язання задачі.
Система тестів
Завдання 1: Внутрішні формати базових типів
3.1.1. Логічний тип
3.1.2. Символьний тип
3.1.3. Цілий тип
3.1.4. Дійсний тип
Завдання 2: Внутрішні формати похідних типів
3.2.1. Рядок символів
3.2.2. Перерахування
3.2.3. Масив
3.2.4. Структура
3.2.5. Об'єднання
Результати виконання програми
Висновки
Список літератури
Додатки
IIІ. Змістовне наповнення пунктів:
Завдання на розрахункову роботу має містити індивідуальні завдання зі своїми конкретними значеннями.
У вступі має надаватись коротка характеристика задач, їх місце і значення в тих галузях, до яких вони мають відношення.
В теоретичній частині мають наводитись всі теоретичні дані, які необхідні для розробки алгоритму.
В пункті система тестів наводяться основні ручні розрахунки.
Результати виконання програми мають містити роздруковані копії екранів з результатами.
В додатках розміщуються тексти програм з коментарями.
Текст розділів може розділятися на підрозділи, пункти і підпункти. Розділи повинні нумеруватися арабськими цифрами в межах всієї записки. Зміст, вступ, висновки, список літератури і додатки не нумеруються.
Підрозділи необхідно нумерувати арабськими цифрами в межах кожного розділу. Номер підрозділу складається з номера розділу і номера підрозділу, розділених крапкою. Наприклад: "3.1." (перший параграф третього розділу). Пункти (якщо вони використовуються) нумеруються аналогічно. Наприклад: "3.1.2." (другий пункт першого параграфу третього розділу).
Нумерація сторінок має бути наскрізною: першою сторінкою є титульна сторінка, другою - завдання, третьою - анотація і т.д. Номер сторінки проставляється у верхньому правому куті. На сторінках 1 (титульна сторінка), 2 (завдання) і 3 (перша сторінка змісту) номер сторінки не пишеться.
3. ВАРІАНТИ ЗАВДАНЬ
3.1. Завдання 1
Визначити внутрішнє представлення в пам’яті комп’ютера даних базових типів. Розглянути основні прості (цілі, дійсні, символьні, логічні) типи даних:
bool b;
char ch1;
unsigned char ch2;
signed char ch3;
wchar_t ch4;
unsigned short i1;
short i2;
unsigned i3;
int i4;
unsigned long i5;
long i6;
float d1;
double d2;
long double d3;
Вибір варіанту індивідуального завдання:
Вибрати в таблиці номер варіанту і назви змінних для дослідження:
(день народження студента) % 6
(місяць народження студента) % 5
Варіанти
0
1
2
3
4
5
0
b,ch1,i4,d1
b,ch1,i1,d2
b,ch1,i2,d3
b,ch1,i1,d1
b,ch1,i3,d2
b,ch1,i5,d3
1
b,ch1,i3,d3
b,ch2,i4,d2
b,ch2,i6,d1
b,ch2,i4,d3
b,ch2,i1,d2
b,ch2,i1,d1
2
b,ch2,i3,d3
b,ch2,i5,d2
b,ch3,i3,d1
b,ch3,i1,d3
b,ch3,i2,d2
b,ch3,i4,d1
3
b,ch3,i5,d2
b,ch3,i6,d2
b,ch3,i6,d3
b,ch3,i1,d2
b,ch4,i3,d2
b,ch4,i5,d1
4
b,ch4,i6,d3
b,ch4,i1,d2
b,ch4,i6,d1
b,ch4,i4,d2
b,ch4,i3,d3
b,ch4,i2,d2
Примітка: Варіанти міняються від (0,0) до (4,5), де перша цифра - номер рядка, друга - номер стовбця, наприклад, якщо дата народження студента 11.03.1989, то він має виконувати варіант (3,5), тобто досліджувати такі змінні: b,ch4,i5,d1
Тестування провести для наступних значень змінних:
b = (день народження * 5) % 10 * місяць народження;
Для надання значень символьним змінним використати одну з літер Прізвища (латинські літери, перша - велика, решта - малі). Якщо прізвище містить менше трьох літер, то замість відсутніх символів записати нулі.
ch1 = перша літера;
ch2 = друга літера;
ch3 = третя літера;
ch4 = остання літера;
i1 = день народження * 125 ;
i2 = – i1;
i3 = день народження * 215 ;
i4 = – i3;
i5 = день народження * 352 ;
i6 = – i5;
Для надання значень дійсним змінним використати такі позначення:
X – день народження, Y – місяць народження, Z = X * Y;
d1 = – Z . X e – Y;
d2 = Z . X e + Y;
d3 = – Z . X e Y;
3.2. Завдання 2
Визначити внутрішнє представлення в пам’яті комп’ютера даних похідних типів.
3.2.1. Представлення рядків символів
Визначити представлення в пам’яті комп’ютера рядків символів.
Вибір варіанту індивідуального завдання:
№ варіанта = (((день народження * номер будинку) % номер квартири) *
* місяць народження + номер будинку) % 30
Тестування провести для наступних значень змінних
Оголосити рядок символів і ініціалізувати його згідно наведеній нижче таблиці. Після цього виконати деякі переприсвоювання, задані після таблиці.
Варіант
Завдання
char *string0 = "he\xaaw\34\\""d\vf23\xfe\1e\xfjf";
char *string1 = "34yf\x3""25\v\\9\6\4\\""24ffh5";
char *string2 = "hfsd\xc\x13\\d\65\x14""fht\"""\\\"";
char *string3 = "efg\\""""\x22\2!34\4\?545\\\\\"\'f\\df";
char *string4 = "gh\\\njdk\x44\\f\v\?''2%4df";
char *string5 = "35j\5\x4 3y\34d df\\""'4""\n";
char *string6 = "\xdf' '||'f'34((75""""dvfwg6""'\vd";
char *string7 = "\v\n\t\\\?\x45\\\67""\\\\x34df" """\?";
char *string8 = "1205\x3\?dfd\v""""\n34\n\\t\x4[f""";
char *string9 = "34\xe5\\\\\\v3\x4g5\xdfvdfw""""f";
char *string10 = "fsggg4\x11 4vv\vnn n\"df""\\\?6\6";
char *string11 = "\v\nfff\nf\\\?\nnn3445\3 4\2pk[";
char *string12 = "erjf\45\\h\54\x3\\nn\\f\xf\n" """gh";
char *string13 = "f\33\\\\gf\xfag\5 \n\\v""hello\"?\?""";
char *string14 = "\x54x4\54fd3\4\b54fg\v\b5%\n\\v";
char *string15 = "\xabn\\\n\v""abcde""vnsc6\x23";
char *string16 = "hello\x12\22"" " "123*\\n\n\v";
char *string17 = "\x34\\fdg\v\n3""""\\fh2l\\v\\""";
char *string18 = "143%\\\b\\wf\n\v""""df""'df '\x2";
char *string19 = "\xcb\34\\\xffh 12 \4d4\\\\\n";
char *string20 = "\x23\1\34t5\n\n\\\\v\v\\n""]*\\A""";
char *string21 = "75\45\vcv\\\\nje_3\\\\n\v\t\23' ' ";
char *string22 = "\x33" "eef4f\\n\v\tdx\\xff]\4";
char *string23 = "14&\\n\\\n\\v\b\x33\\x344\3hw3\3";
char *string24 = "\\x\\n\33\x34\3hello3" "\\\"12\12";
char *string25 = "\6h3\x24\4 " " fdf\xf\\df\\\\v\n\\\n";
char *string26 = "\x22\33\x4\\vv\\\\bnn\n57!\\n";
char *string27 = "\\x3\x34\1j\\de\\\n\\w2" "\\n24%";
char *string28 = "\\xahe\\n\\n\v\b\22\\3\x34""f";
char *string29 = "\6h3 \34\x53\\\nahaabc\xbcxbc\\";
Для кожного варіанту виконати наступні переприсвоювання:
string№ [0] = символ, що відповідає 3 цифрі номера мобільного телефона;
string№ [2] = символ, що відповідає 4 цифрі номера мобільного телефона;
string№ [4] = символ, що відповідає 5 цифрі номера мобільного телефона;
string№ [6] = символ, що відповідає 6 цифрі номера мобільного телефона;
string№ [8] = символ, що відповідає 7 цифрі номера мобільного телефона;
string№ [10] = символ, що відповідає 8 цифрі номера мобільного телефона;
string№ [12] = символ, що відповідає 9 цифрі номера мобільного телефона;
string№ [14] = символ, що відповідає 10 цифрі номера мобільного телефона;
де № – номер варіанту.
Наприклад: для студента з номером варіанту 0 і номером мобільного телефона 0671234567 треба виконати такі присвоюння:
char *string0 = "he\xaaw\34\\""d\vf23\xfe\1e\xfjf";
string0 [0] = '7';
string0 [2] = '1';
string0 [4] = '2';
string0 [6] = '3';
string0 [8] = '4';
string0 [10] = '5';
string0 [12] = '6';
string0 [14] = '7';
В результаті рядок символів набуде такого вигляду:
char *string0 = "7e1w2\\3\v425\xfe6e7jf ";
3.2.2. Представлення переліків
Визначити представлення в пам’яті комп’ютера переліків.
Вибір варіанту індивідуального завдання:
№ варіанта = ((день народження + номер будинку) * (номер квартири + місяць народження)) % 30
Тестування провести для наступних значень змінних:
Оголосити три змінні перелікового типу і надати їм значення згідно наведеній нижче таблиці.
№ ва-ріанта
Завдання
№ ва-ріанта
Завдання
№ ва-ріанта
Завдання
0
enum color0 {
BLUE,
GREEN,
CYAN,
RED = 11,
BROWN,
GRAY,
YELLOW = -2,
WHІTE,
MAGENTA,
LІGHTGRAY,
DARKGRAY = 0,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
10
enum color10 {
BLUE,
GREEN,
CYAN,
RED,
BROWN,
GRAY = 1,
YELLOW,
WHІTE,
MAGENTA,
LІGHTGRAY,
DARKGRAY = -2,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
20
enum color20 {
BLUE,
GREEN,
CYAN = 1,
RED,
BROWN,
GRAY,
YELLOW = -9,
WHІTE,
MAGENTA,
LІGHTGRAY,
DARKGRAY = 0,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
1
enum color1 {
BLUE,
GREEN = -5,
CYAN,
RED,
BROWN,
GRAY,
YELLOW,
WHІTE,
MAGENTA = 3,
LІGHTGRAY,
DARKGRAY,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
11
enum color11 {
BLUE,
GREEN = 11,
CYAN,
RED,
BROWN = 9,
GRAY,
YELLOW,
WHІTE,
MAGENTA,
LІGHTGRAY = -6,
DARKGRAY,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
21
enum color21 {
BLUE,
GREEN,
CYAN,
RED,
BROWN = 6,
GRAY,
YELLOW = -6,
WHІTE,
MAGENTA,
LІGHTGRAY,
DARKGRAY,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
2
enum color2 {
BLUE,
GREEN,
CYAN,
RED,
BROWN = 0,
GRAY,
YELLOW,
WHІTE,
MAGENTA,
LІGHTGRAY = 1,
DARKGRAY,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
12
enum color12 {
BLUE,
GREEN,
CYAN = 0,
RED,
BROWN,
GRAY,
YELLOW = 8,
WHІTE,
MAGENTA,
LІGHTGRAY,
DARKGRAY,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
22
enum color22 {
BLUE,
GREEN = -1,
CYAN,
RED = -3,
BROWN,
GRAY = -5,
YELLOW,
WHІTE,
MAGENTA,
LІGHTGRAY,
DARKGRAY,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
3
enum color3 {
BLUE = 2,
GREEN,
CYAN,
RED,
BROWN,
GRAY = -3,
YELLOW,
WHІTE,
MAGENTA,
LІGHTGRAY,
DARKGRAY,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
13
enum color13 {
BLUE,
GREEN = 2,
CYAN,
RED,
BROWN,
GRAY = 1,
YELLOW,
WHІTE,
MAGENTA,
LІGHTGRAY,
DARKGRAY,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
23
enum color23 {
BLUE = 1,
GREEN = 3,
CYAN,
RED = 0,
BROWN,
GRAY,
YELLOW,
WHІTE,
MAGENTA,
LІGHTGRAY,
DARKGRAY,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
4
enum color4 {
BLUE,
GREEN,
CYAN = 9,
RED,
BROWN,
GRAY,
YELLOW = -1,
WHІTE,
MAGENTA,
LІGHTGRAY,
DARKGRAY = 2,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
14
enum color14 {
BLUE,
GREEN,
CYAN,
RED = 0,
BROWN,
GRAY,
YELLOW = -1,
WHІTE,
MAGENTA,
LІGHTGRAY,
DARKGRAY,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
24
enum color24 {
BLUE,
GREEN,
CYAN = 3,
RED,
BROWN,
GRAY = -2,
YELLOW,
WHІTE,
MAGENTA = 1,
LІGHTGRAY,
DARKGRAY,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
5
enum color5 {
BLUE,
GREEN,
CYAN,
RED = 3,
BROWN,
GRAY = 2,
YELLOW,
WHІTE = 0,
MAGENTA,
LІGHTGRAY,
DARKGRAY,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
15
enum color15 {
BLUE,
GREEN,
CYAN,
RED,
BROWN = 3,
GRAY,
YELLOW,
WHІTE = 2,
MAGENTA,
LІGHTGRAY,
DARKGRAY,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
25
enum color25 {
BLUE,
GREEN = 0,
CYAN,
RED,
BROWN,
GRAY = 0,
YELLOW,
WHІTE,
MAGENTA = 0,
LІGHTGRAY,
DARKGRAY,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
6
enum color6 {
BLUE,
GREEN,
CYAN = -1,
RED,
BROWN,
GRAY = -2,
YELLOW,
WHІTE = 0,
MAGENTA,
LІGHTGRAY,
DARKGRAY,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
16
enum color16 {
BLUE,
GREEN,
CYAN,
RED = 0,
BROWN,
GRAY,
YELLOW,
WHІTE = 8,
MAGENTA,
LІGHTGRAY,
DARKGRAY,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
26
enum color26 {
BLUE,
GREEN = 2,
CYAN,
RED,
BROWN,
GRAY = 2,
YELLOW,
WHІTE,
MAGENTA,
LІGHTGRAY,
DARKGRAY = -2,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
7
enum color7 {
BLUE,
GREEN = 7,
CYAN = 3,
RED,
BROWN,
GRAY,
YELLOW = 3,
WHІTE,
MAGENTA,
LІGHTGRAY,
DARKGRAY,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
17
enum color17 {
BLUE,
GREEN,
CYAN,
RED,
BROWN,
GRAY = -7,
YELLOW,
WHІTE,
MAGENTA,
LІGHTGRAY = -6,
DARKGRAY,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
27
enum color27 {
BLUE,
GREEN,
CYAN = 5,
RED,
BROWN,
GRAY,
YELLOW = -5,
WHІTE,
MAGENTA = 2,
LІGHTGRAY,
DARKGRAY,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
8
enum color8 {
BLUE,
GREEN = 0,
CYAN,
RED,
BROWN,
GRAY,
YELLOW,
WHІTE = -4,
MAGENTA,
LІGHTGRAY,
DARKGRAY,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
18
enum color18 {
BLUE = -2,
GREEN,
CYAN,
RED,
BROWN,
GRAY = 9,
YELLOW,
WHІTE,
MAGENTA,
LІGHTGRAY,
DARKGRAY,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
28
enum color28 {
BLUE,
GREEN = -3,
CYAN,
RED,
BROWN = -3,
GRAY,
YELLOW = -3,
WHІTE,
MAGENTA,
LІGHTGRAY,
DARKGRAY,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
9
enum color9 {
BLUE = 6,
GREEN,
CYAN = 9,
RED,
BROWN,
GRAY,
YELLOW = -1,
WHІTE,
MAGENTA,
LІGHTGRAY,
DARKGRAY,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
19
enum color19 {
BLUE,
GREEN,
CYAN,
RED,
BROWN = 0,
GRAY,
YELLOW,
WHІTE = 2,
MAGENTA,
LІGHTGRAY,
DARKGRAY,
BLACK = -3
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
29
enum color29 {
BLUE,
GREEN,
CYAN,
RED = 9,
BROWN,
GRAY,
YELLOW = 12,
WHІTE,
MAGENTA,
LІGHTGRAY = 0,
DARKGRAY,
BLACK
} c1= CYAN,
c2= BROWN,
c3= DARKGRAY;
3.2.3. Представлення масивів
Визначити представлення в пам’яті комп’ютера масивів.
Вибір варіанту індивідуального завдання:
№ варіанта = (номер будинку * 10 + номер квартири * місяць народження) % 30
Тестування провести для наступних значень змінних:
Оголосити масив та ініціалізувати його згідно наведеній нижче таблиці. Після цього виконати деякі переприсвоювання, задані після таблиці.
Варіант
Завдання
char array0[][3][2] = {{'1',2}, {4}, {'3',5}}
short array1[][2][3] = {{1,2}, {'7'}}
unsigned short array2[][4][3] = {23,4,3,'4'}
char array3[][2][3] = {{'0',3}, {3,43,3}}
char array4[][3][3] = {{3,25,0}, false, true, {true,}, 11,34}
wchar_t array5[][2][3] = {{2,3,'4'}, {}, {234,336}}
wchar_t array6[][3][2] = {{2,'3'}, 24, 234}
short array7[][3][2] = {{3,45,5},{1,2,69}}
unsigned short array8[][2][3] = {{23,3,6}, {255}}
unsigned char array9[][3][3] = {{43,'3', 24}, {39,6}}
wchar_t array10[][3][2] = {{1,123}, {23,'4', true}}
unsigned short array11[][2][4] = {{2,2,232}, '2','/'}
char array12[][2][3] = {{2,56}, {6,}, {{3,8,1}}}
unsigned char array13[][2][5] = {{1,4},657,23,533}
unsigned short array14[][3][2] = {{2}, {'*', 234}, {2,5}}
char array15[][2][3] = {3,45,7,6,4,'3', {}, {}}
char array16[][4][4] = {{3,5,'^', '3', 2,5}}
char array17[][3][2] = {{1,512}, {4,76,2}, {'3',5}}
wchar_t array18[][3][2] = {{7,6,}, {234,56}}
char array19[][3][2] = {{17,']', 213}, {false}}
short array20[][3][2] = {{7,'6',}, {234,56}}
unsigned short array21[][3][2] = {{{}, 15,2,8,5}, {}, 34}
char array22[][3][3] = {{'d',1,4}, {{12,}}}
char array23[][4][2] = {{4,0,23,false, true,}, {{}, {32, true}}}
wchar_t array24[][3][2] = {{'0', '/', 23}, {4,}}
char array25[][4][3] = {{6,74,5,{}}}
short array26[][3][3] = {{24,6},{34,56,'4'}}
unsigned char array27[][3][2] = {{4,6,32,3,44,}, {32,4}}
short array28[][1][5] = {{22,}, {3547,'6','56',}}
short array29[][3][2] = {{1,2}, 3,92,65};
Для кожного варіанту виконати наступні переприсвоюння:
1-ий елемент масиву = (1-ша цифра номера мобільного телефона) * (на день народження);
2-ий елемент масиву = (2-га цифра номера мобільного телефона) * (на день народження);
3-ий елемент масиву = (3-тя цифра номера мобільного телефона) * (на день народження);
4-ий елемент масиву = (4-та цифра номера мобільного телефона) * (на день народження);
5-ий елемент масиву = (5-та цифра номера мобільного телефона) * (на день народження);
6-ий елемент масиву = (6-та цифра номера мобільного телефона) * (на день народження);
7-ий елемент масиву = (7-ма цифра номера мобільного телефона) * (на день народження);
8-ий елемент масиву = (8-ма цифра номера мобільного телефона) * (на день народження);
9-ий елемент масиву = (9-та цифра номера мобільного телефона) * (на день народження);
10-й елемент масиву = (10-та цифра номера мобільного телефона) * (на день народження);
Наприклад: для студента з номером варіанту 0, номером мобільного телефона 0671234567 та датою народження 02.11.1981 треба
виконати такі присвоюння:
char array0[][3][2] = {{'1',2}, {4}, {'3',5}};
array0[0][0][0] = 0; // 0 * 2 = 0
array0[0][0][1] = 12; // 6 * 2 = 12
array0[0][1][0] = 14; // 7 * 2 = 14
array0[0][1][1] = 2; // 1 * 2 = 2
array0[0][2][0] = 4; // 2 * 2 = 4
array0[0][2][1] = 6; // 3 * 2 = 6
array0[1][0][0] = 8; // 4 * 2 = 8
array0[1][0][1] = 10; // 5 * 2 = 10
array0[1][1][0] = 12; // 6 * 2 = 12
array0[1][1][1] = 14; // 7 * 2 = 14
В результаті масив набуде такого вигляду:
array0[0][0][0] = 0; array0[0][0][1] = 12;
array0[0][1][0] = 14; array0[0][1][1] = 2;
array0[0][2][0] = 4; array0[0][2][1] = 6;
array0[1][0][0] = 8; array0[1][0][1] = 10;
array0[1][1][0] = 12; array0[1][1][1] = 14;
array0[1][2][0] = 0; array0[1][2][1] = 0;
array0[2][0][0] = '3'; array0[2][0][1] = 5;
array0[2][1][0] = 0; array0[2][1][1] = 0;
array0[2][2][0] = 0; array0[2][2][1] = 0;
3.2.4. Представлення структур
Визначити представлення в пам’яті комп’ютера структур.
Вибір варіанту індивідуального завдання:
№ варіанта = (день народження * 3 * номер квартири +
+ (місяць народження % 3) * номер будинку) % 30
Тестування провести для наступних значень змінних:
Оголосити структуру згідно наведеній нижче таблиці. Після цього надати всім елементам структури певні значення, задані після таблиці.
№ ва-ріанта
Завдання
№ ва-ріанта
Завдання
№ ва-ріанта
Завдання
0
struct str0 {
long d;
double a;
char c[5];
unsigned : 2;
unsigned :5;
unsigned e:3;
unsigned b:3;
unsigned :0;
wchar_t f;
}str;
10
struct str10 {
short :10;
char c[8];
long :12;
short b:8;
unsigned e:3;
float a;
char f;
unsigned long d;
}str;
20
struct str20 {
unsigned char :8;
long b:7;
short d;
char c[8];
unsigned e:2;
wchar_t f;
long double a;
}str;
1
struct str1 {
float a;
unsigned b:11;
unsigned :0;
char c[5];
unsigned short d;
unsigned :0;
unsigned e:7;
wchar_t f;
}str;
11
struct str11 {
float a;
unsigned long d;
int b:4;
unsigned char :3;
unsigned char :0;
char :7;
unsigned e:3;
char c[7];
wchar_t f;
}str;
21
struct str21 {
long double a;
long b:7;
char c[5];
int :5;
short d;
unsigned e;
wchar_t f;
}str;
2
struct str2 {
unsigned :5;
char c[5];
unsigned b:2;
unsigned : 4;
unsigned short :9;
unsigned :0;
unsigned e:3;
double a;
short d;
char f;
}str;
12
struct str12 {
char :3;
float a;
int b:9;
unsigned e:3;
long d;
unsigned :2;
char c[8];
wchar_t f;
}str;
22
struct str22 {
unsigned e:2;
int b:3;
char c[10];
wchar_t f;
long d : 11;
signed short: 8;
long double a;
}str;
3
struct str3 {
double a;
unsigned e:6;
int d;
unsigned b:5;
unsigned :3;
char c[7];
wchar_t f;
}str;
13
struct str13 {
float a;
signed :3;
long b;
unsigned e:3;
unsigned :8;
char c[7];
short d;
wchar_t f;
unsigned :12;
}str;
23
struct str23 {
unsigned b:7;
char c[6];
unsigned char :5;
unsigned e : 3;
char f;
long d;
long double a;
}str;
4
struct str4 {
double a;
unsigned long e:12;
char c[10];
wchar_t f;
char d;
unsigned :0;
unsigned b:7;
long :13;
}str;
14
struct str14 {
unsigned e:3;
float a;
unsigned short b:4;
unsigned short :0;
unsigned long d;
char c[6];
signed :5;
long :2;
char f;
}str;
24
struct str24 {
char c[7];
long b:3;
short :4;
short e;
long d;
unsigned :12;
long double a;
char f;
}str;
5
struct str5 {
signed short d;
unsigned :0;
short b:7;
unsigned long e:12;
wchar_t f;
unsigned long :2;
double a;
char c[11];
}str;
15
struct str15 {
signed :3;
float a;
unsigned :12;
wchar_t f;
long b:2;
short d;
int e;
char c[7];
}str;
25
struct str25 {
int b:4;
long d;
char c[9];
unsigned :0;
unsigned long e : 13;
long double a;
char f;
}str;
6
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;
16
struct str16 {
signed :11;
short b:3;
long :3;
char c[8];
unsigned e;
float a;
unsigned :2;
char f;
long d;
}str;
26
struct str26 {
short b;
short: 4;
char c[11];
char f;
unsigned short :5;
long d;
long double a;
short e;
}str;
7
struct str7 {
signed short d;
double a;
char c[7];
unsigned long b:3;
long :0;
unsigned e:3;
char f;
short :2;
}str;
17
struct str17 {
wchar_t f;
float a;
short b:9;
char c[9];
long d;
long :3;
char e:4;
signed :11;
long :5;
}str;
27
struct str27 {
long double a;
unsigned :0;
unsigned short :8;
unsigned long b:17;
short e;
long d;
char f;
char c[8];
}str;
8
struct str8 {
unsigned e:3;
double a;
short b:8;
char c[6];
signed short d;
char :7;
unsigned :3;
char f;
long :3;
}str;
18
struct str18 {
float a;
unsigned e:6;
signed long b:9;
char c[10];
short d;
long :3;
wchar_t f;
signed :4;
}str;
28
struct str28 {
long double a;
unsigned e :11;
unsigned long b:17;
unsigned :0;
unsigned: 1;
wchar_t f;
long d;
char c[8];
}str;
9
struct str9 {
char c[5];
double a;
int :12;
unsigned long d;
short b:8;
char f;
char :7;
unsigned :3;
unsigned short e:5;
}str;
19
struct str19 {
long :5;
float a;
unsigned long b;
char c[5];
short d;
unsigned e:6;
unsigned: 0;
unsigned: 2;
wchar_t f;
}str;
29
struct str29 {
long double a;
unsigned :0;
long b:5;
char c[5];
unsigned short :7;
short d :14;
wchar_t f;
unsigned short e:7;
}str;
Для кожного варіанту виконати надання значень елементам структури :
str.a = D.DM; // замість D підставити свій день народження
// замість DM підставити значення, що дорівнює
// добутку дня народження на місяць народження
str.b = BD * KV * 124;; // замість BD підставити номер свого будинку
// замість KV підставити номер своєї квартири
Для надання значень елементам масиву str.c використати одну з літер Прізвища (латинські літери, перша - велика, решта - малі). Якщо прізвище містить менше 5 літер, то замість відсутніх символів присвоїти нулі.
str.c[0] = перша літера;
str.c[1] = друга літера;
str.c[2] = третя літера;
str.c[3] = четверта літера;
str.c[4] = п'ята літера;
str.d = 764 * BD * Х; // замість BD підставити номер свого будинку
// замість Х підставити шосту з кінця цифру номера
// мобільного телефона
str.e = DN * MN * 36; // замість DN підставити свій день народження
// замість MN підставити свій місяць народження
str.f = Y; // замість Y підставити останню цифру номера
// мобільного телефона
3.2.5. Представлення об'єднань
Визначити представлення в пам’яті комп’ютера об'єднань.
Вибір варіанту індивідуального завдання:
№ варіанта = (день народження + місяць народження + номер квартири * номер будинку +
+ день народження * місяць народження) % 30
Тестування провести для наступних значень змінних:
Оголосити об'єднання згідно наведеній нижче таблиці. Після цього надати деяким елементам об'єднання початкові значення, задані після таблиці.
№ ва-ріанта
Завдання
№ ва-ріанта
Завдання
0
union un0 {
int b;
float e;
unsigned short c;
struct {
double d;
wchar_t a[7];
};
} un;
15
union un15 {
struct {
float f[2];
wchar_t a[10];
};
struct {
float e;
short c;
};
} un;
1
union un1 {
char a[12];
int c;
struct {
long d[2];
float e;
};
} un;
16
union un16 {
char a[6];
double e;
int c;
struct{
float f[3];
int b;
};
} un;
2
union un2 {
int b[2];
unsigned long c;
char a[13];
struct {
char d[2];
double e;
};
} un;
17
union un17 {
struct {
wchar_t a[5];
int g[2];
};
short c;
struct {
double e;
bool b;
};
} un;
3
union un3 {
struct{
long c;
bool b;
};
char a[13];
struct {
double d[1];
double e;
};
double f;
} un;
18
union un18 {
int b;
struct {
short c;
float e;
};
double d[2];
char a[7];
} un;
4
union un4 {
char a[14];
struct {
short d[5];
unsigned b;
float e;
};
int c;
} un;
19
union un19 {
unsigned b[2];
long c;
struct {
char f;
double e;
wchar_t a[6];
};
double g[2];
} un;
5
union un5 {
wchar_t a[7];
struct {
short d[5];
float e;
};
short b;
unsigned c;
} un;
20
union un20 {
int b;
struct {
char c;
double e;
};
struct {
double f;
char a[10];
};
} un;
6
union un6 {
char a[8];
unsigned short b;
struct {
double e;
};
int d;
short c;
} un;
21
union un21 {
char a[14];
struct {
wchar_t c;
double e;
};
struct {
double f;
};
unsigned long b;
} un;
7
union un7 {
int b;
struct {
float f[2];
wchar_t a[6];
};
struct {
char d[5];
float e;
};
int c;
} un;
22
union un22 {
struct {
wchar_t a[7];
long c;
};
double e;
wchar_t f[6];
int b[3];
} un;
8
union un8 {
char a[10];
int b;
struct {
char d[5];
float e;
};
long c;
} un;
23
union un23 {
char a[6];
float b[3];
struct {
int f;
short c;
};
double e;
} un;
9
union un9 {
char a[9];
unsigned f[5];
struct {
bool d;
short b;
double e;
};
char c;
} un;
24
union un24 {
struct {
short f;
char a[8];
};
int b[2];
int c;
double e;
} un;
10
union un10 {
unsigned g[2];
struct {
double e;
};
struct {
char a[5];
char c;
double f;
};
} un;
25
union un25 {
struct {
short f;
wchar_t a[5];
};
int b[2];
struct {
short c;
float e;
};
} un;
11
union un11 {
struct {
float f[2];
};
struct {
char a[6];
double e;
double b;
};
short c;
} un;
26
union un26 {
struct {
wchar_t a[7];
unsigned short c;
};
float e;
struct {
int b;
float f[3];
};
} un;
12
union un12 {
double b[2];
struct {
char a[8];
unsigned f[4];
};
char g[5];
short c;
float e;
} un;
27
union un27 {
struct {
wchar_t c;
float e;
};
double d[2];
char a[11];
struct {
bool b;
char f[14];
};
} un;
13
union un13 {
double f[3];
float b[2];
struct {
wchar_t a[7];
int c;
};
float e;
bool g;
} un;
28
union un28 {
int c;
double e;
struct {
char a[9];
double g;
};
} un;
14
union un14 {
struct {
short c;
};
struct {
char a[10];
double d;
};
float e;
} un;
29
union un29 {
struct {
float f;
float e;
};
double d;
struct {
wchar_t a[6];
int c;
};
} un;
Для кожного варіанту виконати надання значень елементам об'єднання :
un.e = KV * 325 + YEAR * DN; // замість KV підставити номер своєї квартири
// замість YEAR підставити свій рік народження
// замість DN підставити свій день народження
un.c = DN * (MN + BD) * 100; // замість MN підставити свій місяць народження
// замість BD підставити номер свого будинку
un.a[0] = символ, що відповідає 6 цифрі номера мобільного телефона;
un.a[1] = символ, що відповідає 7 цифрі номера мобільного телефона;
un.a[2] = символ, що відповідає 8 цифрі номера мобільного телефона;
un.a[3] = символ, що відповідає 9 цифрі номера мобільного телефона;
un.a[4] = символ, що відповідає 10 цифрі номера мобільного телефона;
4. КОНТРОЛЬНІ ПИТАННЯ
1. В чому полягає суть концепції типів даних?
2. Які категорії типів даних існують в мові С++?
3. Які типи даних відносяться до базових типів даних?
4. Які типи даних відносяться до скалярних похідних типів?
5. Які типи даних відносяться до структурованих похідних типів?
6. Які дійсні типи даних існують в мові С++?
7. В яких типах даних можуть використовуватись бітові поля?
8. Які специфікатори типів існують в мові С++?
9. Яким має бути специфікатор типу для представлення символів українського алфавіту?
10. Як зберігаються в пам’яті комп’ютера дані логічного типу?
11. Як зберігаються в пам’яті комп’ютера дані символьного типу?
12. Як зберігаються в пам’яті комп’ютера дані цілого типу?
13. Як зберігаються в пам’яті комп’ютера дані дійсного типу?
5. КОНТРОЛЬНІ ЗАВДАННЯ
І. Знайти та записати внутрішні формати основних базових типів даних:
Тип
даних
Значення
Представлення в пам’яті комп’ютера
(результат записати в 16-й системі числення)
1 байт
2 байт
3 байт
4 байт
bool
3*a-3*b
(якщo a=true, b=false)
?
char
'\142'
?
wchar_t
'\X41'
?
?
int
-14810 = -9416
?
?
?
?
float
2670,0510 = A6E,0(C)16
?
?
?
?
ІІ. Знайти та записати внутрішні формати похідних типів даних:
Визначити представлення в пам'яті комп'ютера масиву (результат записати в 16-й системі числення):
bool m1[ ][3][4] = {{{true,false,true,true},{false,true},{true,true}} ,
{{true},{},{false,true}} ,
{ true,true}};
Визначити представлення в пам'яті комп'ютера переліку (результат записати в 16-й системі числення):
enum {two = 2, three, four, ten = 10, eleven, fifty = ten + 40} en= four;
Визначити представлення в пам'яті комп'ютера об’єднання (результат записати в 16-й системі числення):
union {
int a1;
short a2;
double a3;
char a4[5];
bool a5;
} un;
un.a4[0] = ’2’;
un.a4[1] = 3;
un.a4[2] = ’4’;
un.a4[3] = 5;
un.a4[4] = ’6’;
un.a2 = 7;
Визначити довжину змінної s:
char s[]=
”a\xaeh\1\
234f\\\t\’” ”11”;
Визначити розмір структури:
struct{
char c;
int k:10;
struct {
char a;
float b;
} s;
union {
short x;
char m[5];
} b;
int n;
}m={'1',2,{3,4},5,6};
СПИСОК ЛІТЕРАТУРИ
Грегори К. Использование Visual С++. Специальное издание. - М.: «Диалектика», 1999.
Мешков А.В., Тихомиров Ю.В. Visual С++ и MFC. Пер. с англ. – 2-е изд. перераб. и доп. – СПб.: БХВ - Петербург, 2002. – 1040 с.
Страуструп Б. Язык программирования С++. Третье издание. - М.: «Издательство Бином», 1999.
Трамбле Ж., Соренсон П. Введение в структуры данных. – М.:Машиностроение, 1982
Уильям Топп, Уильям Форд. Структуры данных в С++. – М.:Бином, 2000 - 700 с
ЗМІСТ
Мета роботи……………………………………..……………………………………………3
Теоретичні відомості..........….………………………………………………………….…. .3
Порядок виконання роботи..............………………………………………..……..………...4
Завдання на курсову роботу ....………………………………………..……..………...4
Вибір індивідуального завдання ...………………………………………………………… 6
Вимоги до оформлення звіту.......................……...……..…………………………………. 6
Вимоги до оформлення програмного продукту ..……..…………………………………. 7
Контрольні питання.................………..……………………………………………………. 8
Контрольні завдання................………..……………………………………………………. 8
Список літератури ………...……….....................…………………………………………..8
НАВЧАЛЬНЕ ВИДАННЯ
МЕТОДИЧНІ ВКАЗІВКИ
до курсової роботи
"Представлення в пам’яті комп’ютера статичних даних"
з дисципліни
“Програмування. Частина IIІ. Структури даних та алгоритми"
для підготовки студентів напряму
6.050102 “Комп’ютерна інженерія
Укладач Т.А.Матвейчук, ст. викладач каф.ЕОМ
Редактор
Комп’ютерне складання
Підписано до друку 2011 р.
Формат 70 х 100 1/16. Папір офсетний.
Друк на різографі. Умовн. друк. арк. ...... Обл.-вид. арк. ......
Наклад ..... прим. Зам.
Поліграфічний центр
Видавництва Національного університету “Львівська політехніка”
вул. Колесси, 2, 79000, Львів