Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція Паскаль(для студентів).docx
Скачиваний:
7
Добавлен:
08.02.2016
Размер:
1.4 Mб
Скачать

Програми з розгалуженням

Команди галуження — це складові командами, у яких на відміну від простих команд присутні умови, в залежності від істинності яких виконуються або не виконуються оператори, що входять до складу команди розгалуження.

Повне та неповне галуження. У Паскалі реалізовано повне та неповне галуження, а також команда вибору, що реалізована як послідовне виконання декількох структур галуження і яка передбачає вибір з декількох можливих варіантів дій.

1. Конструкція «If — Then» — неповне галуження використовується в тому випадку, коли визначені дії тільки у разі виконання умови.

IF <умова> THEN <оператор>;

Конструкція «If — Then — Else» — пов­не галуження використовується в тому випадку, коли визначені різні дії в разі виконання та невиконання умови.

IF <умова> THEN <оператор> ELSE <опе­ратор>;

2. Конструкції «Case — Of» неповний вибір або «Case — Of — Else» — повний вибір використовуються в тому випадку, коли визначені різні дії в разі декількох виходів (замінюють конструкції із вкладених операторів if).

CASE <порядкова змінна> OF <значення>: <оператори> ELSE <оператор>; END.

Прості та складені умови. Висловлювання, яке може бути істинним (правильним) або хибним (неправильним) називається умовою

Проста умова — це висловлювання, в якому два вирази з’єднані знаком операції відношення.

Складена умова — це висловлювання, в якому дві або більше простих умов з’єднані знаками логічних операцій.

У мові програмування Паскаль реалізовані операції відношеня: > — «більше»; < — «менше»; = — «дорівнює»; <> — «не дорівнює»; >= — «не менше»; <= — «не більше»; та логічні операції: not — «ні»; and — «і»; or — «або».

Висловлювання — це деяке твердження, ві­­­д­­­­­­­­н­ос­но якого можна сказати, що воно або істинне, або хибне. Таким чином, кожному висловлюванню можна приписати «0» (хибне) або «1» (істинне). Приклад: «5 — просте число» — істинне, «2 = 3 + 5» — хибне висловлювання.

За допомогою логічних операцій можна будувати з одного висловлювання інші. Побудова з даного (даних) висловлювання нового висловлювання називається логічною операцією. Знаки логічних операцій називають логічними зв’язками. Логічні операції частіше за все описуються за допомогою таб­лиць істинності.

Таблиці істинності для операцій «інверсії» (заперечення), «кон’юнкції» (логічне множення, або логічне «і»), диз’юнкції (логічне додавання, або логічне «або»).

А

B

A and B («і»)

A or B («або»)

not A («ні»)

Логічні вирази — це вирази, що складаються з висловлювань, які можуть бути з’єднані логічними зв’язками. Ці вирази набувають логічного значення («хибне» або «істинне»). Логічні вирази можуть бути простими та складеними.

 У простому логічному виразі використовуються змінні та константи логічного типу, операції порівняння. Зв’язка простих логічних виразів за допомогою логічних операцій утворює складений логічний вираз. Прості вирази записуються в складених виразах у круг­лих дужках.

 В умовному виразі задається умова розгалуження. При виконанні оператора IF цей вираз обчислюється з отриманням логічного результату. Якщо результат True, то виконується простий або складний оператор після слова Then. Якщо результат False, то виконується оператор після Else.

         Наприклад:

If A<7.2 then Y:=5*A else Y:=5/A;

         Частину оператора Else … можна не вживати:

If X>0 then K:=K+1;

            Це означає, що у випадку, коли число Х більше нуля, буде виконано оператор K:=K+1. Якщо така умова для конкретного числа хибна, то змінення К не відбувається, а управління передається на оператор, який в програмі записано після оператора If.

         Складений оператор Begin…End суттєво розширює можливості If:

         If A<0 then begin

                      K:=K+1;

                       R:=a;

                      End

         Else begin

                   L:=L+1;

                    Q:=A;

                     End;

         У складному операторі записують будь-яку кількість операторів. Вони виконуються “як одне ціле”. Тут можуть бути “свої” If, цикли, тощо.

