Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы по Основам программирования. Список литературы. 1 курс.docx
Скачиваний:
47
Добавлен:
19.02.2016
Размер:
139.53 Кб
Скачать

Методичні вказівки

Для моделювання на бітовому рівні арифметичних операцій та операцій відношення необхідно вміти вирішувати наступні задачі:

- визначати значення окремих бітів операнду(ів);

- формувати результат шляхом встановлення в 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

Контрольні запитання

  1. Назвіть типи структурних операторів.

  2. Що таке вектор-стан програми.

  3. Поясніть, що таке перетворювальні оператори, наведіть приклади.

  4. Поясніть значення оператора вибору, назвіть основні форми.

  5. Наведіть семантику, синтаксис та приклади умовної форми if-then.

  6. Наведіть семантику, синтаксис та приклади альтернативної форми if-then-elsе.

  7. Наведіть семантику, синтаксис та приклади охоронної форми оператора вибору.

  8. Поясніть призначення оператора повторення, назвіть його форми.

  9. Наведіть семантику, синтаксис та приклади форми do.

  10. Наведіть семантику, синтаксис та приклади форми 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”).