Мета лабораторної роботи - вивчити устрій структурних операторів мов Паскаль та Сі та дослідити можливості та особливості застосування різноманітних форм структурних операторів.
Теоретичні відомості
Оператор
Паскаль, Сі:
<оператори базису>::= <оператор опису>|<оператор привласнення>|
<структурний оператор>
<оператор>::=<оператор привласнення>|<структурний оператор>
Структурні оператори
А) Складений оператор
Паскаль:
<складений оператор>::= begin{<оператор>}2end;
Сі:
<складений оператор>::={{<оператор>}2}
б) Оператор вибору (умовна форма)
Паскаль:
<оператор вибору>::=if<вираз відношення>then<оператор>
Наприклад:
if flag = true then { flag – змінна логічного типу}
begin
iA:= iA + 10; { iA – змінна цілого типу}
flag:= false;
end;
Сі:
<оператор вибору>::=if (<вираз відношення>)<оператор>
<вираз відношення>::=<вираз><операция відношеня><вираз>
Наприклад:
if (flag == 1) // flag – змінна цілого типу
{
iA = iA + 10;
flag = 0;
}
в) Оператор вибору (альтернативна форма)
Паскаль:
<оператор вибору>::=if<вираз відношення>then<оператор>else<оператор>
Наприклад:
if flag = true
iA:= iA * 10;
else
begin
iA:= iA + 10;
flag:= true;
end;
Сі:
<оператор вибору>::=if (<вираз відношення>)<оператор>;else<оператор>
Наприклад:
if (flag == 1)
{
iA = iA * 10;
flag = 0;
};
else
{
iA = iA + 10;
flag = 1;
}
г) Оператор вибору (охоронна форма/перемикач)
Паскаль:
<оператор вибору>::=case< вираз >of{<вариант вибору>}0
{else<оператор>}01 end
<вариант вибору>::={<літерал {..<літерал>}0 {,}0 }1: <оператор>
Наприклад:
case cB of { cB – змінна символьного типу}
‘A’: iA:= iA +10;
‘B’, ‘C’: iA:= iA +20;
‘D’: iA:= iA +30;
else iA:= iA +100;
end;
Сі:
<оператор вибору>::=switch (< вираз >){{ case<вариант вибору> }1
{default: <оператор>}01 }
<вариант вибору>::=<R - вираз>: <оператор> break;
Наприклад:
switch cB
{
case ‘A’: {iA = iA +10; break;}
case ‘B’: {iA = iA +20; break;}
case ‘C’: {iA = iA +30; break;}
default: iA = iA +100;
}
д) Оператор повторення (форма repeat-until / do-while)
Паскаль:
<оператор повторення>::=repeat <оператор>until<вираз відношення>
Наприклад:
iMounth:= 1; { iMounth – змінна цілого типу}
repeat { iAccount – змінна дійсного типу}
iAccount:= iAccount + iAccount/100;
iMounth:= iMounth + 1;
until iMounth<=12;
Сі:
<оператор повторення>::=do<оператор>while(<вираз відношення>)
Наприклад:
iMounth = 1;
do
{
iAccount = iAccount + iAccount/100;
iMounth = iMounth + 1;
}
while (iMounth<=12);
е) Оператор повторення (форма while-do)
Паскаль:
<оператор повторення>::=while<вираз відношення>do<оператор>
Наприклад:
iMounth:= 1;
while iMounth <= 12 do
begin
iAccount:= iAccount + iAccount / 100;
iMounth:= iMounth + 1;
end;
Сі:
<оператор повторення>::=while(<вираз відношення>)<оператор>
Наприклад:
iMounth = 1;
while (iMounth <= 12)
{
iAccount = iAccount + iAccount/100;
iMounth = iMounth + 1;
}
ж) Оператор повторення (форма for-step-do)
Паскаль:
<оператор повторення>::=for < оператор привласнення >to|downto
<вираз> {step<вираз> }01do<оператор>
Наприклад:
for iMounth:= 1 to 12 do
begin
iAccount:= iAccount + iAccount / 100;
if iMounth > 6 then
iAccount:= iAccount + iAccount * 0.05;
end;
Сі:
<оператор повторення>::=for ({< оператор привласнення >}01;
{<вираз відношення>}01;{< оператор привласнення >}01){<оператор>}01
Наприклад:
for (iMounth = 1; iMounth <= 12; iMounth = iMounth + 1)
{
iAccount = iAccount + iAccount / 100;
if (iMounth > 6)
iAccount = iAccount + iAccount * 0.05;
}
Правила написання програм
При написанні складених операторів розташовуйте операторні дужки та оператори, які входять у складений, в окремих рядках програми, розміщуючи вміст складеного оператора всередину операторних дужок.
При написанні операторів вибору розташовуйте частини “then” і “else” окремо, розміщуючи їхній вміст окремо, кожний оператор на окремому рядку програми.
Розташовуйте кожний оператор у варіанті вибору (охоронна форма) на окремому рядку.
При написанні операторів повторення (циклу) розташовуйте тіло циклу окремо від заголовку, а в тілі циклу кожний оператор розташовуйте на окремому рядку.
Не використовуйте, якщо не потрібно, дужок складеного оператора.
Не ставте однакових операторів у гілці операторів вибору.
Не використовуйте охоронну форму оператора вибору, замінюйте її альтернативною.
Не пишіть вироджених циклів, таких що не виконуються ані разу або можуть бути замінені явним повторенням (вибором).
Не вводьте у цикл операторів, не зв'язаних з повторенням.
Завдання
1. Вивчити устрій (синтаксис та семантику) наступних операторів Паскаль та Сі: складеного, вибору і повторення.
2. Написати програми на мовах Паскаль та Сі, що демонструють застосування різноманітних форм операторів вибору та повторення.
4. Написати програми на мовах Паскаль та Сі, які моделюють на бітовому рівні операції згідно з варіантом (табл.18). Для перевірки вірності роботи програм використати значення з варіанта.
Таблиця 18
№ варіанта | Мова | Операція | Операнд | Значення для перевірки | ||
Паскаль | Лічильник збільшення на 1 | -25 | ||||
Сі | Операція відношення > | |||||
-7 | ||||||
Паскаль | Лічильник зменшення на 1 | -37 | ||||
Сі | Операція відношення = = | -8 | ||||
Паскаль | Операція відношення < | -77 | ||||
-77 | ||||||
Сі | Операція додавання + | -10 | ||||
Паскаль | Операція відношення > | |||||
Сі | Лічильник збільшення на 1 | -18 | ||||
Паскаль | Операція відношення = = | |||||
-2 | ||||||
Сі | Лічильник зменшення на 1 | -255 | ||||
Паскаль | Операція додавання + | -52 | ||||
Сі | Операція відношення < | -2 | ||||
Паскаль | Лічильник збільшення на 1 | -87 | ||||
Сі | Операція відношення < | -8 | ||||
Паскаль | Лічильник зменшення на 1 | -24 | ||||
Сі | Операція відношення > | |||||
-7 | ||||||
Паскаль | Операція відношення < | -6 | ||||
-10 | ||||||
Сі | Лічильник збільшення на 1 | -128 | ||||
Паскаль | Операція відношення > | -1 | ||||
-12 | ||||||
Сі | Лічильник зменшення на 1 | -15 | ||||
Паскаль | Операція відношення = | -57 | ||||
-57 | -10 | |||||
Сі | Операція додавання + | -3 | ||||
Паскаль | Операція додавання + | -12 | ||||
Сі | Операція відношення = | -21 | ||||
-21 | ||||||
Паскаль | Лічильник збільшення на 1 | -43 | ||||
Сі | Операція відношення = | |||||
Паскаль | Лічильник зменшення на 1 | -92 | ||||
Сі | Операція відношення < | |||||
Паскаль | Операція відношення > | |||||
Сі | Операція додавання + | |||||
-73 |
Методичні вказівки
Для моделювання на бітовому рівні арифметичних операцій та операцій відношення необхідно вміти вирішувати наступні задачі:
- визначати значення окремих бітів операнду(ів);
- формувати результат шляхом встановлення в 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 = 1 10012 | iBitA = iA and (1 shl 4) = 16 => 1 | => 1<>0 => iA<>iB |
iB = 910 = 0 10012 | iBitB = iB and (1 shl 4) = 0 => 0 |
Для вирішення завдання моделювання операцій додавання та лічильника недостатньо вміти визначати значення окремих бітів операндів, але потрібно формувати результуюче значення, використовуючи його бітове представлення. Для цього використовуються маска та бітові операції «зсув ліворуч», «АБО», «АБО, що виключає»:
Наприклад:
Операція додавання +
iA = 2510 = 110012
iB = 910 = 010012
iSum = 3410 = 1 000 1 02
Результат iSum формується встановленням в 1 першого та п’ятого бітів, тобто:
1) iSum = 0, iSum = 010 = 02
2) iSum = iSum or (1 shl 1), iSum = 210 = 000 1 02
3) iSum = iSum or (1 shl 5), iSum = 3410 = 1 000 1 02
Лічильник, або операції зменшення чи збільшення на одиницю не зводяться до операції додавання. Для отримання результату лічильника необхідно використовувати певні закономірності перетворення значень та застосовувати їх при побудові алгоритму для вирішення задачі.
Наприклад, при зменшені числа на одиницю в результуючому значенні всі біти, що дорівнюються 0, починаючи з молодшого, та перший слідуючий за ними біт, що дорівнюється 1, інвертуються, а старші залишаються незмінними. Для інвертування відповідних бітів використовується операція «АБО, що виключає».
Наприклад:
Лічильник зменшення на 1
iA = 2510 = 110012
iA – 1 = 2410 = 1100 0 2
1) iA = iA xor (1 shl 0), iA = 2410 = 1100 0 2
iA = 2410 = 110002
iA – 1 = 2310 = 1 0111 2
1) iA = iA xor (1 shl 0), iA = 2510 = 1100 1 2
2) iA = iA xor (1 shl 1), iA = 2710 = 110 1 12
3) iA = iA xor (1 shl 2), iA = 3110 = 11 1 112
4) iA = iA xor (1 shl 3), iA = 2310 = 1 0 1112
Контроль знань та вмінь
Таблиця вмінь
Таблиця 19
Бінарні операції | |||||||||||
лічильник | відношення | додавання | |||||||||
+ | - | = | > | < | + | ||||||
с | п | с | п | с | п | с | п | с | п | с | п |
Контрольні запитання
1 Що таке система обчислення, позиційна система обчислення?
2 Визначте десяткову, вісімкову, шістнадцяткову, двійкову системи обчислення?
3 Як здійснюється перетворення значень, наведених у різних системах обчислення?
4 Наведіть загальні поняття подання значень в ЕОМ.
5 Наведіть подання значень з фіксованою точкою.
6 Наведіть подання негативних значень.
7 Що таке доповнення і для чого воно використовується?
8 Що таке плаваюча точка, дайте загальне поняття?
9 Наведіть точність арифметики в системі з плаваючою точкою.
10 Як здійснюється подання шістнадцяткових значень?
11 Як здійснюється подання символьних значень?
Література: [1]; [3]; [6]; [7].