Після оператора, який стоїть перед Else, не ставиться крапка з комою.

         Оператор Case забезпечує розгалуження на декілька напрямків.

         Загальний вигляд:

  Case індекс вибору of список вибору;

Else…; End;

 де індекс вибору – проста змінна цілого, символічного, перелічуваного або логічного типу;

         список вибору – сукупність простих або складних операторів, перед кожним з яких стоїть константа вибору, тип якої співпадає з типом індексу вибору.

         Після слова Else може стояти простий або складний оператор (ця конструкція може бути відсутня).

         Приклад:

          Case Kit of

                  1: Y:=sin(x);

                  2: Y:=cos(x);

                  3: Y:=sin(x)+cos(x);

                   Else Y:=0;

                  End; {case}

 

         Змінна Kit (цілого типу) повинна бути визначеною до виконання оператора Case. Якщо Kit дорівнює 1, обчислюється функція Y:=sin(x), якщо вона дорівнює 2, то : Y:=cos(x). У тому випадку, коли Kit відрізняється від 1, 2 або 3, буде виконано оператор Y:=0.

         У списку вибору можна вживати складний оператор Вegin… End.

Приклад: скласти програму обчислення функції

Програма:

Var X, Y, Z, F : Real;

Begin

    Write(‘Введіть Y, Z :’);

    ReadLn(Y,Z);

    Write(‘Введіть X :’);

    ReadLn(X);

    IF (X>=Y) THEN  F:=SQR(X)+EXP(Z)/COS(Y)

                     ELSE   F:=SIN(X)+COS(Z);

    WriteLn(‘Значення F=’,F);

            End.

Коментарі

_displayNameOrEmail_ - _time_ - Видалити

_text_

Цикли

Циклічними називаються обчислювальні процеси, в яких неодноразово виконуються одні й ті ж дії, але з різними даними. Тіло циклу складається з операторів, що повторюються у програмі. Для організації циклу необхідно задати початкове значення змінної, яка буде змінюватися у циклі, її кінцевого значення та крок її зміни. Треба контролювати значення цієї змінної для перевірки умови виходу з циклу. Умовою може бути: перевищення параметром циклу кінцевого значення, виконання заданого числа повторень, досягнення заданої точності обчислення.  Цикли бувають арифметичні та ітеративні. В арифметичних циклах число повторень визначається на основі зміни параметра циклу; в ітеративних циклах - цикл повторюється доти, доки не буде виконана умова виходу з циклу.  В мові Паскаль є три спеціальні оператори організації циклів: WHILE, REPEAT та FOR. Циклічними програмами називають програми, в яких реалізовано команди циклу. У Паскалі передбачено три різновиди операторів циклу: цикл із передумовою, цикл з післяумовою, цикл із лічильником (із покроковою зміною аргументу). Також реалізована робота із вкладеними циклами. Вкладені цик­ли — циклічні процеси, що допускають укладеність одних циклів в інші. Цикл із передумовою (або цикл-«поки») — це цикл, у якому тіло циклу виконується тільки у разі виконання умови, заданої перед тілом циклу. Якщо умова стає невірною, то робота циклу припиняється і керування передається оператору, наступному за оператором циклу. На мові Паскаль оператор циклу з перед­умовою ще називається «циклом While-Do». WHILE <умова> DO <оператор>; Приклад: обчислення суми перших 100 натуральних чисел методом послідовного додавання. m:=1; S: =0; WHILE m<=100 DO begin

S:=S+m;

m:=m+1;

end;

Приклад. Вивести таблицю чисел від 20 до 30, їхні квадрати та куби за допомогою команди можна while так:

i := 20;

while i <= 30 do

