22945

СТАНДАРТНІ ТИПИ ДАНИХ

Лекция

Информатика, кибернетика и программирование

До них відносяться числа символи булеів значення та адреси. Вираз може не мати значення на певних даних наприклад зациклюватись. Вважається що в цьому разі він приймає значення =невизначено. 2 Яке значення набудуть змінні АВС після виконаня оператора { int A=0B=2C=1; A=2 A B C; } З точки зору семантики булевий тип є моделлю двозначної булевої алгебри.

Русский

2013-08-04

194.5 KB

0 чел.

СТАНДАРТНІ ТИПИ ДАНИХ

Згiдно з принципом типізації кожне дане мови програмування належить певному типу і тільки одному. Тип визначає  синтаксичну та семантичну структуру об'єктів, рівень та функції доступу до їх значень(=інтерфейсні функції), їх загальні властивості (операції, стандартні функції ), а також в значній міри і їх прагматику. Наприклад, аналіз типу даного дозволяє, не звертаючись до його значень,  контролювати на чисто синтаксичному рівні помилкове його використання в програмах. Типи даних розподіляються на стандартні та похідні. Стандартні дані – це ті, які  представлені безпосередньо в машинних командах,   ними оперує процесор. До них відносяться числа, символи, булеів значення  та адреси.  З точки зору процесора ці дані  є цілісними, далі неділимими.  Похідні дані мають певну внутрішню структуру, вони будуються зі стандартних даних за допомогою спеціальних конструкторів типів. Це - масиви, структури, обєднання, бітові поля,  потоки.

 

Булевий тип. У мові Сі  цей тип явно не представлено. Роль булевих констант відіграють цілі числа: 0 означає «лжа»,  решта цілих (у тому числі і від’ємні ) означають – «істина». Використовується для побудови логічних виразів, які, взагалі кажучи, є  трьохзначними. Вираз може не мати значення на певних даних (наприклад, зациклюватись). Вважається, що в цьому разі він приймає значення - (=”невизначено”).

Операції: || - диз’юнкція, && - кон’юнкція, ! – заперечення. Їх семантика задається формулами:

Як бачимо, при  обчисленні значень  дизюнкції та  конюнкції  спочатку обчислюється перший операнд. Другий операнд у деяких випадках  може взагалі  не обчислюватись. А саме, коли , а також  для дизюнкції - коли перший операнд не є нульовим, для  конюнкції навпаки - коли він нульовий. Це означає, що може порушуватись асоціативність цих операцій.

Впр. 

1) Навести приклади порушень  закону асоціативності для операцій дизюнкції та  конюнкції .

2)  Яке значення набудуть змінні  А,В,С після виконаня оператора

{ int A=0,B=2,C=1;     (A=2<<++A) || ++B && --C; }  ?

З точки зору семантики булевий тип є моделлю двозначної булевої алгебри.

Для змінних цього типу є справедливими закони булевої алгебри.

(P = = 1) P

if  (P = =1) Оп   if (P) Оп

if  (P = = 0) Оп   if  (! P) Оп

2) Символьний тип (Char).

       Слугує для відображення  інформації на периферійних  пристроях. В пам’яті символи зберігаються у вигляді числових кодів. На периферійних пристроях – у вигляді знаків. Відповідність між кодами та їх  знаками подається кодовою таблицею, нпр.,  ASCII (American Standard Cod for Information Interchange ) . Вона містить 256 кодів  з діапазону 0..255.  Кожному символу відповідає певний  код  ( 0 ≤  код ≤ 255 )  таблиці та його знак.

В Сі  символи можна подавати:

1)  знаками в одиночних лапках : a , ‘/’, ‘0’….

2)  за допомогою 8- та 16- річних кодів:

‘\ccc’ – cвісімкова цифра; нпр., ‘\007’ – символ  Bell (дзвоник  в ASCII)

’\xhh’  - h - шістнадцятирічна цифра; нпр., ‘\x7’ -  символ  Bell (дзвоник  в ASCII),

