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

р - порядок


 

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

3611. Исследование некоторых эксплуатационных показателей трелевочных тракторов ОТЗ различной энергонасыщенности 8.82 MB
  Введение Основной задачей технического прогресса в лесозаготовительной промышленности на перспективный период является увеличение производительности труда за счет интенсификации общественного производства, т.е., за счет роста его энерговооруженности...
3612. Характеристика суждения 59.5 KB
  Характеристика суждения Придать логическую форму следующим высказываниям (выразить через суждения вида А, Е, I, О): а) Рыба дышит жабрами. А: Все S есть P б) Лень никогда не приводит к добру; E: все S не есть P в) Иногда металлы жидкие. I: Некоторые ...
3613. CASE-средства: этапы становление, современное состояния 93.5 KB
  CASE-средства: этапы становление, современное состояния Техническими предпосылками CASE-технологий являются средства машинной графики, большие объемы используемой памяти ЭВМ, высокая производительность и т.п. В настоящее время можно выделить три пок...
3614. Понятие темперамента 85 KB
  Понятие о темпераменте Темперамент является одним из наиболее значимых свойств личности. Интерес к данной проблеме возник более двух с половиной тысяч лет тому назад. Он был вызван очевидностью существования индивидуальных различий, которые обуслов...
3615. Начертательная геометрия и инженерная графика 2.3 MB
  Содержание и объем контрольных работ находятся в соответствии с программой Министерства образования Российской Федерации. Пособие включает методические указания, рабочую программу и варианты заданий для контрольных работ. В нем кратко изложен теорет...
3616. Разработка технологического процесса механической обработки детали «Клапан» 579.5 KB
  Основные направления в развитии технического прогресса, которые характеризуются не только непрерывным появлением принципиально новых технологических процессов производства, но и непрерывной заменой существующих процессов более точными
3617. Проектування металоконструкцій 550.5 KB
  Методичні вказівки до виконання розрахунково-графічної роботи з курсу “Проектування металоконструкцій” для студентів спеціальності 7.090214 - “Підйомно-транспортні, будівельні, дорожні, меліоративні машини і обладнання” і 6.0...
3618. Технологічні комплекси для виробництва будівельних матеріалів 928 KB
  Методичні вказівки до виконання практичних вправ, курсового та дипломного проектів з курсу “Технологічні комплекси для виробництва будівельних матеріалів” розділ: “Дробарно-сортувальні комплекси” для студентів спеціальності 7...
3619. Инновационно-инвестиционный процесс в переходной экономике России 447 KB
  Россия вступила в 2011 г. в условиях заметного оживления экономики, преодолев наиболее острые последствия финансового и экономического кризиса 1998 г. Этому способствовали усилия правительства по стабилизации экономики и финансов в посткриз...