begin

writeln(i:4, i*i:6, i*i:8);

i :=i+1

end;

Приклад. Визначити дійсне додатне число а, для якого виконується співвідношення а/2=0 в комп’ютерній арифметиці дійсних чисел. Таке число характеризує нижню додатну межу типу даних real.

program MinRealNumber;

uses Crt;

var a : real;

begin

clrscr;

a := 1;

while a/2>0 do a := a/2;

writeln(’a =’, a); {Відповідь: а = 2.9Е-39}

readln

end.

Цикл із післяумовою (або цикл-«до») — це цикл, у якому тіло циклу виконується доти, поки умова, задана після тіла циклу, не стане правильною. Якщо умова стає правильною, то робота циклу припиняється й управління передається оператору, наступному за оператором циклу. На мові Паскаль оператор циклу з після­умовою ще називається «цикл Repeat-Until». REPEAT <оператор> UNTIL <умова>; Приклад: обчислення суми перших 100 натуральних чисел методом послідовного додавання. m:= 0; S: = 0; REPEAT m:=m +1; S:=S+m; UNTIL m >= 100; Цикл із лічильником (із покроковою зміною аргумен­ту) — це цикл, у якому тіло циклу виконується заздалегідь відому кількість разів. У різних алгоритмічних мовах реалізація цього циклу може передбачати використання аргументів різних типів, зміну аргументу на різний крок, діапазон зміни аргументу і т. д. Цикл із лічильником аргументу реалізовується таким чином: 1) аргументу надається початкове значення; 2) якщо значення входить у заданий діапазон, то виконується тіло циклу; 3) аргумент змінюється на заданий крок; виконується 2); 4) якщо значення не входить у заданий діапазон, то виконання циклу припиняється і керування передається оператору, наступному за оператором циклу. У мові Паскаль реалізовано два оператори циклу з покроковою зміною аргументу: «цикл For-То» і «цикл For-DownТо». Загальний вигляд оператора циклу з параметром (з лічильником):

for <параметр циклу>:=N1 to N2 do <тіло циклу >;

де N1 та N2 - початкове та кінцеве значення параметра циклу, тіло циклу може бути простим або складеним оператором. <Параметр циклу > ще називають лічильником циклу. Оператор for забезпечує виконання тіла циклу до тих пір, поки не будуть перебрані всі значення параметра циклу від початкового до кінцевого. Параметр циклу, його початкове та кінцеве значення повинні бути одного і того ж скалярного типу. При цьому можливий будь який стандартний тип, крім real. Якщо N1 та N2 цілі числа, а параметр циклу - цілочисельна змінна, то крок завжди рівний одиниці.

Приклад.

s:=0; for i:=1 to 20 do s:=s+i;

Для i=1, 2, 3,... , 20 буде виконуватись оператор присвоєння

S:=S+i, який накопичує в змінній S суму перших 20 натуральних чисел. Якщо N1 та N2-символьного типу, а їх значення відповідно рівні 'A' та 'Z', то параметр циклу прийматиме послідовні значення, які співпадають з алфавітом: A, B, C, D E .., Z.

Цикл по спадних значеннях параметра від N2 до N1 має вигляд:

for <параметр циклу> := N2 downto N1 do <тіло циклу>;

В цьому випадку параметр циклу приймає послідовні спадаючі значення даного типу від N2 до N1.

Приклад.

S:=0;for i:=20 to 1 do S:=S+i;

Параметр і змінюється від 20 до 1 з кроком –1.

Для оператора циклу з параметром існують деякі обмеження:оскільки параметр циклу не може бути дійсного типу, то задати крок відмінний від 1 або -1 не можна; значення параметра циклу, початкового та кінцевого значень параметрів циклу змінювати в процесі виконання не можна; увійти в цикл можна тільки через його початок, а вийти за допомогою оператора переходу по мітці, яка розташована зовні даного циклу або за допомогою однієї з процедур Exit i Halt. 

