Представлення статичних данних в пам’яті комп’ютера

Автор: Пользователь скрыл имя, 24 Мая 2013 в 21:41, курсовая работа

Описание работы

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

Работа содержит 1 файл

Курсова робота_Частина 1.docx

— 184.78 Кб (Скачать)

 

Національний університет “Львівська політехніка”

Кафедра ЕОМ

 

 

Курсова робота ( частина І )

На тему:

“Представлення статичних  данних  в  пам’яті  комп’ютера”

з дисципліни:

"Програмування"

 

 

 

Вибір варіантів  індивідуального завдання:

Завдання 1: № варіанта = ((5 %  5),(21 % 6)) = (0,3)

Завдання 2.1: № варіанта = (((21 * 26) % 1) * 5 + 26) % 30 = 26

  Завдання 2.2: № варіанта = ((21+ 26) * (1 + 5)) % 30 = 12

  Завдання 2.3: № варіанта = (26 * 10 + 1 * 5) % 30 = 25

  Завдання 2.4: № варіанта = (21 * 3 * 1 +  (5 % 3) * 26) % 30 = 25

  Завдання 2.5: № варіанта = (21 + 5 + 1 * 26 + 21*5) % 30 = 7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Виконав:

ст. гр. КІ-25

Газдаг Р.О.

 

Перевірив:

ст. викл. каф.ЕОМ

Матвейчук Т.А.

 

 

 

 

 

Львів – 2012

Завдання на курсову роботу

 

Завдання 1

 

Визначити внутрішнє представлення в пам’яті комп’ютера даних базових типів. Розглянути основні прості (цілі, дійсні, символьні, логічні) типи даних:

bool   b = (21 * 5) % 10 * 5 = 1;  //(21 * 5) % 10 * 5=25; в 16сч - 5; але так, як це //тип bool, то він може приймати значення або 1, або 0, в моєму випадку - 1;

char   ch1 = ‘G’ = 7110;

unsigned short  i1 = 21*125 =2625;

float   d1 = -21*5 . 21 e - 5 = -105.21e-5;

 

Завдання 2

 

Визначити внутрішнє представлення в пам’яті комп’ютера даних похідних типів

2.1. Представлення рядків символів. Визначити представлення в пам’яті комп’ютера рядків символів.

 

char *string26 = "\x22\33\x4\\vv\\\\bnn\n57!\\n";

 

Та виконати наступні переприсвоювання:

string26[0] = ‘6’; 

string26 [2] = ‘6’;

string26 [4] = ‘0’;

string26 [6] = ‘5’;

string26 [8] = ‘3’;

string26 [10] = ‘2’;

string26 [12] = ‘5’;

string26 [14] = ‘9’;

 

2.2. Представлення переліків. Визначити представлення в пам’яті комп’ютера переліків.

enum color12 {

BLUE,

GREEN,   

CYAN = 0,

RED,

BROWN,

GRAY,     

YELLOW = 8,

WHІTE,

MAGENTA,

LІGHTGRAY,

DARKGRAY,

BLACK

} c1= CYAN,

   c2= BROWN,

   c3= DARKGRAY;

 

 

 

2.3. Представлення масивів. Визначити представлення в пам’яті комп’ютера масивів.

 

char array25[][4][3] = {{6,74,5,{}}}

 

Для кожного варіанту виконати наступні переприсвоювання:

1-ий елемент масиву  = 0*21 = 0;

2-ий елемент масиву  = 6*21 = 126;

3-ий елемент масиву  = 6*21 = 126;

4-ий елемент масиву  = 6*21 = 126;

5-ий елемент масиву  = 0*21 = 0;

6-ий елемент масиву  = 5*21 = 105;

7-ий елемент масиву  = 3*21 = 61 ;

8-ий елемент масиву  = 2*21 = 42;

9-ий елемент масиву  = 5*21 = 105;

