Л а б о р а т о р н а р о б о т а N 4
“Програмування розгалужених та циклічних процесів на мові
Турбо Паскаль”
Мета роботи вивчення правил побудови та алгоритмів роботи
розгалужених та циклічних обчислювальних процесів
Теоретичний вступ
1. Оператори зміни послідовності обчислень
Команди програми виконуються послідовно в порядку їх запису.
Для зміни послідовності виконання команд використосуються оператори
безумовного переходу, умовні, вибору варіантів та циклу.
1.1. Оператор безумовного переходу
Оператор безумовного переходу goto призначений для
передачі управління на інший опереатор, який має мітку.
Формат оператора: goto мітка;
Мітою може бути: ціле число в діапазоні 0-9999;ідентифікатор
При роботі з операторами безумовного переходу необхідно
дотримуватися наступних правил:
1) мітка повинна бути описана в розділі label, що знаходиться
в тому самому блоці (програмі або підпрограмі), що й оператор goto;
1.2. Умовний оператор
Умовний оператор призначений для виконання певної дії в
залежності від деякої умови. Умовний опрератор може
задаватися в короткій або повній формі згідно одного із
наступних форматів:
1) коротка форма: if умова then оператор1;
2) повна форма: if умова then оператор1 else оператор2;
Це демонструється наступною схемою.
|
/ \ false
/умова\_________
\ / |
\ / |
| true |
| |
|----|----| |
|оператор1| |
|----|----| |
| |
|<----------|
|
Схема дії повного умовного оператора:
|
/ \ false
/умова\____________
\ / |
\ / |
| true |
| |
|----|----| |----|----|
|оператор1| |оператор2|
|----|----| |----|----|
| |
|<-------------|
|
Приклади умовних операторів:
const x:integer=5;x1:integer=-2;x2:integer=7;y:integer=2;
str1:string='BASIC';str2:string='PASCAL';
var ch:char;
begin
readln(ch); if x<y then x:=y;if ch in ['a'..'z'] then
writeln('символ є малою латинською буквою');
if str1<str2 then writeln('BASIC<PASCAL');
if x<=y then x:=x+y else x:=x-y;
if x>y then begin str1=str1+ch;writeln(str1)end
else begin str1=str1+' '+str2;writeln(str1) end;
Враховуючи, що після then та else може задаватися пустий
оператор, то можливі також наступні записи оператора if:
if (x<x1) or (x>x2) then
else writeln('Число x в діапазоні від',x1, 'до' x2);
if (x>=x1) and (x<=x2) then
writeln('Число x в діапазоні від',x1, 'до', x2) else;
Оператори if можуть бути вкладеними, якщо в якості
операторів 1-2 використовуються інші оператори if. Для
усунення неоднозначності дії таких операторів
використовується наступне правило: довільне else відповідає
найближчій попередній частині then, що не містить свого else.
Наступні приклади демонструють вкладеність операторів if.
var a,b,c,d:integer; a:=1; b:=2; c:=3; d:=4;
if a>b then if c<d then if c<0 then c:=0 else a:=b; {a=1}
Дія цього оператора відповідає наступній графічній схемі:
|
/ \ false
/ a>b \ ____________________
\ / |
\ / |
| true |
| |
/ \ false |
/ c<d \ ________________ |
\ / | |
\ / | |
| true | |
| | |
/ \ false | |
/ c<0 \ _________ | |
\ / | | |
\ / | | |
| true | | |
| | | |
|----|----| |----|----| | |
| c:=0 | | a:=b | | |
|----|----| |----|----| | |
|<-----------| | |
|<-------------------- |
|<------------------------
|
1.3. Оператор вибору варіантів Case
Оператор вибору варіантів призначений для вибору однієї
із декількох альтернативних дій і має наступний формат:
Case ключ_вибору of список_констант_вибору: оператор1;
{..............................}
список_констант_вибору: операторm
Else оператор11, ... , оператор1n End;
Ключ вибору - це вираз порядкового типу з порядковими
номерами елементів від -32768 до 32767 (крім типу longint).
1)var operation: char; x,y,z: real;stop:boolean;
Begin {ввід x,operation,y} stop:=false;
Case operation of
'+': z:=x+y;'-': z:=x-y;'*': z:=x*y;'/': if y<>0 then z:=x/y
else begin stop:=true; writeln('Ділення на 0') end
else stop:=true; writeln('Недопустимий код операції') end;
if not stop then { вивід z } End.
1.4. Оператори циклу
1.4.1. Оператор циклу repeat-until з постумовою
Оператор циклу з постумовою repeat-until має наступний формат:
Repeat oператор1; оператор2; {........} операторn Until умова;
В якості операторів можуть бути довільні оператори мови
Турбо-Паскаль. Умова повинна бути виразом типу boolean.
Оператори тіла циклу між ключовими словами repeat-until
виконуються послідовно до тих пір, поки умова не прийме
значення true. Ключові слова repeat-until виконують роль
операторних дужок begin-end.
|<----------|
| |
|-----|-----| |
| тіло циклу| |
|-----|-----| |
| |
| |
/ \ false |
/умова\________|
\ /
\ /
| true
|
вихід
Приклад використання оператора циклу repeat-until:
var i:integer;
Begin repeat write('Введіть число від 0 до 9');
readln(i) until (i>=0) and (i<=9); {..........} End.
1.4.2. Оператор циклу while з передумовою
Формат оператора while: While умова do оператор;
Умова - це вираз типу boolean. Дія оператора: обчислюється
значення виразу і оператор виконується до тих пір, поки
значення виразу дорівнює true. Якщо спочатку вираз приймає
значення false, то оператор не виконається ні разу:
|
|------->|
| |
| / \ false
| /умова\_________вихід
| \ /
| \ /
| |
| | true
| |-----|-----|
| |тіло циклу |
| |-----|-----|
| |
|--------|

Program fact1;
var n,p:integer;
Begin write('Введіть ціле число->'); readln(n); p:=1;
while n>0 do begin p:=p*n; n:=n-1 end;
writeln('n!=',p) End.
1.4.3. Оператор циклу for з параметром
for змінна_циклу := поч.значення to кінц.значення do оператор;
|
|-------|-------|
|обчислення |
|початкового та |
|кінцевого зна- |
|чень змінної |
| циклу |
|-------|-------|
|
|-------|-------|
| змінна_циклу:=|
| початкове |
| значення |
|-------|-------|
|----------->|
| / \
| /змінна\ false
| / циклу<= \____________вихід
| \ кінцеве /
| \ знач /
| \ /
| | true
| |
| |-------|-------|
| | тіло циклу |
| |-------|-------|
| |
| |-------|-------|
| |порядковий N |
| |змінної циклу:=|
| |порядковий N |
| |змінної циклу+1|
| |-------|-------|
| |
|------------|
Program fact2;
var n,i,p:integer;
Begin write('Введіть ціле число->'); readln(n); p:=1;
for i:=1 to n do p:=p*i; writeln('n!=',p) End.
Як вже відзначалося, змінна циклу може бути довільного
порядкового типу, крім longint.
Оператор циклу for задається також і в іншому форматі:
for змінна_циклу := поч.значення downto к.значення do оператор;
Дія оператора for-downto-to аналогічна дії оператора
for-to-do з тою різницею, що крок зміни порядкового номеру
змінної циклу дорівнює -1.
Завдання для роботи
Обчислити y=n!!, n>0, якщо
(2n-1)!!=1*3*5* ...*(2n-1), n>0;
(2n)!!=2*4*...*(2n), n>0;