42625

ДОСЛІДЖЕННЯ СУВОРОЇ ТИПІЗАЦIЇ, ПРИВЕДЕННЯ ТИПIВ ТА МЕХАНІЗМІВ ОБХОДУ СУВОРОЇ ТИПІЗАЦІЇ НА ОСНОВІ НЕТИПІЗОВАНИХ (АДРЕСНИХ) ВКАЗІВНИХ ЗМІННИХ

Лабораторная работа

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

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

Украинкский

2013-10-30

83.5 KB

5 чел.

Лабораторна  робота 7

ДОСЛІДЖЕННЯ СУВОРОЇ ТИПІЗАЦIЇ, ПРИВЕДЕННЯ ТИПIВ ТА

МЕХАНІЗМІВ ОБХОДУ СУВОРОЇ ТИПІЗАЦІЇ НА ОСНОВІ

НЕТИПІЗОВАНИХ (АДРЕСНИХ) ВКАЗІВНИХ ЗМІННИХ

Мета лабораторної роботи - вивчення суворої типізації, правил приведення типів та механізму обходу суворої типізації.

Теоретичні відомості

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

Засоби явного приведення (перетворення) значень типів

Паскаль:

<приведення>:: =<індикатор типу> (<вираз>)

Наприклад:

bS := byte(iG);     

iT := integer(45/bS);   

Сі:

<приведення>:: =<індикатор типу> (<вираз>)|(<індикатор типу>) <вираз>

Наприклад:

iCount = int (fG/3.14);     

fCoeff1 = (float)dCoeff2;

Засоби неявного приведення (перетворення) значень типів

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

Паскаль:

значення  цілих типів до значень дійсного типу.

Сі:

- знакове коротке до довгого – розширення знаковим бітом уліво

- беззнакове коротке до довгого – розширення уліво нульовим бітом

- знакове довге до короткого – відсікання вправо з установленням знакового біту (для знакових)

- беззнакове довге до короткого - відсікання вправо. лівий біт набуває знакової функції (для знакових)

- знакове до беззнакового – лівий біт втрачає знакову функцію

- беззнакове до знакового – лівий біт набуває знакової функції

- ціле до дійсного – перетворюється у довге, а далі у дійсне

- дійсне у ціле – перетворюється у довге

- дійсне у дійсне з подвійною точністю – доповнення мантиси нульовими битами праворуч

- дійсне з подвійною точністю у дійсне –  відсікання молодших бітів мантиси

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

Обхід суворої типізації

В окремих випадках, коли неможливе застосування явного чи неявного приведення типів, для перетворення значень використовуються механізми обходу суворої типізації. Один з таких механізмів передбачає використання нетипізованих вказівних змінних, оголошених як pointer (Паскаль), void* (Сі).

Механізм базується на можливості нетипизованих покажчиків посилатися на ім’я змінної будь-якого типу (дія 1). Потім вміст нетипізованого покажчика може бути присвоєним типізованому покажчику (дія 2). Типізований покажчик дозволяє застосовувати операцію розименування для доступу до комірок пам’яті, на які вказує покажчик. Вміст комірок буде інтерпретованим як такий, що має тип, котрим типізований покажчик.

Паскаль:

  p := @R;

Або

  p := U1;

  U2 := p;

Сі:

  v = &R;