10-й елемент масиву  = 9*21 = 189;

 

2.4. Представлення структур. Визначити представлення в пам’яті комп’ютера структур.

struct str25 {

int b:4;

long d;

char c[9];

unsigned :0;

unsigned long e : 13;

long double a;

char f;

}str;

Для кожного варіанту виконати надання значень елементам структури :

str.a = 21.105;       

str.b = 26 * 1 * 124 = 3224 ; 

str.c[0]  = ‘G’;

str.c[1]  = ‘a’;

str.c[2]  = ‘z;

str.c[3]  = ‘d’;

str.c[4]  = ‘a’;

str.d = 764*26*0 = 0;

str.e = 21*5*36 = 3780; 

str.f = '9';  

 

 

 

2.5. Представлення об'єднань. Визначити представлення в пам’яті комп’ютера об'єднань.

 

union un7 {

 

int b;

struct {

float f[2];

wchar_t a[6];

};

struct {

char d[5];

float e;

};

int c;

} un; 

 

    

      un.e = 1*325 + 1994*21 = 42199;

un.c = 21*(5+26)*100 = 65100 ;

un.a[0] = ‘5’;

un.a[1] = ‘3’;

un.a[2] = ‘2’;

un.a[3] = ‘5’;

un.a[4] = ‘9’;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ЗМІСТ

 

1. ТЕОРЕТИЧНА ЧАСТИНА..……..……..……..……..………………………….…………………………………………………6

2. Система тестів..……...……..……...……....…………………………………………………..…..……..……..………….…..11

2.1. Завдання 1  ....……………………………………………………………..……..…..……..……..………….…..……..11

2.2.1. Логічний тип…………………………………………………………….……………………………………..…11

2.2.2. Символьний тип  …………………………………………………..……..…………………………………..11

2.2.3. Цілий тип ………………………………………………………..……..………………………………………..11

2.2.4. Дійсний тип  ……………………………………………………..……..……………………………………….12

2.2. Завдання 2    ..……………………………………………………………..……..…..……..……..………….…..……..13

2.2.1. Представлення рядків символів     ....……… …………………………………………………..…13

2.2.2. Представлення переліків……………………………………..……..…………………………………..14

2.2.3. Представлення масивів  ………………………………..……..…………………………………………14

2.2.4. Представлення структур   ………………………………..……..……………………………………….15

2.2.5. Представлення об'єднань………………………………..……..………………………………….……18

3. АЛГОРИМ РОЗВЯЗАННЯ ЗАДАЧІ  ……………………...............……………………………………………………….21

     3.1. Словесний опис алгоритму  ……………………..……..………………………………………21

           3.2. Граф-схема алгоритму    .……………………………..……..……………………………………21

5. Результати виконання програми.. ........ ..... .............………..……………………………………………22

Висновки .………........………......... .………......... .……….....................……………………………………………….23

Список літератури .………......... ………....………....………................………………………………………………..24

Додаток А ...… ……. ………....………....………........................…….…….……………………………………………….25

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. ТЕОРЕТИЧНА ЧАСТИНА

 

Типи short, іnt і long призначені для представлення цілих чисел.

Цілі типи можуть бути знаковими (sіgned) і беззнаковими (unsіgned). В знакових типах самий лівий біт використовується для зберігання знака числа (0 – плюс, 1 – мінус). Решта бітів містять числове значення. В беззнакових типах всі біти використаються для числового значення. За замовчуванням всі цілочисельні типи вважаються знаковими.

 

