- •Створення, виконання та відлагодження програм в інтегрованих середовищах програмування
- •Завдання
- •Дослідження цілих та дійсних типів та операцій над значеннями даних типів
- •Опис програмних об’єктів
- •Ініціалізація змінних при створенні
- •Оператор привласнення
- •Операції над значеннями цілих та дійсних типів
- •Загальна спрощена структура програми
- •Методичні вказівки Правила складання ідентифікаторів
- •Правила опису об’єктів у програмі
- •Завдання 1
- •Завдання 2
- •Завдання 3
- •Дослідження бітових операцій над цілими значеннями
- •Бітові операції
- •Завдання
- •Дослідження логічних типів, логічних операцій та операцій відношення
- •Завдання
- •Лабораторна робота 1.5 дослідження вказівних типів та операцій над значеннями даних типів
- •Завдання
- •Лабораторна робота 1.6 дослідження символьних типів
- •Завдання
- •Лабораторна робота 1.7 дослідження виразів
- •Теоретичні відомості
- •Методичні вказівки Правила написання операторів привласнення та виразів
- •Завдання
- •Контрольні запитання
- •Завдання
- •Контрольні запитання
- •Мета лабораторної роботи - вивчити блочну організацію програм та стратегії розподілу пам'яті.
- •Динамічний розподіл пам’яті у блоці
- •Методичні вказівки Правила написання програм
- •Своєчасно звільняйте пам'ять, “захоплену” в “купі” (оператори dispose/ delete) Завдання
- •Контрольні запитання
- •Лабораторна робота 1.10
- •Дослідження структурних операторів
- •Мета лабораторної роботи - вивчити устрій структурних операторів та дослідити можливості та особливості застосування різноманітних форм структурних операторів.
- •Теоретичні відомості
- •Правила написання програм
- •Завдання
- •Методичні вказівки
- •Контрольні запитання
- •Завдання
- •Контрольні питання
- •Література
Методичні вказівки
Для моделювання на бітовому рівні арифметичних операцій та операцій відношення необхідно вміти вирішувати наступні задачі:
- визначати значення окремих бітів операнду(ів);
- формувати результат шляхом встановлення в 0 чи 1 певних бітів результуючого значення.
При цьому, реалізація операцій відношення потребує вирішення лише першої задачі, тоді як реалізація арифметичних операцій вимагає виконання обох задач.
Для визначення значення окремого n-го біту (sizeof(тип значення) >= n >= 0) операнду необхідно використовувати маску, що дорівнює 1, та бітові операції «І» та «зсув ліворуч». Наприклад, щоб дізнатись значення п’ятого біту вмісту цілої змінної iA необхідно виконати наступні перетворення:
iBitA := iA and (1 shl 5) (Паскаль) або iBitA = iA & (1 << 5) (Сі).
Якщо значення iBitA дорівнюється 0, п’ятий біт числа iA також є рівним 0, якщо будь якому додатному значенню, біт дорівнюється 1.
Порівнюючи значення відповідних бітів заданих операндів, можна визначити за їхнім бітовим представленням, який з операндів є більшим, меншим, тощо.
Наприклад:
Операція відношення = =
iA = 2510 = 110012 |
iBitA = iA and (1 shl 4) = 16 => 1 |
=> 1<>0 => iA<>iB |
iB = 910 = 010012 |
iBitB = iB and (1 shl 4) = 0 => 0 |
Для вирішення завдання моделювання операцій додавання та лічильника недостатньо вміти визначати значення окремих бітів операндів, але потрібно формувати результуюче значення, використовуючи його бітове представлення. Для цього використовуються маска та бітові операції «зсув ліворуч», «АБО», «АБО, що виключає»:
Наприклад:
Операція додавання +
iA = 2510 = 110012
iB = 910 = 010012
iSum = 3410 = 1000102
Результат iSum формується встановленням в 1 першого та п’ятого бітів, тобто:
1) iSum = 0, iSum = 010 = 02
2) iSum = iSum or (1 shl 1), iSum = 210 = 000102
3) iSum = iSum or (1 shl 5), iSum = 3410 = 1000102
Лічильник, або операції зменшення чи збільшення на одиницю не зводяться до операції додавання. Для отримання результату лічильника необхідно використовувати певні закономірності перетворення значень та застосовувати їх при побудові алгоритму для вирішення задачі.
Наприклад, при зменшені числа на одиницю в результуючому значенні всі біти, що дорівнюються 0, починаючи з молодшого, та перший слідуючий за ними біт, що дорівнюється 1, інвертуються, а старші залишаються незмінними. Для інвертування відповідних бітів використовується операція «АБО, що виключає».
Наприклад:
Лічильник зменшення на 1
iA = 2510 = 110012
iA – 1 = 2410 = 110002
1) iA = iA xor (1 shl 0), iA = 2410 = 110002
iA = 2410 = 110002
iA – 1 = 2310 = 101112
1) iA = iA xor (1 shl 0), iA = 2510 = 110012
2) iA = iA xor (1 shl 1), iA = 2710 = 110112
3) iA = iA xor (1 shl 2), iA = 3110 = 111112
4) iA = iA xor (1 shl 3), iA = 2310 = 101112
Контрольні запитання
Назвіть типи структурних операторів.
Що таке вектор-стан програми.
Поясніть, що таке перетворювальні оператори, наведіть приклади.
Поясніть значення оператора вибору, назвіть основні форми.
Наведіть семантику, синтаксис та приклади умовної форми if-then.
Наведіть семантику, синтаксис та приклади альтернативної форми if-then-elsе.
Наведіть семантику, синтаксис та приклади охоронної форми оператора вибору.
Поясніть призначення оператора повторення, назвіть його форми.
Наведіть семантику, синтаксис та приклади форми do.
Наведіть семантику, синтаксис та приклади форми while.
Лабораторна робота 1.11
ВИКОРИСТАННЯ СТРУКТУРНИХ ОПЕРАТОРІВ ПРИ ОБРОБЦІ ПОСЛІДОВНОСТЕЙ ЗНАЧЕНЬ
Мета лабораторної роботи – вивчити можливості та особливості адресної арифметики в Сі.
Теоретичні відомості
Типізовані покажчики мови С дозволяють виконувати з ними наступні операції:
додавання цілого літералу;
віднімання цілого літералу;
віднімання вмісту покажчика від вмісту іншого покажчика;
порівняння покажчиків.
Адресна арифметика мови С є механізмом, який забезпечує створення та доступ до індексованої послідовності значень за допомогою покажчиків відповідного типу.
Приклад:
int * pIntSq ; // оголошення покажчика на ціле
pIntSq = new int [10]; // захоплення пам’яті в «купі» для
// зберігання десяти цілих значень
for ( i = 0; i < 10; i ++ )
{
* ( pIntSq + i ) = i + 1; // створення послідовності 1 .. 10
}
delete [] pIntSq; // звільнення пам’яті в «купі»
Елементи індексованої послідовності значень розташовуються у певному безперервному просторі пам’яті. Наприклад, вираз *(pIntSq + 1) забезпечує доступ до другого елементу послідовності (третя адресна комірка після той, на яку вказує покажчик “pIntSq”).