- •Створення, виконання та відлагодження програм в інтегрованих середовищах програмування
- •Завдання
- •Дослідження цілих та дійсних типів та операцій над значеннями даних типів
- •Опис програмних об’єктів
- •Ініціалізація змінних при створенні
- •Оператор привласнення
- •Операції над значеннями цілих та дійсних типів
- •Загальна спрощена структура програми
- •Методичні вказівки Правила складання ідентифікаторів
- •Правила опису об’єктів у програмі
- •Завдання 1
- •Завдання 2
- •Завдання 3
- •Дослідження бітових операцій над цілими значеннями
- •Бітові операції
- •Завдання
- •Дослідження логічних типів, логічних операцій та операцій відношення
- •Завдання
- •Лабораторна робота 1.5 дослідження вказівних типів та операцій над значеннями даних типів
- •Завдання
- •Лабораторна робота 1.6 дослідження символьних типів
- •Завдання
- •Лабораторна робота 1.7 дослідження виразів
- •Теоретичні відомості
- •Методичні вказівки Правила написання операторів привласнення та виразів
- •Завдання
- •Контрольні запитання
- •Завдання
- •Контрольні запитання
- •Мета лабораторної роботи - вивчити блочну організацію програм та стратегії розподілу пам'яті.
- •Динамічний розподіл пам’яті у блоці
- •Методичні вказівки Правила написання програм
- •Своєчасно звільняйте пам'ять, “захоплену” в “купі” (оператори dispose/ delete) Завдання
- •Контрольні запитання
- •Лабораторна робота 1.10
- •Дослідження структурних операторів
- •Мета лабораторної роботи - вивчити устрій структурних операторів та дослідити можливості та особливості застосування різноманітних форм структурних операторів.
- •Теоретичні відомості
- •Правила написання програм
- •Завдання
- •Методичні вказівки
- •Контрольні запитання
- •Завдання
- •Контрольні питання
- •Література
Завдання
Написати програми, які складаються з наступних дій:
Опису змінних типів int, float, unsigned short.
Ініціювання змінних, що описанні в п.1 даного завдання, значеннями згідно з варіантом (табл.2.15).
Опису змінних типів double, int, char.
Ініціювання змінних, що описанні в п.3 даного завдання, використовуючи змінні, що описанні в п.1 даного завдання, за допомогою:
неявного приведення типів;
явного приведення типів;
механізму обходу суворої типізації.
Примітка: необхідно дотримуватись порядку перечислення типів у п.1 та п.2 даного завдання.
Таблиця 2.15
№ варіанта |
int |
float |
unsigned short |
1 |
23678 |
1.23e4 |
11974 |
2 |
926 |
4.811e-1 |
1914 |
3 |
13915 |
4.78e5 |
9765 |
4 |
9742 |
-3.54e3 |
34033 |
5 |
30679 |
2.57e-4 |
2384 |
6 |
19923 |
-5.87e1 |
677 |
7 |
27652 |
7.9e3 |
74 |
8 |
17443 |
3.908e-4 |
4476 |
9 |
3841 |
954.67 |
6429 |
10 |
682 |
-8.4e2 |
25921 |
11 |
-6306 |
5.1e-1 |
126 |
12 |
37 |
95.41 |
5743 |
13 |
31765 |
-7.293e3 |
26543 |
14 |
5876 |
21.09 |
333 |
15 |
274 |
1.001e-2 |
78 |
Контрольні запитання
Що таке сумісність типів?
Що таке приведення? Яким чином и коли воно виконується?
Що таке суворо типізована мова?
Що таке явне приведення типів?
Що неявне приведення типів?
Лабораторна робота 1.9
ДОСЛІДЖЕННЯ БЛОЧНОЇ ОРГАНІЗАЦІЇ ПРОГРАМ ТА
СТРАТЕГІЙ РОЗПОДІЛУ ПАМ'ЯТІ
Мета лабораторної роботи - вивчити блочну організацію програм та стратегії розподілу пам'яті.
Теоретичні відомості
Програми мають блочну організацію, що дозволяє керувати областю дії та періодом існування програмних об’єктів для ефективного використання памяті під час виконання програм.
Область дії та період існування програмного об’єкту залежить від використання відповідної стратегії розподілу виділеної під значення об’єкту пам'яті. Існують статичний та динамічний розподіл пам'яті, останній поділяється на розподіл у блоці та «купі».
Для програм з блочною структурою характерними рисами є мембраний ефект, регулюючий область дії програмних об’єктів, та засоби його подолання.
Статичний розподіл пам’яті
Статичні програмні об’єкти існують весь час життя програми та доступні в тій частині програми, в якій вони описані. У мові Сі статичні об’єкти оголошуються з позначенням „static” в будь-якому місті програми:
<опис змінної>::=static<індикатор типу>{*}02 <ідентифікатор>;
Наприклад:
static float r1;
static float r2 = 5;
Динамічний розподіл пам’яті у блоці
Об’єкт, оголошений у блоці (між { } ), існує від точки оголошення до кінця блоку. Об’єкт видаляється з пам’яті перед виходом з блоку, при цьому значення об’єкту втрачається. Змінні в мові Сі створюються та використовуються згідно з динамічною стратегію у блоці за замовчуванням.
<опис змінної<індикатор типу>{*}02<ідентифікатор>;
<блок>::={{<опис змінної>}1n{<оператор}0m}
Наприклад:
{
auto float r1;
float r2 = 5;
r1 = r1 + r2;
}
Об’єкт, який об’явлено у певному блоці, є доступним у будь-якому вкладеному блоці. Але якщо у вкладеному блоці оголошується об’єкт з однаковим позначенням, то даний внутрішній об’єкт „перекриває” зовнішній на період існування вкладеного блоку. Це явище іменується мембранним ефектом:
void main (void)
{
int a = 1, b = 2;
{
int a = 10; // a = 10, b = 2
static int c = 3; // оголошення статичної змінної
}
// знову a = 1, b = 2. Змінна a з вкладеного блока видалена
// Змінна c існує та має значення 3, але є недоступною */
}
Динамічний розподіл пам’яті в “купі”
Динамічні об’кти у „купі” не мають власних імен та створюються та знищуються за допомогою спеціальних операцій. Доступ до цих об’ктів може бути здійснений тільки за допомогою покажчиків.
Наприклад:
<захоплення пам’яті>::=<позначка імені вказівної змінної>=new<індикатор типу>;
<звільнення пам’яті>::=delete<позначка імені вказівної змінної>;
Наприклад:
main()
{
int *pI;
pI = new int;
*pI := 25;
delete pI;
}
Глобальний дозвіл видимості імен
В мові Сі існує можливість подолання мембранного ефекту за допомогою оператора глобального дозволу видимості імен, але це стосується лише глобальних змінних:
<глобальний дозвіл>::=::<позначка імені глобальної змінної>
Наприклад:
int i = 45;
main()
{
float i = 10.1; // i = 10.1 ::i = 45
::i = ::i * 2; // i = 10.1 ::i = 90
i = i+ ::i; // i = 100.1 ::i = 90
}