3) у вигляді ескейп-послідовностей ‘\....’ / . Нпр.,

   ‘\a’ -  дзвоник, ‘\n – новий рядок, ‘\r повернення каретки, ‘\0’ -  символ null. 

Семантично тип Char належить до цілочислових типів розміру 1 байт. На ньому визначена цілочислова  арифметика. Символьні дані можуть зустрічатися в арифметичних виразах .  Значеннями таких даних  слугують числові коди символів.

 

3) Цілі типи (int, long, short ).

Цілий тип є наближеною cкінченою моделлю арифметики цілих чисел.

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

maxint = 215 – 1 = 32 767

minint = – 215 = – 32 768

Знак:  0 для  чисел   >0,  1 для чисел  <0. 

Розміри типів long int  short int  скорочено (long  та  short) залежать від компілятора.

Їх можна знайти за допомогою опрерації sizeof(long) та  sizeof(short) .

Але в будь якому разі – розмір першого не менший від розміру типу int, а розмір другого не більший від розміру int.

Константи цілого типу можуть записуватись в 10-й, 8-й та 16-й системах з закінченнями u (U) для безнакових цілих, l(L) – для довгих цілих. Нпр.,

10U, 0L, 25uL

037, -0777                   ---  8-і цілі  

-0x25, 0xFFF0             --- 16-цілі.

У файлі  <limits.h> визначаються розміри деяких констант для цілочислових типів  компілятора. Нпр.,  

СHAR_BIT         8                                бітів  в полі для   char

 UCHAR_MAX   255                            мах  значення в  char

 INT_MAX           +32767                      мах  значення в  int

 INT_MIN             -32768                      мin  значення в int

 LONG_MAX       +2147483647           мах  значення в  long

 UINT_MAX         65535                       мах  значення в  unsigned int

і т.д.

Алгебра

          ! ++, --  ~ (побітове заперечення) + -                       (унарні операції)

*, /, %

+,  –

<<, >>,

<  <=  >  >=

= =  !=

& (побітова конюнкція)

^ ( побітове додавання по модулю 2)

|  (побітова диз’юнкція)

&&

||

Ці операції є звуженням відповідних арифметичних операцій над цілими числами на тип int. Якщо результат операції виходить за межі типу, то операція невизначена. Ця ситуація називається переповненням. Переповнення порушує основні арифметичні закони (асоціативність, дистрибутивність). За виключенням переповнення машинна арифметика цілих чисел діє коректно (як модель).

Прикл.

int i=3;

  1.  i<<2 ==00001100  i>>2 ==00000000
  2.  i& ~07 ==00000011 & ~00000111 == 00000011 & 111111000 == 00000000

           Впр. 3.2 РП   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

4) Дійсний тип. (double, long double, float).

Машинний тип Real призначений для моделювання дійсної арифметики.

Множина R дійсних чисел континуальна. Real – скінченна підмножина раціональних чисел.

Нехай , тоді [x] подання x в Real.  [ ] : RReal.

Невеликі цілі числа при такому відображенні залишаються на місці [0] = 0, [1] = 1, ...

Прообрази R в Real є зв’язними (неперервними) інтервалами

Якщо [X1] =  [X2]  і  ,   [X3] = [X1]= [X2]. Real є симетричним відносно 0: [-X] = -[X].

В Real існує найбільше значення max.

- зв’язана в R.

- зв’язана в R.

Алгебра

1) +, * – комутативні операції

[X] + [Y] = [Y] + [X]

[X] * [Y] = [Y] * [Y]

2) X ≥ Y > 0

([X] + [Y]) – [Y] = [X]

3) Симетричність відносно 0

[X] – [Y] = [X] + [-Y]

[-X] * [Y] = [X] * [-Y] = -[X] * [Y]

4) Монотонність : якщо 0 ≤ Х ≤ a, 0 ≤ Yb, то

[X] + [Y] ≤ [a] + [b]

[X] * [Y] ≤ [a] * [b]

[X] + [b] ≤ [Y] + [a]

[X] / [Y] ≤ [a] / [b]