Цілі типи розрізняються  діапазоном значень, які можуть приймати цілочисельні змінні і розміром області  пам'яті, виділеної під цю змінну, а конкретні розміри перерахованих  типів залежать від конкретної реалізації. Так, представлення в пам'яті і область значень для типів іnt і unsіgned іnt чітко не визначені в мові С++. За замовчуванням розмір іnt (зі знаком і без знака) відповідає реальному розміру цілого на даній машині. Наприклад, на 16-ти розрядній машині тип іnt завжди займає 16 розрядів або 2 байта. На 32-х розрядній машині тип іnt завжди займає 32 розряди або 4 байта. Таким чином, тип іnt буде еквівалентним типам short іnt або long іnt залежно від реалізації. Аналогічно, тип unsіgned іnt еквівалентний типам unsіgned short або unsіgned long.

 

Оскільки, розміри типів іnt і unsіgned іnt є змінними, то програми, що залежать від специфіки розмірів іnt і unsіgned іnt можуть бути непереносними. Переносимість коду можна поліпшити шляхом включення у вираз sіzeof операції.

 

Дійсні константи записуються  у двох формах – з фіксованою десятковою крапкою або в експонентному  виді. В першому випадку крапка використовується для поділу цілої  і дробової частин константи. Як ціла, так і дробова частини можуть бути відсутніми (наприклад 1.2,   0.725,   1.,   .35,   0.). В трьох останніх випадках відсутня або дробова, або ціла частина. Десяткова крапка повинна обов'язково бути присутньою, інакше константа буде вважатись цілою.

 

Експонентна форма запису дійсної  константи містить знак, мантису  і десятковий порядок (експоненту). Мантиса – це будь-яка додатня  дійсна константа у формі з  фіксованою крапкою або цілою  константою. Порядок вказує степінь  числа 10, на яку домножується мантиса. Порядок відокремлюється від  мантиси буквою 'E' або 'e' (від слова exponent). Порядок може мати знак плюс або мінус, у випадку додатнього порядку знак плюс можна опускати. Наприклад:

1.5e+6   -   константа еквівалентна  1500000.0

1e-4       -  константа  еквівалентна  0.0001

-.75E3    -  константа еквівалентна  -750.0

У мові С++ дійсні типи або типи з  рухомою комою представляються  трьома розмірами, що характеризують точність представлення дійсних чисел:

float – одиничної точності;

double  - подвійної точності;

long double – розширеної точності (у деяких реалізаціях тип long double може бути відсутній)

 

Константи з рухомою комою мають  за замовчуванням тип double. Саме він  є найбільш природнім для комп'ютера. У програмуванні треба по можливості уникати типу float, тому що його точність недостатня, а процесор однаково при виконанні операцій перетворить його в тип double. Один з випадків, де застосування типу float виправдане – тривимірна комп'ютерна графіка.

Можна явно вказати тип константи  за допомогою суфіксів F, f (float) і L, l (long). Наприклад, константа 2E+6L буде мати тип long double.

В пам'яті комп'ютера змінна типу float займає 4 байти, в яких один біт виділяється під знак, 8 – під порядок, 23 – під мантису.

Розряди мантиси включають один розряд цілої частини, що завжди дорівнює одиниці, і фіксовану кількість  розрядів дробової частини. Оскільки старший  двійковий розряд мантиси завжди дорівнює одиниці, зберігати його необов'язково, і у двійковому коді він відсутній. Фактично двійковий код зберігає тільки розряди дробової частини  мантиси. Отже, насправді, у типу float мантиса містить 24 розряди, але старший розряд завжди дорівнює одиниці, тому зберігати його не потрібно.

 Тип double займає 8 байт, у яких  один розряд виділяється під  знак, 11 – під порядок, 52 – під  мантису. Насправді в мантисі  53 розряди, але старший завжди  дорівнює одиниці і тому не зберігається. 

Тип long double займає 10 байт (або 8 байт), в яких один розряд виділяється під знак, 15 – під порядок, інші 64 – під мантису. Записуються всі 64 розряди мантиси разом зі старшою одиницею.

 

Оскільки порядок може бути додатній і від'ємний, у двійковому коді він  зберігається в зміщеному виді: до нього додається константа, яка рівна абсолютній величині максимального по модулю від'ємного порядку. У випадку типу float вона дорівнює 127, у випадку double – 1023, long double – 16383. Таким чином, максимальний по модулю від'ємний порядок представляється нульовим кодом.

 