Або

  V = U1;

  U2 = (type's U2) v;

U1, U2 – типізовані вказівні змінні; R - проста змінна;  type's U2 - явне приведення типу.

Приклад програм, які демонструють механізм обходу суворої типізації:

{ Паскаль }     // Сі

Program ost;     void main()

Var      {

fA : real;      float fA;

nB : integer;      int nB;

pnB : ^integer;     int *pnB;

pP: pointer;      void *pP;

        Begin

{ fA => nB }     \\ fA => nB     

fA  := 267.7;     fA  = 267.7;

pP  := @fA;     pP  = &fA;

pnB  := pP;      pnB  = (int*)pP;

nB  := pnB^;     nB = *pnB;

        End.      }

Завдання

Написати програми на мовах Паскаль та Сі, які складаються з наступних дій:

  1.  Опису змінних наступних типів: Longint, Integer, Real – на мові Паскаль та int, float, unsigned short – на мові Сі.
  2.  Ініціювання змінних, що описанні в п.1 даного завдання, значеннями згідно з варіантом (табл.1).
  3.  Опису змінних наступних типів: Integer, Char, Shortint – на мові Паскаль та double, int, char – на мові Сі.
  4.  Ініціювання змінних, що описанні в п.3 даного завдання, використовуючи змінні, що описанні в п.1 даного завдання, за допомогою:
    •  неявного приведення типів;
    •  явного приведення типів;
    •  механізму обходу суворої типізації.

Примітка: необхідно дотримуватись порядку перечислення типів у п.1 та п.3 даного завдання.

Таблиця 1

№ варіанта

Паскаль

Сі

Longint

Integer

Real

int

float

unsigned short

1

5679876

20836

67.9

23678

1.23e4

11974

2

237658

3917

-9.3e2

926

4.811e-1

1914

3

9876765

405

213.08

13915

4.78e5

9765

4

11133557

16329

-45.77774

9742

-3.54e3

34033

5

5576921

286

7.4e-2

30679

2.57e-4

2384

6

233897

1753

-8.2e1

19923

-5.87e1

677

7

7531908

4055

883.23

27652

7.9e3

74

8

38749

953

-1.543e2

17443

3.908e-4

4476

9

10432056

231

4.79e-3

3841

954.67

6429

10

496302

700

34.7623

682

-8.4e2

25921

11

5739184

2753

123.87

-6306

5.1e-1

126

12

700644

13138

-6.54e3

37

95.41

5743

13

21153870

96

88.99

31765

-7.293e3

26543

14

6938102

4248

9.05e-1

5876

21.09

333

15

849251

364

-50.63

274

1.001e-2

78

Контроль знань та вмінь

Таблиця вмінь

Таблиця 2

Перетворення значень та обхід суворої типізації

Об'єкти різних типів

Обхід суворої типізації

Приведення

неявні

явні

п

с

п

c

п

c

Контрольні запитання

  1.  Що таке сумісність типів?
  2.  Що таке приведення? Як воно може виконуватись?
  3.  Що таке суворо  типізована мова?
  4.  Наведіть правила неявного приведення у мовах Паскаль та Сі.
  5.  Що таке еквівалентність типів? Якою вона буває?
  6.  Що таке сумісність типів для привласнення?
  7.  Що таке сумісні операції?


 

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

16782. Золотая лихорадка или роль золота в истории 145 KB
  Золотая лихорадка или роль золота в истории. Золото расковывается до толщины 01 микрометра. 28 грамм хватит на лист площадью около 17 кв. метров Цивилизация человечества невозможна без таких металлов как медь железо затем алюминий и пр. Но золото представляется...
16783. Золото и его добыча 56 KB
  Золото ЗОЛОТО лат. Aurum – драгоценный металл химический элемент I группы периодической системы атомный номер 79 атомная масса 1969665. Этот благородный металл желтого цвета ковкий его плотность составляет 1932 г/см3 tпл 10644оC. Химически весьма инертен на воздухе не изменяет...
16784. ЗОЛОТО ГДЕ ОНО В РЕКЕ 141 KB
  ЗОЛОТО ГДЕ ОНО В РЕКЕ ЗОЛОТО ТАМ ГДЕ ТЫ ЕГО НАХОДИШЬ Россыпное золото россыпи находят в осадочных отложениях в руслах древних рек и в отложениях современных потоков. Россыпи бывают аллювиальными террасовыми русловыми донные косовые. Террасовые отложения
16785. Золото есть 87 KB
  Золото есть Если бы Джек Лондон оценил сегодня состояние золотодобывающей отрасли в Сибири то наверняка написал бы: Золота там нет. Лет 100 назад во времена освоения богатейших россыпей в Северной Америке когда старателю требовались только лоток и лопата за
16786. Золото и серебро Латинской Америки 29.5 KB
  Золото и серебро Латинской Америки. В Латинской Америке ежегодно производится примерно 300 т золота 15 мирового производства и свыше 4200 т серебра 23 мирового производства. Крупнейшим производителем золота является Перу 130 т больше всего производят серебра Мексика 2744...
16787. Золото 1.09 MB
  Золото Введение Золото сыграло большую роль в развитии капитализма. В современных условиях оно занимает важное место в капиталистической экономике и международных отношениях служит символом богатства и власти. Химический элемент номер 79 тяжелый блестящий
16788. ЗОЛОТОДОБЫЧА в районе Челябинска 172 KB
  ЗОЛОТОДОБЫЧА в районе Челябинска Датой офиц. открытия и начала З. на Урале считается 1745. Однако задолго до этого племена и народы населявшие его терр. уже знали и добывали золото. Точных указаний о древней З. на Юж. Урале пока н
16789. Золотой запас 65.5 KB
  Золотой запас Золотым запасом называют золото в виде российских и иностранных монет которые находились в хранилищах финансовых ведомств Российской империи. В запас входили так же слитки золотые самородки и кружки без аверса и реверса. До 1914 года в Росси дейст...
16790. ЗОЛОТО НЕДР РОССИИ МИФЫ, РЕАЛИИ, ПРОБЛЕМЫ 225.5 KB
  И.Б.Флеров ЗОЛОТО НЕДР РОССИИ МИФЫ РЕАЛИИ ПРОБЛЕМЫ Два обстоятельства побудили меня взяться за перо обращаясь к довольно сложной для России проблеме добычи золота. Первое заключается в том что несмотря на неуклонно развивающиеся рыночные отношения в стране в среде...