5) Для  X = Y : [X] = [Y]

        XY:  [X] – [Y] ≥ 0

                     [X] – [X] = 0

                     [X] + 0 = 0 + [X] = [X]

На внутрішньому рівні тип Real подається у вигляді десяткових дробів з мантисою і порядком.

, де m – мантиса, р – порядок. Цей запис означає число  .

Використовується нормалізоване подання чисел  – з мантисою  0.1 ≤ m < 1.

Нпр.,  0.01E+1 – ненормалізована форма,  0.1Е+0 – нормалізована форма

Внутрішнє подання даних типу Real має вигляд:

Всі поля мають фіксований розмір, який залежить від компілятора. Розряди поза мантисою і порядком -  відкидаються.

Якщо взяти числа з фіксованими порядками: то найбільша щільність чисел  має місце на інтервалі [0.1 , 1) ( числа  мають вигляд  ). На інтервалі [1 , 10)  щільність менша (числа тут мають вигляд  ). Кількість мантис - та ж сама, а інтервал в 10 разів більший. І т.д.  Звідси випливає, що похибка  обчислень для  великих чисел зростає. Навіть великі цілі числа  будуть подаватися неточно. Молодші розряди, які не попадають в мантису  замінюються на 0. Нпр., якщо  мантиса  має розмір  11 десяткових цифр, то 11-разрядне  ціле число n=100 0000 0001   буде подано точно як , а 12-розрядне ціле n1=1000 0000 0001- неточно  як  [n1]= 0.1E+12 ( наймолодша цифра (=1) буде втрачена !!! ). Щільність розташування чисел в Real характеризує константа-машинний нуль =.

У файлі  <float.h> визначаються розміри деяких констант для дійсних  типів даного компілятора. Нпр.,  

 FLT_DIG            6                                кількість десяткових цифр в мантисі  для  float

 FLT_EPSILON  1E-5                           машинний нуль в  float

 FLT_MAX          1E +37                     мах  значення в  float

 FLT_MIN            1E-37                      min  значення в float

FLT_MIN_EXP                                  найменше  n  таке, що  точно подається в float

 DBL_DIG            10                           кількість десяткових цифр в мантисі  в double

 DBL_EPSILON  1E-9                        машинний нуль  в double

 DBL_MAX          1E +37                   мах  значення в  double

 DBL_MIN            1E-37                     min  значення в double

 DBL_MIN_EXP                                  найменше  n  таке, що   точно подається в  double

У мові Сі дійсні  константи записуються,  або за допомогою мантиси з крапкою(не обовязково нормалізованою,   або цілим з порядком  або мантисою з порядком.

Закінчення  f (F) вказує на тип float, а  l(L) –  на тип long double. Нпр.,

1.0f          ---  належить до   float

1e-2L       --- належить до    long double

1.0e+25  ---  належить до   double.

Впр. 2.11. Знайти за допомогою рядів Тейлора наближені значення функцій  та  з урахуванням їх повільного спадання для великих аргументів (). Скористатися тотожність , де ,  та  періодичністю функції .

Алгебра

1) Адитивні  операції:   +, –.

Цим операціям передує вирівнювання порядків. Операнд з меншим порядком приводиться до більшого (за абсолютною величиною).

,  , де

 

Після вирівнювання порядків мантиси додаються, а результат нормалізується.

Прикл.

1)   a = 0.123555E+5

      b = 0.155E+6

     Вирівнювання:  a = 0.0123555E+6,  b = 0.155E+6

     a + b = 0.1673555E+6

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

2)   Нехай в мантисі 4 десяткові цифри.

     a = 0.1222E+3

     b = 0.15E+6

     Вирівнювання порядків:  a = 0.0001E+6,  b = 0.15E+6

     a + b = 0.1501E+6

     У сумі  втрачено 0.0000222Е+6 !!!

2) Мультиплікативні  операції : *, /.

При множенні порядки додаються, а мантиси множаться. При діленні мантиси діляться, а порядки віднімаються. При цьому у вирівненні порядків не має потреби.

