Міністерство освіти і науки України
Національний університет „Львівська Політехніка”
Кафедра ЕОМ
Звіт
про виконання лабораторної роботи № 5
з курсу „Основи алгоритмізації та програмування”
Тема: Програмування розгалужених та циклiчних процесiв на мовi Паскаль.
Виконано:
стдент групи КІ-14
Сорокевич М.І.
Перевірено:
Ногаль М.В.
Львів – 2003
МЕТА РОБОТИ: Вивчити правила побудови та алгоритмiв роботи розгалужених та циклiчних обчислювальних процесiв.
Теоретичні відомості
1. Оператори зміни послідовності обчислень.
Команди програми виконуються послідовно в порядку їх запису. Для зміни послідовності виконання команд використосуються оператори безумовного переходу, умовні, вибору варіантів та циклу.
1.1. Оператор безумовного переходу.
Оператор безумовного переходу goto призначений для передачі управління на інший опереатор, який має мітку. Формат оператора: goto мітка;
В якості мітки може бути: 1) ціле число без знаку в діапазоні 0-9999;
2) ідентифікатор.
Довільний оператор Паскаля може мати одну або декілька міток. Мітки від оператора або одна від одної розділяються двокрапкою. При роботі з операторами безумовного переходу необхідно дотримуватися наступних правил:
1) мітка повинна бути описана в розділі label, що знаходиться в тому самому блоці (програмі або підпрограмі), що й оператор goto;
2) в різних підпрограмах можуть бути описані і використовуватися ті ж самі мітки. Передача управління ззовні на мітку всередині підпрограми і навпаки неможлива;
3) перехід всередину структурного оператора ( складеного, умовного,циклу, над записами) може викликати непередбачені ефекти, хоча компілятор не видаї повідомлення про помилку.
Концепція структурного програмування не рекомендує використання оператора goto, хоча він може бути корисним для швидкого виходу із вкладених циклів. Оператор goto рекомендується використовувати тільки для передачі управління вниз по програмі. При необхідності передачі управління вгору необхідно використовувати оператори циклу.
Приклад оператора безумовного переходу:
goto 5;
goto lab1;
1.2. Умовний оператор.
Умовний оператор призначений для виконання певної дії в залежності від деякої умови. Умовний опрератор може задаватися в короткій або повній формі згідно одного із наступних форматів: 1) коротка форма
if умова then оператор1;
2) повна форма if
умова then оператор1 else оператор2;
Умова - це вираз логічного (boolean) типу, а оператор1, оператор2 - довільні оператори Паскаля, в т.ч. складені (begin-end), або пусті.
Короткий умовний оператор виконується наступним чином: якщо умова приймає значення true, то виконується оператор1, інакше виконується наступний по тексту оператор. Це демонструється наступною схемою:
При виконанні повного умовного оператора обчислюєтьсявираз умови і якщо він приймає значенняtrue, то виконується оператор1, інакше виконується оператор2. Далі виконується наступний по тексту оператор. Зверніть
увагу, що перед else крапка з комою не ставиться.
Схема дії повного умовного оператора:
Приклади умовних операторів: 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;
Оператори if можуть бути вкладеними, якщо в якості операторів1-2 використовуються інші оператори if. Для усунення неоднозначності дії таких операторів використовується наступне правило: довільне else відповідає найближчій попередній частині then, що не містить свого else.
1.3. Оператор вибору варіантів Case.
Оператор вибору варіантів призначений для вибору однієї із декількох альтернативних дій і має наступний формат: Case ключ_вибору of
список_констант_вибору: оператор1;
{..............................}
список_констант_вибору: оператор m
Else оператор11, ... , оператор1n
End;
Ключ вибору – це вираз порядкового типу з порядковими номерами елементів від -32768 до 32767 (крім типу longint). Константи вибору повинні бути унікальними і мати порядковий тип, сумісний з типом ключа вибору. Константи вибору задаються списком значень, розділених комами, або діапазоном значень. Значення неповинні повторюватися, а діапазони не повинні перетинатися. В якості операторів можуть використовуватися довільні оператори Паскаля, в тому числі складені. Сукупність операторів, що йде після else брати в операторні дужки не обов'язково. Після операторів m та 1n можна ставити крапку з комою. Оператор Case обчислюї ключ вибору, знаходить його значення серед унікальних констант вибору і виконує відповідний оператор. Якщо відповідної константи не знайдено, то виконується оператор після else. Далі виконується наступний оператор програми. Вітка else може бути опущена. Приклад оператора case:
var
i:byte;
Begin
Read(i);
Case i of
0,2,4,6,8: writeln('Парні числа від 0 до 10');
1,3,5,7,9: writeln('Непарні числа від 0 до 10');
10..100 : writeln('Числа від 10 до 100')
else
writeln('Від''ємні числа або більші від 100')
end
End.
1.4. Оператори циклу.
Оператори циклу призначені для багатократного повтору виконання групи операторів. У Паскалі є три види операторів циклу.
1.4.1. Оператор циклу repeat-until з постумовою.
Оператор циклу з постумовою repeat-until має наступний формат:
Repeat
оператор1;
оператор2;
{........}
операторn
Until умова;
В якості операторів можуть бути довільні оператори мови Паскаль. Умова повинна бути виразом типу boolean. Оператори тіла циклу між ключовими словами repeat-until виконуються послідовно до тих пір, поки умова не прийме значення true. Ключові слова repeat-until виконують роль операторних дужок begin-end. Після оператора n можна ставити крапку з комою.
Тіло циклу repeat-until виконується хоч би один раз, так як виконання умови перевіряється в кінці циклу. Приклад використання оператора циклу 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, то оператор не виконається ні разу.
Після ключового слова do може бути декілька операторів. Тоді їхнеобхідно взяти в операторні дужки begin-end. Приклад застосування оператора while для обчислення факторіалу числа:
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 оператор;
Змінна циклу - це ідентифікатор простої змінної (без кваліфікаторів) порядкового типу. Початкове і кінцеве значення змінної циклу повинні мати порядковий тип, сумісний по присвоєнню з типом змінної циклу. Початкове та кінцеве значення змінної циклу обчислюється на початку виконання оператора for і не може бути змінене в тілі циклу. Зміна значення змінної циклу в тілі циклу недопустима. Після виконання оператора for значення змінної циклу стає невизначеним, якщо тільки виконання оператора for не було перервано за допомогою оператора переходу. Якщо тіло циклу складається з декількох операторів, то вони повинні охоплюватися операторними дужками begin-end. Робота оператора for-to-do демонструється наступною схемою:
Приклад використання
оператора циклу for:
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.
Як вже відзначалося, змінна циклу може бути довільного порядкового типу. У приведеному прикладі змінна i є цілого типу. Можливі також наступні оператори циклу for-to-do для інших порядкових типів змінної циклу:
var
m:char;
k:(black,,red,green,blue,white);
l:boolean;
{.............}
for m:='a' to 'z' do {........};
for k:=black to white do {........};
for l:=false to true do {........};
Оператор циклу for задаїться також і в іншому форматі:
for змінна_циклу := початкове_значення downto
кінцеве_значення do оператор;
Дія оператора for-downto-to аналогічна дії оператора for-to-do з тою різницею, що крок зміни порядкового номеру змінної циклу дорівнюї -1. Використання цього оператора циклу демонструють наступні приклади:
for i:=n downto 1 do {.....};
for m:='z' downto 'a' do {.....};
for k:=white downto black do {.....};
for l:=true downto false do {.....};
ЛІТЕРАТУРА
1.Фаронов В.В. Программирование на персональныx ЭВМ в среде Турбо-Паскаль.-М.:Изд-во МГТУ,1990.
2.Зуев Е.А. Система программирования Turbo Pascal.-М.:Радио и связь,1991.
3.Турбо Паскаль 7.0 - К.: Издательская группа BHV,1996
ВИКОНАННЯ РОБОТИ
ЗАВДАННЯ (Варіант 23):
Обчислити iнтеграл функцiї ln(2+sin x) на вiдрiзку [0,2] по формулi прямокутникiв при n=100:
b
( f(x)dx = h*[f(x1 ) + f(x2 ) + ... + f(xn )],
a
де h=(b-a)/n, xi=a+i*h-h/2.
Схематична структура циклу (
program Lab5;
{$APPTYPE CONSOLE}
uses SysUtils;
var f,S,h,x: real;
a,b,n,i: integer;
begin
writeln('Ця програма рахує інтеграл функції S=ln(2+sinx) на [0;2]');
a:=0;
b:=2;
n:=100;
f:=0;
h:=(b-a)/n;
for i:=1 to n do
begin
x:=a+i*h-h/2;
f:=f+ln(2+sin(x))
end;
S:=h*f;
writeln('Результат: S=',S);
writeln('Для виходу натисніть Enter');
readln
end.
Висновок: На цій лабораторній роботі я вивчив правила побудови та алгоритмiв роботи розгалужених та циклiчних обчислювальних процесiв, склав схему і програму із застосуванням циклу, використовуючи оператор for-to-do.