Приклади: обчислення суми перших 100 натуральних чисел методом послідовного додавання. а) S: =0; for m:=1 to 100 do S:=S+m; б) S: =0; for m:=100 downto 1 do S:=S+m; Під час реалізації циклу з покроковою зміною аргументу в Паскалі необхідно заздалегідь знати про кількість повторень тіла циклу і пам’ятати про можливість зміни лічильника циклу тільки на 1 або –1. Наприклад, роздрукувати символи латинського алфавіту можна так (за алфавітом): S := 'A'; repeatwrite(S); S := succ(S) {беремо наступне значення для S}until S > 'Z';     Висновок. Для розв'язування переважної більшості типових задач не має значення, який цикл застосовувати: while чи repeatТреба лише пам'ятати, що умови (логічні вирази) в цих командах є протилежні: у команді while логічний вираз описує умову продовження обчислень у циклі, а в команді repeat – умову виходу з циклу. Вкладені цикли

Часто буває так, що при повтореннях змінюється не одна величина, а дві (чи навіть більше). І при кожному значенні однієї величини інша величина «пробігає» усі свої значення. У деяких випадках важливо повторити підзадачу кілька разів усередині більш загальної задачі. Один зі способів написання такої програми - включити цикл у набір інструкцій, що повторюються всередині іншого циклу. Така структура, що складається з циклу в циклі, називається вкладеними циклами. Вкладення циклів використовується зокрема при розв'язуванні таких задач:

  • задачі на перебір варіантів;

  • табулювання функцій;

  • обробка двовимірних масивів.

Якщо в програмі використовуються вкладені цикли, то для підвищення наочності програмного коду прийнято кожний наступний рівень вкладання зміщувати відносно попереднього. Правило вкладення циклів: внутрішній цикл цілком укладається в тіло зовнішнього циклу. Приклад № 1. Обчислити значення змінної Y=2*K+N при всіх значеннях змінних N=1, 2, 3 і K=2, 4, 6, 8. Якщо перебирати всі значення N і K, ми повинні отримати 12 значень змінної Y. Скласти програму можна в такий спосіб: для кожного значення N перебрати всі значення К від 2 до 8, тобто N використати як параметр зовнішнього циклу, К - як параметр внутрішнього циклу. Текст програми: Program priklad_1;

var n, k, y:integer;

begin

for n:=1 to 3 do

begin

k:=2;

while k<=8 do

begin

y:=2*k+n;

writeln(n:3, k:3,y:3);

k:=k+2;

end;

end;

end. Параметр N змінюється з кроком 1, тому зовнішній цикл організований з використанням оператора For; параметр К змінюється з кроком 2, тому внутрішній цикл є циклом While. Приклад № 2. Старовинна задача. Скільки можна купити биків, корів та телят, якщо вартість одного бика - 10 руб, однієї корови - 5 руб, а за одного теля платять 0,5 рубля. І якщо на 100 рублів потрібно купити 100 голів скоту. Розв'язування: Позначимо через b кількість биків; k - кількість корів; t - кількість телят. Після цього можна записати два рівняння: 10b + 5k + 0.5t = 100 і b + k + t = 100 На 100 рублів можна купити: не більше 10 биків, тобто 0<=b<=10; не більше 20 корів, тобто 0<=k<=20; не більше 200 телят, тобто 0<=t<=200.

Отже отримуємо: Program Priklad_2;

var b, k, t:integer;

begin

for b:=0 to 10 do

for k:=0 to 20 do

for t:=0 to 200 do

if (10b + 5k + 0.5t = 100) and (b + k + t = 100) then

writeln('биків - ', b, ' корів - ', k,' телят - ',t);

end.

ДОМАШНЄ ЗАВДАННЯ

  1. Виконати в середовищі Free Pascal всі програми, які зустрічаються в лекції.

  2. Зробити письмово відповіді на контрольні запитання