Оскільки діапазон порядків обмежений, то можлива ситуація зникнення” порядків. Тому ділити на дуже маленькі числа і множити на дуже великі небезпечно !!!.

Прикл.   Нехай в мантисі 4 цифри. Розв’язати рівняння  x2 – 200x + 1 = 0.

d = sqrt( sqr(-200) – 4) == sqrt (0.4E+5 – 0.00004E+5) == 200.0

x1 = 200.0;

x2 = 0.0000;

Виберемо за х1 більший з коренів. За теоремою Вієта маємо

x2 = c/(a*x1);

x2 = 1.000/(200.0*1.000) == 0.005

Отже за першим методом ми отримали значення х2 далеке від кореня.. Після підстановки його в рівняння маємо: . Другий метод дає значно кращий результат: .

Функції для роботи з дійсними типами знаходяться в  бібліотеці   <math.h>. Всі функції повертають значення типу double. Кути в тригонометричних функціях задаються в радіанах. Деякі з функцій наведені нижче. Далі:

 double x,y;

 int n;  

sin(x)  

cos(x)

tan(x)      

asin(x)             арксинус  ,

atan(x)             арктангес

exp(x)             

log(x)              

log10(x)          

pow(x,y)         

sqrt(x)            ,

ceil(x)              найближче до ціле в типі  double, яке не менше  

floor(x)            найближче до ціле в типі  double, яке не більше

fabs(x)             

frexp(x,int *exp)       виділяє нормалізовану мантису   в діапазоні , яка повертається, та двійковий порядок , який зберігається за адресою exp. Таким чином, . Для   обидві  частини результату теж  =0.

modf(x, double *ip)  виділяє цілу та дробову частини, які мають знак однаковий з . Ціла частина зберігається за адресою , дробова повертається як результат.

Тип числових виразів. Перетворення числових типів.

Всі числові типи упорядковані за старшинством наступним чином:

char < unsigned char< short<unsigned short<int< unsigned int< long<unsigned long< <float<double<long double.

Кожний числовий вираз  має певний тип,  яким є  старший  з типів всіх його операндів.  

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

1) Цілочислове підвищення. Здійснюється, коли вираз має тип int або long.  Якщо тип виразу дозволяє точно подати значення молодшого операнду, то останнє перетворються до нього, у супротивному   - до  беззнакового типу  unsigned int   або  unsigned long.

2) Перетворення цілих і дійсних типів. При перетворенні значень з дійсного типу в цілочисловий дробова частина відкидається; якщо отримане ціле знаходиться за межами даного цілого типу, то результат не визначено. Зокрема,  дана ситуація має місце при перетворенні відємних дійсних до беззнакових цілих.  Якщо ціле значення перетворюється до дійсного і  воно знаходиться в  допустимому діапазоні, але подається неточно, то   результатом буде найближче дійсне до даного цілого.

3) ) Перетворення дійсних типів. При перетворенні меншого типу до більшого значення не зміниться. Якщо навпаки,  перетворюється значення від старшого типу до молодшого і воно знаходиться в діапазоні нового типу, то результатом буде найближче  значення до даного в новому типі. Якщо  результат виходить за межі молодшого типу, до результат не визначено.

4) Перетворення типів в операціях присвоєння. Тип виразу-присвоєння   співпадає з типом лівого операнда. При обчисленні значення виразу  даний операнд перетворюється  до типу лівого за вказаними вище правилами.

Табл..  Пріоритети операцій та порядок виконання

Операції

Порядок виконання

() [ ] ->

==>

! ~ ++ -- + _-  * & (тип) sizeof

<==

*  /  %

==>

+  -

==>

<<  >>

==>

<   <=   >   >=

==>

==   !=

==>

&

==>

^

==>

|

===>

&&

==>

||

==>

?:

<===

=  +=  -=  *=  /=  &=  |=  <<=  >>=

<==

,

==>


Типи даних

Стандартні

Похідні

Числові

имвольний

Булевий

цілі 

дійсні

       Адреси

знак

15 біт

Real

R

[X1]

[X2]

[XP]

Xi

Xk

X1

X2

знак

m - мантиса

