Розрахунково-графічна робота з курсу: «Програмування Ч.3. Структури даних і алгоритми»

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2013
Тип роботи:
Розрахунково - графічна робота
Предмет:
Програмування Ч 3 Структури даних і алгоритми

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет “Львівська політехніка” Кафедра ЕОМ / Розрахунково-графічна робота з курсу: «Програмування Ч.3. Структури даних і алгоритми» Вступ В даній розрахунково-графічній роботі досліджується внутрішнє представлення в пам’яті комп’ютера базових та похідних типів даних статичної структури. Зміст Вступ 2 1. МЕТА РОБОТИ 4 2. ТЕОРЕТИЧНА ЧАСТИНА 4 3. Класифікація типів даних 4 4. Базові типи даних 5 4.1. Порожній тип 5 4.2. Логічний тип даних 5 4.3. Символьні типи даних 5 4.4. Цілочисельні типи даних 5 4.5. Дійсні типи даних 5 5. Переліки 5 5.1. Масиви 6 5.2. Структури 6 5.3. Об'єднання 6 РОЗВ’ЯЗАННЯ 6 3.1. Завдання 2 7 3.2.1. Представлення рядків символів 7 Вибір варіанту індивідуального завдання: 7 Тестування провести для наступних значень змінних 7 3.2.2. Представлення переліків. 7 Вибір варіанту індивідуального завдання: 7 Тестування провести для наступних значень змінних: 8 Представлення масивів 8 Вибір варіанту індивідуального завдання: 8 Тестування провести для наступних значень змінних: 8 3.2.4. Представлення структур 9 Вибір варіанту індивідуального завдання: 9 Тестування провести для наступних значень змінних: 9 3.2.5. Представлення об'єднань. 10 Вибір варіанту індивідуального завдання: 10 ДОДАТКИ 11 3.1. Завдання 1 11 3.2. Завдання 2 11 3.2.1. Представлення рядків символів. 11 3.2.2. Представлення переліків. 12 3.2.3. Представлення масивів. 12 3.2.4. Представлення структур. 12 3.2.5. Представлення об'єднань. 13 Граф-схеми алгоритму 14 Висновок 15 1. МЕТА РОБОТИ Дослідження внутрішнього представлення в пам’яті комп’ютера базових та похідних типів даних статичної структури. 2. ТЕОРЕТИЧНА ЧАСТИНА Представлення даних в пам’яті комп'ютера Дані є складовою частиною інформації, що являють собою зареєстровані сигнали. Під час інформаційного процесу дані перетворюються з одного виду в інший за допомогою методів. Обробка даних містить в собі множину різних операцій. 3. Класифікація типів даних Основна мета будь-якої програми полягає в обробці даних. Дані різних типів зберігаються в пам’яті комп’ютера і обробляються по-різному. Згідно з концепцією типів даних, кожний тип даних однозначно визначає: множину значень, які може приймати змінна заданого типу; операції та функції, які можна застосовувати до цієї змінної; внутрішнє представлення змінної у пам'яті комп'ютера. Нагадаємо, що пам'ять виділяється не для типу даних, а для розміщення змінних або констант певних типів. В мові С++ розрізняють наступні категорії типів: базові (або прості, основні, стандартні) типи даних; похідні (або складні, складені) типи даних. Базові типи мають імена, які є ключовими словами мови. До базових типів відносяться: скалярні типи і порожній тип (void). Скалярні типи діляться на цілочисельні і дійсні типи (float, double, long double). Логічний тип (bool), символьні (char, wchar_t) та цілі (short, int, long) типи даних відносяться до цілочисельних типів. Для них визначені всі операції роботи з цілими числами. Похідні типи визначаються на основі базових типів. Похідні типи діляться на скалярні і структуровані (або агрегатні). До скалярних похідних типів відносяться: - переліки (enum) ; - вказівники (ім'я_типу *); - посилання (ім'я_типу &). До структурованих похідних типів відносяться: - масиви; - структури (struct); - об'єднання (union); - класи (class). В структурах, об'єднаннях і класах можуть використовуватись бітові поля. Для явного задання діапазону можна використовувати такі специфікатори: Специфікатори short (короткий) і long (довгий) застосовуються до цілих. У таких оголошеннях слово int можна опускати, що зазвичай й робиться. Найчастіше для представлення цілого, описаного з специфікатором short, виділяється 16 біт, із специфікатором long - 32 біта, а значенню типу int - або 16, або 32 біта. Специфікатори signed (зі знаком) або unsigned (без знака) можна застосовувати до будь-якому цілочисельного типу. Вони вказують, як інтерпретується нульовий біт змінної, тобто, якщо зазначено ключове слово unsigned, то нульовий біт інтерпретується як частина числа, у противному випадку нульовий біт інтерпретується як знаковий. У випадку відсутності ключового слова unsigned змінна вважається знаковою. 4. Базові типи даних 4.1. Порожній тип Порожній тип (void) синтаксично поводиться як базовий тип. Однак використовувати його можна тільки як частину похідного типу, оскільки об'єктів типу voіd не існує. Він використовується для того, щоб вказати, що функція не повертає ніякого значення, або як базовий тип для вказівників на об'єкти невідомого типу, наприклад: 4.2. Логічний тип даних В мові C++ логічний тип (bool) характеризується двома значеннями: false (0) і true (1). На відміну від мови С++ в мові С логічний тип даних іменується Bool, але при включенні заголовочного файлу <stdbool.h> можна використовувати ключові слова bool, true, false. 4.3. Символьні типи даних Ідентифікатором символьного типу є ключове слово char. Символьні константи (символьні літерали) можна представляти як: клавіатурні: '1','s','Y' – записуються як символи в одинарних лапках; кодові: '\n','\\','\?', які використовуються для представлення деяких керуючих символів та символів-розділювачів – записуються як escape-послідовності (вони починаються з символу зворотної косої риски). Перелік кодових символьних літералів наведено в Таблиці 4.1. 3) кодові числові: '\0','\x5C','\124', які використовуються для представлення будь-яких символів – записуються у вигляді однієї, двох або трьох вісімкових цифр з символом зворотної косої риски ( \ ) перед ними або довільним шістнадцятковим числом з послідовністю \х перед ним. Послідовність вісімкових або шістнадцяткових цифр закінчується першим символом, який не є відповідно вісімковою або шістнадцятковою цифрою. Приклади таких представлень наведені в Таблиці 4.2. 4.4. Цілочисельні типи даних Типи short, іnt і long призначені для представлення цілих чисел. Цілі типи можуть бути знаковими (sіgned) і беззнаковими (unsіgned). В знакових типах самий лівий біт використовується для зберігання знака числа (0 – плюс, 1 – мінус). Решта бітів містять числове значення. 4.5. Дійсні типи даних Дійсні константи записуються у двох формах – з фіксованою десятковою крапкою або в експонентному виді. В першому випадку крапка використовується для поділу цілої і дробової частин константи. Як ціла, так і дробова частини можуть бути відсутніми (наприклад 1.2, 0.725, 1., .35, 0.). Експонентна форма запису дійсної константи містить знак, мантису і десятковий порядок (експоненту). Мантиса – це будь-яка додатня дійсна константа у формі з фіксованою крапкою або цілою константою. Порядок вказує степінь числа 10, на яку домножується мантиса. Порядок відокремлюється від мантиси буквою 'E' або 'e' (від слова exponent). Порядок може мати знак плюс або мінус, у випадку додатнього порядку знак плюс можна опускати. 5. Переліки Змінна, котра може приймати значення з деякого списку значень, називається змінною перелічуваного типу або переліком. Оголошення переліку задає тип змінної переліку і визначає список іменованих констант, що називається списком переліку. Імена елементів списку переліку задаються в фігурних дужках через кому. 5.1. Масиви Масив - це впорядкований скінченний набір даних одного типу, які зберігаються в послідовно розташованих комірках оперативної пам'яті і мають спільну назву. З оголошення масиву компілятор одержує інформацію про тип елементів масиву та їх кількість. 5.2. Структури На відміну від масиву, всі елементи якого однотипні, структура може містити елементи різних типів. В мові C++ структура є видом класу і має всі його властивості, але в багатьох випадках достатньо використовувати структури так, як вони визначені в мові С: 5.3. Об'єднання Об'єднання дуже схожі на структури. Однак на відміну від структури об'єднання зберігає значення тільки одного елемента в кожний момент часу. Інакше кажучи, коли виконується операція присвоювання значення елементу об'єднання, то перезаписується будь-яке попереднє присвоювання. РОЗВ’ЯЗАННЯ І. Дослідити внутрішнє представлення в пам’яті комп’ютера даних статичної структури. Розглянути наступні базові типи даних: bool b; unsigned char ch2; unsigned long i5; double d2; ІІ. Тестування провести для наступних значень змінних: b = (19 * 5) % 10 *2=10; ch2 = у; i5 = 19 * 352=6688 ; Для надання значень дійсним змінним використати такі позначення: X – 19, Y – 2, Z = 19 * 2; d2 = 38 .19e + 2; Внутрінє представлення даних у комп’ютері: / 3.1. Завдання 2 Визначити внутрішнє представлення в пам’яті комп’ютера даних похідних типів. 3.2.1. Представлення рядків символів. Визначити представлення в пам’яті комп’ютера рядків символів. Вибір варіанту індивідуального завдання: № варіанта = (((день народження * номер будинку) % номер квартири) * * місяць народження + номер будинку) % 30=15 Тестування провести для наступних значень змінних Оголосити рядок символів і ініціалізувати його згідно наведеній нижче таблиці. Після цього виконати деякі переприсвоювання, задані після таблиці. char *string0 = "he\xaaw\34\\""d\vf23\xfe\1e\xfjf"; string0 [0] = '8'; string0 [2] = '8'; string0 [4] = '6'; string0 [6] = '4'; string0 [8] = '6'; string0 [10] = '9'; string0 [12] = '9'; string0 [14] = '1'; В результаті рядок символів набуде такого вигляду: char *string0 = "8e8w6\\4\v629\xfe9e1jf "; Внутрінє представлення даних у комп’ютері: / 3.2.2. Представлення переліків. Визначити представлення в пам’яті комп’ютера переліків. Вибір варіанту індивідуального завдання: № варіанта = ((день народження + номер будинку) * (номер квартири + місяць народження)) % 30=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; Внутрінє представлення даних у комп’ютері: / Представлення масивів Визначити представлення в пам’яті комп’ютера масивів. Вибір варіанту індивідуального завдання: № варіанта = (номер будинку * 10 + номер квартири * місяць народження) % 30=22 Тестування провести для наступних значень змінних: Оголосити масив та ініціалізувати його згідно наведеній нижче таблиці. Після цього виконати деякі переприсвоювання, задані після таблиці. Внутрінє представлення даних у комп’ютері: / Внутрінє представлення даних у комп’ютері: / 3.2.4. Представлення структур Визначити представлення в пам’яті комп’ютера структур. Вибір варіанту індивідуального завдання: № варіанта = (день народження * 3 * номер квартири + + (місяць народження % 3) * номер будинку) % 30=5 Тестування провести для наступних значень змінних: Оголосити структуру згідно наведеній нижче таблиці. Після цього надати всім елементам структури певні значення, задані після таблиці. Внутрінє представлення даних у комп’ютері: / 3.2.5. Представлення об'єднань. Визначити представлення в пам’яті комп’ютера об'єднань. Вибір варіанту індивідуального завдання: № варіанта = (день народження + місяць народження + номер квартири * номер будинку + + день народження * місяць народження) % 30=19 union un19 { unsigned b[2]; long c; struct { char f; double e; wchar_t a[6]; }; double g[2]; } un; Для кожного варіанту виконати присвоєння значень елементам об'єднання : un.e = 406 * 325 + 1994* 19=169836; un.c = 19* (2+ 5) * 100=13300; un.a[0] = 4; un.a[1] = 6; un.a[2] = 9; un.a[3] = 9; un.a[4] = 1; Внутрінє представлення даних у комп’ютері: / ДОДАТКИ 3.1. Завдання 1 #include<stdio.h> #include<conio.h> //using namespace std; int main (void) { int b=10; unsigned char ch2='y'; unsigned long i5=6688; double d2=38.19e+2; unsigned char *vx=(unsigned char *)(&b); for (int i=0;i<sizeof(b);i++) printf("%02X ",vx[i]); printf("\n"); unsigned char *ux=(unsigned char *)(&ch2); for (int i=0;i<sizeof(ch2);i++) printf("%02X ",ux[i]); printf("\n"); unsigned char *wx=(unsigned char *)(&i5); for (int i=0;i<sizeof(i5);i++) printf("%02X ",wx[i]); printf("\n"); unsigned char *fx=(unsigned char *)(&d2); for (int i=0;i<sizeof(d2);i++) printf("%02X ",fx[i]); printf("\n"); return 0; } 3.2. Завдання 2 3.2.1. Представлення рядків символів. #include <iostream> using namespace std; int main ( ) { void copystr ( char*, const char* ); char *string5 = "\xabn\\\n\v""abcde""vnsc6\x23"; char str2 [20]; copystr ( str2, string5 ); str2 [0]='8'; str2 [2] = '8'; str2 [4] = '6'; str2 [6] = '4'; str2 [8] = '6'; str2 [10] = '9'; str2 [12] = '9'; str2 [14] = '1'; cout << str2 << endl; unsigned char *vx=(unsigned char *)(&str2); for (int i=0;i<sizeof(str2);i++) printf("%02X ",vx[i]); printf("\n"); return 0; } void copystr ( char* dest, const char* str ) { while ( *str) *dest++ = *str++; *dest = '\0'; } 3.2.2. Представлення переліків. #include<iostream> #include<iomanip> using namespace std; int main(){ enum color12 { BLUE, GREEN, CYAN = 0, RED, BROWN, GRAY, YELLOW = 8, WHІTE, MAGENTA, LІGHTGRAY, DARKGRAY, BLACK } c1= CYAN, c2= BROWN, c3= DARKGRAY; unsigned char *vx=(unsigned char *)(&c1); for (int i=0;i<sizeof(c1);i++) printf("%02X ",vx[i]); printf("\n"); unsigned char *vx1=(unsigned char *)(&c2); for (int i=0;i<sizeof(c2);i++) printf("%02X ",vx1[i]); printf("\n"); unsigned char *vx2=(unsigned char *)(&c3); for (int i=0;i<sizeof(c3);i++) printf("%02X ",vx2[i]); printf("\n"); }} 3.2.3. Представлення масивів. #include<iostream> #include<iomanip> using namespace std; int main(){ wchar_t array0[][3][3] = {{'d',1,4}, {{12,}}}; array0[0][0][0] = 0; // 0 * 19 = 0 array0[0][0][1] = 171; // 9 * 19 = 171 array0[0][0][2] = 151; // 8 * 19 = 151 array0[0][1][0] = 151; // 8 * 19 = 151 array0[0][1][1] = 111; // 6 * 19 = 111 array0[0][1][2] = 71; // 4 * 19 = 71 array0[0][2][0] = 111; // 6 * 19 = 111 array0[0][2][1] = 171; // 9 * 19 = 171 array0[0][2][2] = 171; // 9 * 19 = 171 array0[1][0][0] = 19; // 1 * 19 = 19 for(int k=0;k<2;k++) {for(int j=0;j<3;j++) {for(int i=0;i<3;i++) cout<<setw(4)<<array0[k][j][i]<<" "; cout<<endl;} cout<<endl;} unsigned char *vx=(unsigned char *)(&array0); for (int i=0;i<sizeof(array0);i++) printf("%02X ",vx[i]); printf("\n");} 3.2.4. Представлення структур. #include<stdio.h> #include<conio.h> //using namespace std; int main (void) { typedef bool *vkaz; bool b = true; struct str25 { int b:4; long d; char c[9]; unsigned :0; unsigned long e : 13; long double a; char f; }str = { 10, 15,"Lviv",17}; unsigned char *vx=(unsigned char *)(&str); for (int i=0;i<sizeof(str);i++) printf("%02X ",vx[i]); printf("\n"); return 0;} 3.2.5. Представлення об'єднань. #include<stdio.h> #include<conio.h> //using namespace std; int main (void) { union un19 { unsigned b[2]; long c; struct { char f; double e; wchar_t a[6]; }; double g[2]; } un; un.e=169836;un.c=13300; un.a[0] = 4; un.a[1] = 6; un.a[2] = 9; un.a[3] = 9; un.a[4] = 1; unsigned char *vx=(unsigned char *)(&un); for (int i=0;i<sizeof(un);i++) printf("%02X ",vx[i]); printf("\n"); getch(); return 0; } Граф-схеми алгоритму  Висновок Ми дослідили внутрішнє представлення в пам’яті комп’ютера базових та похідних типів даних статичної структури. Ці знання будуть потрібні у майбутній професії програміста, особливо на мовах низького рівня.
Антиботан аватар за замовчуванням

04.06.2014 18:06-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!