- •Створення, виконання та відлагодження програм в інтегрованих середовищах програмування
- •Завдання
- •Дослідження цілих та дійсних типів та операцій над значеннями даних типів
- •Опис програмних об’єктів
- •Ініціалізація змінних при створенні
- •Оператор привласнення
- •Операції над значеннями цілих та дійсних типів
- •Загальна спрощена структура програми
- •Методичні вказівки Правила складання ідентифікаторів
- •Правила опису об’єктів у програмі
- •Завдання 1
- •Завдання 2
- •Завдання 3
- •Дослідження бітових операцій над цілими значеннями
- •Бітові операції
- •Завдання
- •Дослідження логічних типів, логічних операцій та операцій відношення
- •Завдання
- •Лабораторна робота 1.5 дослідження вказівних типів та операцій над значеннями даних типів
- •Завдання
- •Лабораторна робота 1.6 дослідження символьних типів
- •Завдання
- •Лабораторна робота 1.7 дослідження виразів
- •Теоретичні відомості
- •Методичні вказівки Правила написання операторів привласнення та виразів
- •Завдання
- •Контрольні запитання
- •Завдання
- •Контрольні запитання
- •Мета лабораторної роботи - вивчити блочну організацію програм та стратегії розподілу пам'яті.
- •Динамічний розподіл пам’яті у блоці
- •Методичні вказівки Правила написання програм
- •Своєчасно звільняйте пам'ять, “захоплену” в “купі” (оператори dispose/ delete) Завдання
- •Контрольні запитання
- •Лабораторна робота 1.10
- •Дослідження структурних операторів
- •Мета лабораторної роботи - вивчити устрій структурних операторів та дослідити можливості та особливості застосування різноманітних форм структурних операторів.
- •Теоретичні відомості
- •Правила написання програм
- •Завдання
- •Методичні вказівки
- •Контрольні запитання
- •Завдання
- •Контрольні питання
- •Література
Контрольні запитання
Що таке вираз?
Наведіть класифікацію виразів.
Що таке R- та L - вирази?
Наведіть правила застосування R - та L- виразів.
Наведіть прагматичні правила написання виразів.
Що спільного між літералом, змінною та виразом?
Що означає обчислити вираз?
Лабораторна робота 1.8
ДОСЛІДЖЕННЯ ПРИВЕДЕННЯ ТИПIВ
Мета лабораторної роботи - вивчення суворої типізації, правил приведення типів та механізму обходу суворої типізації.
Теоретичні відомості
В алгоритмічних мовах всі операції в виразах виконуються з операндами визначених типів. Часто трапляється так, що є необхідним конструювати вирази з програмних об’єктів різних типів даних, або вирази, що розташовані праворуч та ліворуч оператору привласнення, генерують значення різних типів. В таких випадках застосовуються механізми приведення значень одного типу до значень іншого типу. В мовах програмування існує явне та неявне приведення типів.
Засоби явного приведення (перетворення) значень типів
Явне приведення типів виконується за допомогою спеціального оператора:
<приведення>:: =<індикатор типу> (<вираз>)|(<індикатор типу>) <вираз>
Наприклад:
iCount = int (fG/3.14);
fCoeff1 = (float)dCoeff2;
Засоби неявного приведення (перетворення) значень типів
Мова С не суворо типізована і тому має складну систему неявного приведення типів:
- знакове коротке до довгого – розширення знаковим бітом уліво
- беззнакове коротке до довгого – розширення уліво нульовим бітом
- знакове довге до короткого – відсікання вправо з установленням знакового біту (для знакових)
- беззнакове довге до короткого - відсікання вправо. лівий біт набуває знакової функції (для знакових)
- знакове до беззнакового – лівий біт втрачає знакову функцію
- беззнакове до знакового – лівий біт набуває знакової функції
- ціле до дійсного – перетворюється у довге, а далі у дійсне
- дійсне у ціле – перетворюється у довге
- дійсне у дійсне з подвійною точністю – доповнення мантиси нульовими битами праворуч
- дійсне з подвійною точністю у дійсне – відсікання молодших бітів мантиси
Неявне приведення типів є небажаною ситуацією, тому що результат такого приведення може бути не передбачуваним, і його використання може призвести до важких помилок у програмі. Кращим шляхом є застосування явного приведення типів.
Обхід суворої типізації
В окремих випадках, коли неможливе застосування явного чи неявного приведення типів, для перетворення значень використовуються механізми обходу суворої типізації. Один з таких механізмів передбачає використання нетипізованих вказівних змінних, оголошених як pointer (Паскаль), void* (Сі).
Механізм базується на можливості нетипизованих покажчиків посилатися на ім’я змінної будь-якого типу (дія 1). Потім вміст нетипізованого покажчика може бути присвоєним типізованому покажчику (дія 2). Типізований покажчик дозволяє застосовувати операцію розименування для доступу до комірок пам’яті, на які вказує покажчик. Вміст комірок буде інтерпретованим як такий, що має тип, котрим типізований покажчик.
v = &R;
Або
v = U1;
U2 = (type U2) v;
U1, U2 – типізовані вказівні змінні; R - проста змінна; type 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. }