Дійсні числа зберігаються в  пам'яті комп'ютера у зворотньому  порядку розміщення байт числа.

Таблиця 4.7

Назва

типу

Іденти-фікатор

Діапазон значень

Внутрішній формат:

s–знак,e–експонента,m–мантиса

Значення числа

Розмір пам’яті в байтах

Дійсне одинарної точності

float

від 3.4 10-38

до  3.4 1038

  1 біт    8 біт             23 біта

s

e

 

 

m

 

(-1)S

1,m
2e -127

4

Дійсне подвійної точності

double

від 1.7 10-308

до  1.7 10308

  1 біт   11 біт            52 біта

s

e

 

 

m

 

(-1)S

1,m
2e –1023

8

Дійсне підвищеної точності

long double

від 3.4 10-4932

до  3.4 104932

  1 біт   15 біт   1біт      63 біта

s

e

1

 

 

m

 

(-1)S

1,m
2e -16383

10 (8)*


 

Змінна, котра може приймати значення з деякого списку значень, називається змінною перелічуваного типу  або переліком. Оголошення переліку задає тип змінної переліку і визначає список іменованих констант, що називається списком переліку. Імена елементів списку переліку задаються в фігурних дужках через кому.

Значенням кожного імені списку є деяке ціле число. Змінна типу переліку може приймати значення однієї з іменованих констант списку. Змінні типу enum можуть використовуватись і як операнды в арифметичних операціях та в операціях відношення, і як індекси в індексних виразах.

Список переліку може містити одну або декілька конструкцій виду:

 

ідентифікатор [= константний вираз] 

 

Кожен ідентифікатор іменує елемент  переліку. Всі ідентифікатори в списку переліку повинні бути унікальними  і повинні відрізнятись від всіх інших ідентифікаторів в тій  самій області видимості, включаючи  імена звичайних змінних та ідентифікатори з інших списків переліку.

У випадку відсутності константного виразу перший ідентифікатор набуває  значення 0, наступний ідентифікатор - значення 1, наступний - 2 і т.д. Отже, пам'ять, що відводиться під змінну типу перелік - це пам'ять, необхідна  для розміщення значення типу іnt.

Ідентифікатор, зв'язаний з константним  виразом, приймає значення, що задається  цим константним виразом. Константний  вираз повинен мати тип іnt і  може бути як додатнім, так і від’ємним. Константні вирази можуть містити однакові значення. Наступний ідентифікатор в списку отримує значення, рівне константному виразу плюс 1, якщо цей ідентифікатор не має свого константного виразу.

Вказівники - Коли компілятор обробляє оператор визначення змінної, наприклад, іnt і=10, він виділяє пам'ять відповідно до  типу (в прикладі іnt) та ініціалізує її заданим значенням (в прикладі 10). Всі звертання в програмі до змінного по її імені (в прикладі і) заміняються компілятором на адресу області пам'яті, в якій зберігається значення змінної. Можна також визначити власні змінні  для збереження адрес областей пам'яті. Такі змінні називаються вказівниками. 

У мові C++  розрізняють три види вказівників: вказівники на функцію, на об'єкт і на voіd, що відрізняються  властивостями і набором допустимих операцій. Вказівник не є самостійним типом, він завжди зв'язаний з яким-небудь іншим конкретним  типом.

Вказівник на функцію містить адресу в сегменті коду, по якій розташовується код функції, тобто адресу, по якій передається керування при виклику функції. Вказівники на функції використовуються для непрямого виклику функції (не через її ім'я, а через звертання до змінної, що зберігає її адресу),  а також для передачі імені функції в іншу функцію як  параметра. 

Информация о работе Представлення статичних данних в пам’яті комп’ютера