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

р - порядок


 

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

55647. З Різдвом Христовим 289 KB
  У хату заходить господиня з діточками. Господиня Ой славен славен Святий вечір. Господиня Неси синку Дідуха на покуть. Господиня Несу кутю на покутю на зелене жито щоб бджоли сіли щоб ми дочекалися сіяти й орати щоб ми були багаті на бджоли й вівці на гроші й червінці.
55648. Святкування Різдва в Україні 49.5 KB
  Щось колядники не йдуть. До хати входять колядники співають Добрий вечір тобі пане господарю Радуйся Ой радуйся земле Син Божий народився. Застеляйте столи та все килимами Та кладіть калачі з ярої пшениці Бо прийдуть до тебе три празники в гості...
55649. Різдво Христове як прояв Божого милосердя 37.5 KB
  Мета: Виховати в учнів почуття радості Світлого Різдва Христового; формувати потребу приносити радість. Розвивати духовно моральне мислення учнів. Вмховувати духовно багату високоморальну особистість.
55651. Біографія Роберта Бернса. Future Simple Passive Voice 101 KB
  The topic of our today’s lesson is: “The English Poet R.Burns. Future Simple Passive Voice”. By the end of the lesson you would be able: To talk about A. Carnegie and R. Burns using active vocabulary. To use the Future Simple Passive Voice in oral speech.
55653. ПУТЕШЕСТВИЕ НА ОСТРОВ РОБИНЗОНА 55 KB
  Географические координаты точек Атмосфера география способствовать развитию речи; развивать пространственное мышление; развивать коммуникативные навыки при работе в группах; развивать познавательный интерес и географическое мышление учащихся; способствовать...
55654. Экологическое воспитание как социально-педагогическая проблема 57 KB
  Сколько нужно посадить молодых тополей чтобы они заменили пять бездумно срубленных десятилетних деревьев Если каждый год вы будите мусорить сколько лет понадобится для того чтобы весь бумажный мусор разложился...
55655. КОНЦЕПЦІЯ ПРАВОВОЇ ОСВІТИ І ПРАВОВОГО ВИХОВАННЯ ШКОЛЯРІВ 79 KB
  Нарізним стрижнем цієї культури є правосвідомість особистості яка включає отримання системних наукових знань про право правопорядок і його охорону та виховання емоційно-оціночного ставлення до права і правопорядку.