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


 

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

54934. Введение. Встречаем старых друзей 480.5 KB
  The problem of learning languages is very important today. Foreign languages are socially demanded especially at the present time when the progress in science and technology has led to an explosion of knowledge and has contributed to an overflow of information. The total knowledge of mankind is known to double every seven years. Foreign languages are needed as the main and most efficient means of information exchange of the people of our planet.
54935. Основы потребительского поведения 63.5 KB
  Данная востребованность связана с тем что все мы в конечном итоге являемся потребителями и должны иметь представление о своих правах. Цель: Уяснение сущности и специфики потребительского поведения; Сформировать знания умения и навыки по данной теме необходимые ученику в жизни; Развить культуру экономического мышления; Задачи: Образовательные: Изучение потребительского поведения; Дать учащимся общие представления об особенностях существующей рыночной ситуации; Познакомить с потребительскими правами и услугами; Познакомить с...
54936. Напряжение. Расчет работы в электрическом поле 63.5 KB
  Цель урока: Обеспечить усвоение понятия напряжение его условного обозначения единицы в СИ понимание энергетического смысла напряжения формирование умения выделять существенные признаки понятия напряжение. Задачи Обучающие: продолжить формирование понятий напряжение работа; продолжить формирование умений и навыков решать разноуровневые задачи.
54937. Создание и форматирование списков 45.5 KB
  Цели урока: Контроль знаний и умений по темам Редактирование и форматирование текста. Задачи урока: Обучающие: сформировать представление о списках их видах; сформировать представление о создании и форматировании списков; совершенствовать культуру оформления документов; учащиеся должны знать понятия: список виды списков; учащиеся должны уметь: создавать и форматировать списки. Тип урока: комбинированный урок.
54938. ХИМИЧЕСКИЙ СОСТАВ РАСТЕНИЙ 109.5 KB
  Задачи урока: познакомиться с процессом поглощения веществ из почвы минеральным или почвенным питанием растения ролью корневых волосков в этом процессе.
54939. Издержки производства и прибыль 24 KB
  Тип урока: обобщение и систематизация знаний Цели урока: Создать условия для: обобщения и систематизации ЗУН по теме Издержки производства деятельности учащихся по самостоятельному применению знаний и...
54940. Основы сельского хозяйства. Почвы 91 KB
  Главнейшее качество почвы плодородие то есть способность удовлетворять потребность растений в элементах минерального питания воде обеспечивать их корневые системы достаточным количеством воздуха и тепла. Плодородие почвы обусловлено запасом элемента питания их формами содержанием гумуса его составом мощностью гумусовых горизонтов механическим составом интенсивностью...
54942. Формирование игровых навыков, ловкости, целеустремленности и потребности к систематическим занятиям физической культурой 33 KB
  5 повторов Лицом друг к другу на расстоянии 89 метров передачи в парах стоя на месте изза головы без удара об пол. 5 повторов Лицом друг к другу на расстоянии 89 метров передачи в парах стоя на месте одной рукой с ударом об пол. 5 повторов Обучение и закрепления броска с 2х шагов с правой стороны. 5 повторов Обучение и закрепления броска с 2х шагов с левой стороны.