р - порядок


 

А также другие работы, которые могут Вас заинтересовать

34442. Строительство социализма в СССР в 1920 – 1930-е гг.: становление тоталитарного режима, проведение индустриализации и коллективизации, культурная революция 42.5 KB
  В середине 20х годов перед советским государством встала задача модернизации экономики и превращения СССР из аграрноиндустриальной страны в индустриальную. СССР мог производить любой вид промышленной продукции Индустриализация тяжело отразилась на положении крестьян. С одной стороны был сделан гигантский скачок в развитии страны СССР вышел на 2 место в мире по производству промышленной продукции.
34443. Великая Отечественная война 1941 – 1945 гг.: основные этапы, события и итоги. Источники и значение победы 43 KB
  Этапы войны: 22 июня 1941 г. Причины неудач Красной Армии в первые месяцы войны: Неожиданность нападения Германии войска не были приведены в полную боевую готовность; Не было завершено перевооружение Красной Армии новую технику не успели освоить. В начале войны многие части не имели связи со своими штабами что затрудняло получение сведений о враге и приводило к окружению и плену. Центральным событием начального этапа войны стала битва за Москву 30 сентября 56 декабря 1941 г.
34444. Развитие СССР в 1953 – 1964 гг. Десятилетие реформаторского порыва 33.5 KB
  На ХХ съезде партии Хрущев осудил культ личности Сталина. Не допускалась критика партии и социализма. была принята новая программа партии которая ставила задачу построения коммунизма за 20 лет. Первым секретарем партии стал Л.
34445. СССР в середине 1960-середине 1980-х гг.: основные тенденции и противоречия социально-экономического развития 34.5 KB
  СССР в середине 1960середине 1980х гг. В новой Конституции СССР принятой в 1977 г. Под руководством председателя Совета министров СССР А. Результатом стало все большее отставание СССР от стран Запада.
34446. Перестройка в СССР: попытки реформирования экономики и обновления политической системы 39.5 KB
  Политические и социальноэкономические преобразования в СССР в период правления Горбачева получили название перестройка. Сократились доходы СССР от внешней торговли в связи с падением мировых цен на нефть и газ. была отменена 6ая статья конституции СССР о руководящей роли КПСС Был введен пост Президента СССР им стал М.
34447. История как наука. Исторические источники и вспомогательные исторические дисциплины 33.5 KB
  Сама наука сложилась намного позднее. Историческая наука оперирует точно установленными фактами которые извлекаются из источников. Геральдика наука о гербах.
34448. ВОСТОЧНЫЕ СЛАВЯНЕ В ДРЕВНОСТИ 32 KB
  ВОСТОЧНЫЕ СЛАВЯНЕ В ДРЕВНОСТИ. Предки славян стали выделяться из племен индоевропейцев во II тыс. Прародиной славян считается Центральная Европа в верховьях рек Вислы Одера и Дуная. Натиск кочевников оттеснил славянские племена на северовосток и в VI веке они заселили территорию восточной Европы смешиваясь с балтами и финноугами.
34449. Возникновение древнерусского государства. Деятельность первых русских князей и принятие христианства 17.75 KB
  По этой легенде накануне образования Киевской Руси северные племена славян и их соседи ильменские словене чудь весь платили дань варягам а южные племена находились в зависимости от хазар. Договор Олега с греками обеспечивал возможность вывоза собираемой на Руси дани и продажи ее на рынках Византии. Формирование государственной территории Древней Руси завершилось при князе Владимире Святославиче 980 1015. Для защиты южных рубежей Руси была создана система мощных оборонительных сооружений заставы богатырские протянувшиеся...
34450. Причины и последствия феодальной раздробленности на Руси. Особенности развития Владимиро-Суздальского княжества и Новгородской земли 40.5 KB
  Причины раздробленности: 1 господство натурального хозяйства и экономическая самостоятельность вотчин. 2 Политической предпосылкой раздробленности стало усиление политической власти местных князей и бояр. Последствия раздробленности: Став самостоятельными правителями князья старались не истощать свои земли излишними поборами.