42625

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

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

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

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

Украинкский

2013-10-30

83.5 KB

6 чел.

Лабораторна  робота 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.  Що таке сумісні операції?


 

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

50706. Определение фокусных расстояний собирающей и рассеивающей линз и основных характеристик оптических систем, составленных из этих линз 70 KB
  Цель работы: Определение фокусных расстояний собирающей и рассеивающей линз и основных характеристик оптических систем составленных из этих линз. Приборы и принадлежности: источник света со щелью в виде стрелки; экран; рейтер и масштабная линейка; набор линз две собирающих и одна рассеивающая; два штатива для установки линз. Ход работы: С помощью метода Бесселя рассчитать фокусные расстояния и оптические силы двух собирающих линз и одной рассеивающей.После этого измеряем расстояние от источника до линзыd1 и...
50707. Изучение распределения случайных величин Гаусса и двумерного распределения Максвелла на механической модели 113 KB
  Цель работы: изучение законов нормального распределения случайных величин и двумерного распределения Максвелла. Вывод: в данной работе мы получили экспериментальные и теоретические графики распределения случайных величин которые качественным образом показывают распределение скоростей молекул идеального газа.
50708. Определение коэффициента поверхностного натяжения по высоте подъёма жидкости в капиллярных трубках 25 KB
  Тема: Определение коэффициента поверхностного натяжения по высоте подъёма жидкости в капиллярных трубках. Цель работы: определить коэффициента поверхностного натяжения. Вывод: В этой работе мы с помощью четырёх капиллярных трубок нашли два значения коэффициента поверхностного натяжения 1 = 745  178103 Н м и 2 = 644  218103 Н м.
50709. Исследование напряженного состояния тонкостенной цилиндрической оболочки 282 KB
  В таких оболочках действуют кольцевые в первом главном сечении и меридиональные напряжения во втором главном сечении которые могут определиться через внутренние силы и моменты: ; 1 где S меридиональные силы; Т кольцевые силы; толщина стенки; Z координата точки в которой определяем напряжение; Z изменяется от до . Из формулы 1 следует что напряжения распределены по толщине стенки по линейному закону достигая наибольших значений на внутренней или нагруженной поверхностях опор ; 2 В этих формулах если...
50710. ПОКУДОВА ДОБОВИХ ГРАФІКІВ НАВАНТАЖЕННЯ ЗА ДАНИМИ ОБСТЕЖЕННЯ ГРУПИ КОМУНАЛЬНО-ПОБУТОВИХ ЕЛЕКТРОПРИЙМАЧІВ ТА ВИЗНАЧЕННЯ РОЗРАХУНКОВОГО МАКСИМАЛЬНОГО НАВАНТАЖЕННЯ І ОСНОВНИХ ХАРАКТЕРИСТИК ГРАФІКА 191 KB
  Натурний експеримент Мета роботи. Побудова добового графіку навантаження комунально-побутового споживача житлового будинку квартири тощо на основі обстеження його електроприймачів та обчислення розрахункового максимального навантаження і основних числових характеристик графіка. ТЕОРЕТИЧНІ ВІДОМОСТІ Електричне навантаження є основним...
50711. ИССЛЕДОВАНИЕ СЛОЖНОЙ ЦЕПИ ПОСТОЯННОГО ТОКА 126 KB
  Выполнить опытную проверку принципа наложения. Принцип наложения формулируется следующим образом: ток в Кой ветви равен алгебраической сумме токов вызываемых в этой ветви каждой из э. Принцип наложения используется в методе расчета получившем название метода наложения. Опытная проверка принципа наложения производится в следующем порядке: а в цепи собранной при выполнении пункта 1 отключается один из источников э.
50712. Имя существительное как части речи 72.5 KB
  Имя существительное – это самостоятельная часть речи, имеющая категориальное значение предметности и выражающая его в несловоизменительных категориях рода и одушевленности
50713. Ознайомлення з приладами та пристроями для вимірювання витрат енергоносіїв 132 KB
  Витрата рідини що вимірюється в одиницях обєму називається обємною Vτ наприклад м3 с а в одиницях мас масовою Мτ кг с. Звязок між ними Мτ= Vτρ де ρ кг м3 густина рідини. Обєм рідини як правило не є одиницею кількості речовини оскільки для однієї і тієї ж кількості рідини він залежить від температури і тиску або питомого обєму. За необхідності із цього поняття виокремлюють краплинні рідини і гази.
50714. Исследование работы фланцевого соединения 86.5 KB
  Эксперимент начинается со снятия показаний тензодатчиков при разгруженных болтах. Затяжка каждого болта контролируется по изменению показаний прибора ВСТ4. Значения показаний прибора разгруженных Поi и затянутых Пi болтов заносятся в таблицу 3 причем разность показаний для каждого болта не должна отличаться от расчетной более чем 15.