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 - мантиса

р - порядок


 

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

64398. ВИКОРИСТАННЯ СУЧАСНИХ ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ В УДОСКОНАЛЕННІ СТОМАТОЛОГІЧНОЇ ДОПОМОГИ ТА В ОПТИМІЗАЦІЇ ФАХОВОЇ ПІДГОТОВКИ 464 KB
  На сьогоднішній день оцінка стану органів та тканин порожнини рота що досліджуються досить часто носить субєктивний характер та значною мірою залежить від досвіду знань і професійних особливостей лікаря-стоматолога.
64399. Керамограніт на основі кварц-польовошпатової сировини Приазовського кристалічного масиву 248.5 KB
  Метою дисертаційної роботи є розробка складів мас і опрацювання технології керамограніту на основі системного визначення вітчизняної кварцпольовошпатової сировини Приазовського кристалічного масиву.
64400. Аеродинамічне удосконалення лопаткових апаратів турбомашин на основі обернених задач 4.57 MB
  Метою дисертаційної роботи є розроблення методу розв'язування прямої та оберненої задач розрахунку тривимірної течії на довільній вісесиметричній поверхні течії у міжлопаткових каналах решіток турбомашин що ураховує...
64401. УПРАВЛІННЯ ЗОВНІШНЬОЕКОНОМІЧНОЮ ДІЯЛЬНІСТЮ АГРАРНИХ ПІДПРИЄМСТВ НА РЕГІОНАЛЬНОМУ РІВНІ 246 KB
  У працях зазначених вчених основна увага приділяється дослідженню організаційноекономічних аспектів здійснення зовнішньоекономічної діяльності аграрними підприємствами ролі державного регулювання цього процесу та напрями її децентралізації.
64402. ЕФЕКТИВНІСТЬ РЕКУРЕНТНОГО ДОБОРУ НА ПІДВИЩЕННЯ ПРОДУКТИВНОСТІ ПРИ СТВОРЕННІ ГІБРИДІВ ЦУКРОВИХ БУРЯКІВ 298 KB
  Серед заходів підвищення продуктивності цукрових буряків важливе місце займає селекційногенетичний шлях покращення існуючих і створення нових компонентів гібридизації зокрема багатонасінних запилювачів для формування...
64403. Судово-медична характеристика та експертна оцінка ушкоджень, заподіяних при пострілах пістолетними боєприпасами 9,2х18 мм, які споряджені кулями з протирикошетною здатністю 154.5 KB
  Особливості соціальнополітичних умов існування суспільства які за останні роки склалися як в Україні так і в більшості країн пострадянського простору підняли проблему вогнепальних ушкоджень на одну із актуальних серед інших проблем судовомедичної експертизи.
64404. РОЗВИТОК ПІЗНАВАЛЬНОЇ АКТИВНОСТІ МАЙБУТНІХ ОФІЦЕРІВ-ПРИКОРДОННИКІВ У ПРОЦЕСІ НАВЧАННЯ ФАХОВИХ ДИСЦИПЛІН 1.18 MB
  Аналіз психолого-педагогічних військово-педагогічних досліджень засвідчив що проблема розвитку пізнавальної активності особистості була і залишається актуальною.
64405. Удосконалення конструкції залізничних піввагонів з метою зниження матеріалоємності 4.34 MB
  Відповідно до Стратегії розвитку залізничного транспорту на період до 2020 року яка схвалена розпорядженням Кабінету Міністрів України від 16 грудня 2009 року за № 1555р однією з пріоритетних задач розвитку залізниць є удосконалення конструкції рухомого складу...
64406. ОБҐРУНТУВАННЯ МЕТОДІВ ТА СПОСОБІВ ІНТЕНСИФІКАЦІЇ ВІДТВОРНОЇ ЗДАТНОСТІ БУГАЇВ-ПЛІДНИКІВ 268.5 KB
  У звязку з цим прискорене поліпшення племінних якостей тварин можливе лише за умови застосування методу штучного осіменіння який забезпечує інтенсивне використання спермопродукції від бугаївплідників.