Здавалка
Главная | Обратная связь

Операції порівняння.



При написанні програм часто виникає потреба порівняти різні однотипні значення, або змінні, для цього використовуються операції порівняння або відношення:

< – менше;

>= – менше або дорівнює;

= – дорівнює;

> – більше;

>= – більше або дорівнює;

< > – не дорівнює.

 

В операціях порівняння повинні приймати участь однотипні дані, виключення зроблено для даних типу Real та Integer, які можна порівнювати одні з одними.

 

2.2. Тип даних Boolean та логічні операції.

 

Результатом виконання операцій порівняння для будь-яких значень – завжди буде значення типу Boolean.Булевий тип, або як його ще називають – логічний тип, задається двома значеннями: True (істинно) або False (хибно). Опис булевої змінної має такий вигляд:

var

bool: Boolean;

Розглянемо приклади:

 

bool:=5>2; значення змінної bool =True

bool:=5<>5; значення змінної bool =False

bool:=5>-5; значення змінної bool =True

bool:=5>10; значення змінної bool =False

 

В Паскалі для булевого типу найчастіше використовуються наступні операції:

 

not– логічне Не або операція заперечення, яка замінює значення свого операнда на протилежне:

 

not True =False

not False =True

тобто:

 

5>2 – прийме значення True,

not(5>2) – прийме значення False.

 

and – логічне І, результат цієї двомісної операції прийме значення True (істинно) лише тоді, коли обидва операнди будуть істинні (матимуть значення True),тобто:

 

True and True = True

True and False = False

False and True = False

False and False = False

 

Наприклад:

 

вираз (X>=1) and (X<=2) - прийме значення True,для всіх значень X з відрізку [1;2], значення False,для всіх інших значень.

 

or – логічне Або, приймає значення True(істинно) – коли хоча б один з операндів істинний (має значення True) , тобто:

 

True or True = True

True or False = True

False or True = True

False or False = False

 

Наприклад:

 

вираз (X<3) or (X>5) - прийме значення True,для всіх значень X які або менше 3, або більше 5,і значення Falseдля всі X з відрізку [3;5].

 

Зауваження: При побудові логічних виразів слід враховувати пріоритет операцій. Так як логічні операції в мові Паскаль мають вищій пріоритет, ніж операції відношення, то операції відношення зазвичай потрібно брати в дужки. Наприклад, якщо a, b, c і d – цілі змінні, то вираз

 

а = b and c < d

 

викличе повідомлення про синтаксичну помилку. Вірним буде наступний вираз:

 

(а = b) and (c < d)

 

2.3. Умовний оператор IF.

Ми вже розглядали приклади програм, в яких оператори виконуються послідовно один за одним, але іноді виникає потреба виконати ту або іншу послідовність операторів, в залежності від деякої умови. Для цього в мові Паскаль використовується – умовний оператор IF.

 

Структура умовного оператора має наступний вигляд:

 

if<умова>then<оператор1>else< оператор2>;

де if, then, else –ключові слова відповідно еквівалентні “якщо”, “то”, “інакше”;

<умова> - логічний вираз, якщо він приймає значення True (істинно), то виконується оператор, або набір операторів <оператор1>, інакше виконується оператор, або набір операторів < оператор2>.

Якщо треба, виконати групу операторів замість одного, то блок операторів виділяється ключовими словами Beginта End так:

Begin

<оператор 1>;

<оператор 2>;

<оператор n>

End;

Зауваження:

частина else< оператор2> коли альтернативні дії не передбачені, може бути відсутня;

перед elseкрапка з комою ( ; ) – не використовується.

 

Розглянемо програму, яка знаходить більше з двох чисел:

 

ProgramMaximum;

Var

a, b, max: real;

Begin

Write(’Введіть число a :’);

Readln(a);

Write(’Введіть число b :’);

Readln(b);

if a>b then

max := a

Else

max := b;

Writeln (’Максимум = ’ , max:5:3);

End.

Перевіримо роботу програми, введемо значення a = 5.5, b = -3.45, в результаті роботи програми отримаємо:

 

Введіть число a: 5.5

Введіть число b : -3.45

Максимум = 5.5

 

Отже програма в операторі ifперевірила, що значення змінної a більше за значення змінної b і присвоїла змінній max – значення змінної a.

 

Тепер знову запустимо програму, введемо значення a = 2.7, b = 9.08, та отримаємо наступний результат:

Введіть число a: 2.7

Введіть число b : 9.08

Максимум = 9.08

 

Отже, в цьому випадку умова a>b не виконується (приймає значення False),і в операторі if,виконався оператор після ключового слова else,а саме - max := b,

тобто змінній max – записалося значення змінної b.

 

Розглянемо іншу задачу – розв’язання квадратного рівняння. Нехай рівняння має вигляд , де a, b, c – задаються довільним чином і нам потрібно знайти значення коренів цього рівняння. Відомо, що квадратне рівняння має розв’язок, коли його дискримінант – невід’ємний, тобто:

,

тоді корені рівняння знаходяться за формулою . Розглянемо відповідну програму.

 

ProgramPolinom;

Var

a, b, c, D, x1, x2 : real;

Begin

Write(’Введіть коефіцієнт a :’);

Readln(a);

Write(’Введіть коефіцієнт b :’);

Readln(b);

Write(’Введіть коефіцієнт c :’);

Readln(c);

D := sqr(b) – 4*a*b;

if D>=0 then

Begin

x1 := (-b+sqrt(D))/(2*a);

x2 := (-b-sqrt(D))/(2*a);

Writeln(’x1 = ’ , x1:5:3);

Writeln(’x2 = ’ , x2:5:3)

End

Else

Writeln(’Немає коренів.’);

End.

 

Розберемо цю програму детальніше:

· на початку за вона зчитує коефіцієнти a, b, c;

· потім за допомогою функції sqr()(квадрат числа) обчислюється значення дискримінанта і запам’ятовується в змінній D:

D := sqr(b) – 4*a*b;

· далі за допомогою оператора if з’ясовуємо знак дискримінанта

if D>=0 then

· у випадку коли значення D - невід’ємне, виконується блок операторів по знаходженню і виведенню на екран коренів рівняння :

Begin

x1 := (-b+sqrt(D))/(2*a);

x2 := (-b-sqrt(D))/(2*a);

Writeln(’x1 = ’ , x1:5:3);

Writeln(’x2 = ’ , x2:5:3)

End

 

· у випадку коли значення D - від’ємне, на екран виводиться повідомлення

Немає коренів.

 

Розглянемо приклад виконання програми для значень a, b, c – 1, -3, 1 відповідно:

 

Введіть коефіцієнт a : 1

Введіть коефіцієнт b : -3

Введіть коефіцієнт c : 1

x1 = 2.618

x2 = 0.382

 

 

2.4. Мітки та оператор GOTO. Коментарі.

goto < мітка >;

Оператор безумовного переходу goto є простим оператором і означає “Перейти до”. Він використовується в тих випадках, коли після виконання якої-небудь команди чи оператора необхідно виконати не наступну по порядку команду чи оператор, а який-небудь інший. При цьому той оператор чи команда, котрі необхідно виконати, позначаються < міткою > - набором символів (літер чи цифр) не більше 127 знаків, до того ж біля мітки, яка позначає необхідний оператор, ставиться двокрапка, наприклад:

goto Mіtka1;

Mіtka1: if a<b then begin… {до виконання цього оператора приступить програма після виконання оператора Goto}

При використанні оператора goto необхідно, щоб всі мітки, які використовуються у програмі, були описані в розділі опису міток, розташованому на початку програми. Зарезервованим словом для опису міток є Label, а сам процес виглядає так:

 

Program example;

Var {розділ опису змінних}

i: integer;

label{розділ опису міток}

m1;

Begin

Write(’Введіть число і :’);

Readln(і);

ifi<0then gotom1; {якщо i менше нуля то переходимо до мітки m1}

Write(’i – невід`ємне’);

m1:

End.

В цій програмі, спочатку в змінну i зчитується ціле число, потім за допомогою оператора ifперевіряється, чи є воно від’ємним, якщо так, то за допомогою оператора gotoпереходимодо мітки m1 в кінці програми, програму завершено. Інакше, коли і – додатне або нуль, то у мова в if стає хибною, оператор gotoне виконується, а на екран виводиться повідомлення:

 

i – невід`ємне

 

В тексті цієї програми зустрічаються пояснення в фігурних дужках {…}, такі пояснення в програмуванні називаються коментарями. Коментарі не впливають на хід виконання програми, можуть використовуватись в довільному місці програми і використовуються для полегшення сприйняття тексту програми.

 

Зауваження:

областю дії мітки є той блок програми, в якому вона описана, тому спроба перейти в інший блок (чи вийти за межі блока) викличе програмне переривання.

 

Приклад 2.

Приклад 2.

Скласти програму для знаходження значень функції:

1. Спочатку визначимося з набором змінних, в формулі присутні дві змінні x та y, обидві дійсного типу, тому при оголошенні змінних можемо використати тип даних real.

2. Функція задана на трьох проміжках, тому для її опису можна двічі використати умовний оператор if.

3. Функції sin(X) та cos(X) – стандартні в мові Паскаль, а для знаходження квадрату числа можна використати функцію sqr(X).

 

Тепер запишемо програму повністю:

 

ProgramLaba_2;

Var

x, y : real;

Begin

Write(’Введіть значення X :’);

Readln(x);

if x>2 then

y := sqr(sin(x)) { значення y для X>2}

Else

if x<-2 then

y := -cos(x) { значення y для X<-2}

Else

y := 0; { значення y у решті випадків}

 

Writeln(’Значення функції Y :’ , у:5:3);

End.

Блок-схема програми:

2.6. Індивідуальні завдання.

 

1.Скласти програму для знаходження функції:

 

 

2. Скласти програму для знаходження функції:

 

3. Скласти програму для знаходження функції:

 

4. Скласти програму для знаходження функції:


5. Скласти програму для знаходження функції:


 

 

6. Скласти програму для знаходження функції:


7. Скласти програму для знаходження функції:


8. Скласти програму для знаходження функції:


 

9. Скласти програму для знаходження функції:


 

10.Скласти програму для знаходження функції:


 

11.Скласти програму для знаходження функції:


 

12.Скласти програму для знаходження функції:


 

13.Скласти програму для знаходження функції:


 

14.Скласти програму для знаходження функції:


 

15.Скласти програму для знаходження функції:


 

16.Скласти програму для знаходження функції:


 

17.Скласти програму для знаходження функції:


 

18.Скласти програму для знаходження функції:


 

19.Скласти програму для знаходження функції:


 

20.Скласти програму для знаходження функції:

 

 

21.Скласти програму для знаходження функції:


 

22.Скласти програму для знаходження функції:


 

23.Скласти програму для знаходження функції:


 

24.Скласти програму для знаходження функції:


 

25.Скласти програму для знаходження функції:


 

26.Скласти програму для знаходження функції:


 

27.Скласти програму для знаходження функції:


 

28.Скласти програму для знаходження функції:


 

29.Скласти програму для знаходження функції:


 

30.Скласти програму для знаходження функції:



 

3. Лабораторна робота №3
Оператор вибору Case.

3.1. Символьний тип даних Char.

Значення символьного типу у мові Паскаль складається з 256 символів, серед яких літери англійського і національного алфавітів, символи-роздільники, цифри та різні допоміжні символи склад яких може змінюватись в залежності від настроювання комп’ютера. Змінні символьного типу оголошуються за допомогою ключового слова char,а їх значення задаються за допомогою символу взятого в одинарні лапки. Наприклад:

ProgramName_30;

Var

c : char; {c –змінна символьного типу}

Begin

c :=’Ф’; {тепер значення змінної c – літера Ф}

Writeln(c); {виведе Ф на екран}

End.

Кожному символу за допомогою функції ORD(c) – ставиться у відповідність число з діапазону 0…255. Обернена їй функція – CHR(b), яка для кожного числа b з діапазону 0…255 повертає відповідний символ.

 

ProgramName_30;

Var

c : char;

Begin

c :=’L’;

Writeln(ORD(c)); {виведе на екран код літери L - 76}

Writeln(CHR(85)); {виведе на екран літеру з кодом 85 - U}

End.

 

3.2. Оператор вибору CASE.

Оператор вибору Case є умовним оператором і являє собою узагальнений варіант оператора IF, про який розповідалось вище. Він дозволяє зробити вибір з декількох варіантів. Параметром, за яким проводиться вибір, слугує ключ вибору – вираз цілого, булевого чи символьного типів.

Структура оператора вибору наступна:

 

Case <ключ_вибору> of

<список 1>: <оператор 1>;

<список 2>: <оператор 2>;

……….

<список N>: <оператор N>;

else <оператор N+1>;

end;{Case}

де

<ключ_вибору> - ключ

<список 1>…<список N>-одне з можливих значень, або декілька можливих значень перерахованих через кому;

<оператор 1>…<оператор N+1>- довільні оператори або блоки операторів Паскалю;

else – як і в операторі if – необов’язкова частина оператору.

Оператор вибору працює наступним чином. Спочатку обчислюється значення ключа вибору, а потім серед значень списків знаходиться значення рівне обчисленому, якщо таке значення існує, то виконується оператор, відповідний до цього значення. Якщо такого значення, не знайдено, то виконується оператор після ключового слова else.Коли ж необов’язкове ключове слово else –відсутнє, то не виконається жоден з операторів і оператор вибору Caseпросто завершить свою роботу.

 

Приклад 3.

Приклад 3.

Для прикладу розглянемо програму, яка імітує програму мікрокалькулятора. Ця програма для введених двох чисел, виконає одну з арифметичних операцій – ділення, множення, додавання чи віднімання, в залежності від того, який символ введено ’/’, ’*’, ’+’ або ’-’.

 

ProgramLaba_3;

Var

a, b, d : real; {дійсні змінні для обчислень}

ch : char; {символьна змінна для операції}

err: bool; {булева змінна для визначення невірного символу}

Begin

err := false; {вказуємо що помилки ще не було}

Write(’Введіть число a : ’);

Readln(a);

Write(’Введіть число b : ’);

Readln(b);

Write(’Задайте операцію /, *, + або - : ’);

Readln(ch);

Casech of

’/’: d:=a/b;

’*’: d:=a*b;

’+’: d:=a+b;

’-’: d:=a-b;

Else

err := true; {символ не є допустимою операцією}

End;

If err then

Writeln(’Недопустимий символ : ’, ch);

Else

Writeln(’d = ’ , c:5:3);

End.

 

В цій програмі оператор Case –використовується для визначення типу операції, якщо ввели символ ділення, множення, додавання чи віднімання, то й виконується відповідна операція і результат заноситься в змінну d. Якщо ж введений символ не відповідає жодній з вищезгаданих операцій, то спочатку в логічній змінній err присвоюється значення true, а потім виводиться повідомлення про помилку.

Результат роботи програми може мати такий вигляд:

 

Введіть число a: 2.1

Введіть число b : 3.3

Задайте операцію /, *, + або - : *

d = 6.930

 

або такий:

 

Введіть число a: 2.1

Введіть число b : 3.3

Задайте операцію /, *, + або - : ?

Недопустимий символ : ?

 

Блок-схема програми:

 

3.4. Індивідуальні завдання.

Cкласти алгоритм i програму розв’язання задач

 

1. Написати програму, що дозволяє одержати словесне найменування традиційних оцінок (2-незадовільно, 3-задовільно, 4-добре, 5-відмінно).

 

2. Написати програму яка за номером місяця виводить на екран назву пори року.

 

3. Написати алгоритм, що за номером дня тижня - цілому числу від 1 до 7 повинен видавати як результат кількість пар у групі у відповідний день.

 

4. Для кожної цифри вивести її назву (0-нуль, 1-один, 2-два і т.д.)

 

5. В залежності від того чи введена відкрита дужка або закрита, надрукувати "відкрита кругла дужка" або "закрита фігурна дужка". (Ураховувати круглі, квадратні, фігурні дужки).

 

6. Залежно від уведеного символу L, S, V програма повинна обчислювати довжину кола; площу кола; об’єм шару.

 

7. Скласти програму, що залежно від порядкового номера дня тижня (1, 2, ..., 7) виводить на екран його назву (понеділок, вівторок, ..., неділя).

 

8. Скласти програму, що залежно від порядкового номера місяця (1, 2, ..., 12) виводить на екран кількість днів у цьому місяці. (Для лютого вивести рядок ’28 або 29’)

 

9. Скласти програму, що залежно від введеного номіналу видавала б назву банкноти української валюти (1 – одна гривня, 2 – дві гривні, 5 – п`ять гривень і т.д.).

 

10. Мастям гральних карт умовно привласнені наступні порядкові номери: «піки» - 1, «трефи» - 2, «бубни» - 3, «чирви» - 4. По заданому номеру масті m (1 < m < 4) визначити назву відповідної масті.

 

11. Скласти програму, що залежно від введеного номіналу видавала б назву монети української валюти (1 – одна копійка, 2 – дві копійки, 5 - п`ять копійок і т.д.).

 

12. Гральним картам умовно привласнені наступні порядкові номери залежно від їхнього достоїнства: «валетові» - 11, «дамі» - 12, «королеві» - 13, «тузу» - 14. Порядкові номери інших карт відповідають їхнім назвам («шістка», «дев'ятка» і т.п.). За заданим номером карти k (6 < k < 14) визначити достоїнство відповідної карти.

 

13. Скласти програму, що залежно від порядкового номера місяця (1, 2, ..., 12) виводить на екран його назву (січень, лютий, ..., грудень).

 

14. Написати програму, яка б за введеним номером одиниці виміру (1 - кілограм, 2 - міліграм, 3 - грам, 4 - тонна, 5 - центнер) і масі М видавала б відповідне значення маси в кілограмах.

 

15. Написати програму, що дозволяє по останній цифрі числа визначити останню цифру його квадрату.

 

16. Для кожної введеної цифри (0-9) вивести відповідне їй назву англійською мовою (0 - zero, 1 - one, 2 - two, ...).

 

17. Залежно від уведеного символу L, S, V програма повинна обчислювати периметр квадрату; площу квадрату; об’єм куба.

 

18. Скласти програму, що за введеною літерою A, B, C, D, E, F виведе назву традиційної оцінки (A – відмінно, B і C – добре, D і E – задовільно, F - незадовільно).

 

19. Написати програму, що за номером місяця видає назву наступного за ним місяця (при m=1 одержуємо лютий, при m=4 - травень).

 

20. Написати програму, яка б за введеним номером пори року (1 - зима, 2 - весна, 3 - літо, 4 - осінь) видавала відповідній цій порі року назву місяців, кількість днів у кожному з місяців.

 

21. Для цілого числа й від 1 до 99 надрукувати фразу «Мені k років», за умови, що при деяких значеннях k слово «років» треба замінити на слово «рік» або «роки». Наприклад, 11 років, 51 рік, 22 роки.

 

22. Написати програму, яка б за введеним номером одиниці виміру (1 -дециметр, 2 - кілометр, 3 - метр, 4 - міліметр, 5 - сантиметр) і довжині відрізка L видавала б відповідне значення довжини відрізка в метрах.

 

23. Написати програму, що за введеним числом від 1 до 5 (номеру курсу) видає відповідне повідомлення «Привіт, k-курсник». Наприклад, якщо k=1, «Привіт, першокурсник»; при k=4: «Привіт, четвертокурсник».

 

24. Є пронумерований список деталей: 1) шуруп, 2) гайка, 3) гвинт, 4) цвях, 5) болт. Скласти програму, що за номером деталі виводить на екран її назву.

 

25. Написати програму, що за номером місяця видасть кількість святкових і вихідних днів у цьому році.

 

26. Скласти програму, що дозволяє по останній цифрі даного числа визначити останню цифру куба цього числа.

 

27. Визначити, чи є введена буква російського алфавіту голосною.

 

28. Визначити, чи є введена буква російського алфавіту приголосною.

 

29. Для перших десяти елементів періодичної таблиці Мендєлєєва за порядковим номером вивести назви хімічних елементів (1-водень, 2-гелій і т.д.).

 

30. Написати програму, що за номером місяця видавала б назви офіційних свят у цьому місяці (1 – Новий рік і Різдво, 3 – 8 березня і т.д.).


4. Лабораторна робота №4
Ітераційні цикли (For, Repeat, While) без використання функцій.

4.1. Оператор циклу з параметром For.

Оператори циклу або повторювання – призначені для виконання фрагментів програми (послідовності операторів) що повторюються. У мові Паскаль передбачено три види операторів циклу - оператор циклу з параметром For, оператор циклу з пост-умовою Repeat та оператор циклу з передумовою While.

Якщо кількість повторювань – наперед відома, то використовують цикл з параметром або рахунковий цикл For.

Цикл з параметром має два варіанта запису

1. for <ім’я_змінної> := <початкове_значення> to <кінцеве_значення> do <тіло_циклу>

цей цикл буде виконуватись так :

· на початку змінній <ім’я_змінної> присвоюється <початкове_значення>;

· потім перевіряється умова <ім’я_змінної> <= <кінцеве_значення>, якщо це так, то виконується <тіло_циклу> (послідовність операторів), якщо ж ні – цикл завершено, і програма перейде до наступного оператору;

· якщо цикл, ще не завершено то значення змінної <ім’я_змінної> - збільшується на 1.

 

Наприклад: вивести на екран числа від 1 до 10.

 

ProgramName_41;

Var

i : integer; {ціла змінна}

Begin

fori:=1 to10doWriteln(i);

End.

Ця програма буде виконуватись, так:

· змінній i – присвоюється значення 1;

· перевіряється умова i<=10, це дійсно так, отже на екран виводиться значення змінної i, в даному випадку - 1;

· значення i – збільшується на 1, і стає рівне 2;

· знов перевіряється істинність умови, і на екран виводиться 2;

· подібні дії виконуються до тих пір поки програма не виведе на екран число 10;

· після цього значення i – знову збільшиться на 1 і стане рівним 11;

· умова i<=10 стане хибною, завершиться цикл, і програма завершить свою роботу.

В результаті виконання програми, на екрані буде:

 

2. for < ім’я змінної := < початкове значення > downto < кінцеве_значення > do <тіло_циклу>

цей цикл буде виконуватись так :

· на початку змінній <ім’я_змінної> присвоюється <початкове_значення>;

· потім перевіряється умова <ім’я_змінної> >= <кінцеве_значення>, якщо це так, то виконується <тіло_циклу> (послідовність операторів), якщо ж ні – цикл завершено, і програма перейде до наступного оператору;

· якщо цикл, ще не завершено то значення змінної <ім’я_змінної> - зменшується на 1.

Щоб зрозуміти відмінність з попереднім варіантом, розглянемо приклад: вивести на екран числа від 1 до 5 у зворотному порядку.

 

ProgramName_42;

Var

i : integer; {ціла змінна}

Begin

fori:=5 downto 1doWriteln(i);

End.

Ця програма буде виконуватись, так:

· змінній i – присвоюється значення 5;

· перевіряється умова i >=1, це дійсно так, отже на екран виводиться значення змінної i, в даному випадку - 5;

· значення i – зменшується на 1, і стає рівне 4;

· знов перевіряється істинність умови, і на екран виводиться 4;

· подібні дії виконуються до тих пір поки програма не виведе на екран число 1;

· після цього значення i – знову зменшиться на 1 і стане рівним 0;

· умова i >=1 стане хибною, завершиться цикл, і програма завершить свою роботу.

В результаті виконання програми, на екрані буде:

 

Якщо в тілі циклу треба виконати декілька операторів, то потрібно використати ключові слова beginend;, для виділення блоку операторів.

 

Приклад: вивести послідовно суми перших членів ряду 1+1/2+1/3+1/4+... до 7. Зазначимо, що i-тий член ряду обчислюється за формулою:

а сума і – перших членів:

 

 

ProgramName_43;

Var

i : integer; {ціла змінна}

s: real;{дійсна змінна для сум}

Begin

s:=0; {спочатку сума =0}

fori:=1 to 7do

Begin

s:=s+1/i;

Writeln(s:10:3);

end;

End.

Ця програма працює наступним чином:

· на першому кроці i=1, а s=0 – при виконанні оператора s:=s+1/i, значення s обчислюється, як 0+1/1 і стає рівним 1;

· на другому кроці i=2, а s=1, значення s обчислюється, як 1+1/2 і стає рівним 1.5;

· і т.д.;

· на сьомому кроці i=7, а s= 2.45 (s – є сумою перших шести членів ряду), значення s обчислюється, як 2.45+1/7 і стає рівним 2,593;

· i збільшується на 1, стає більшим семи, цикл закінчує свою роботу.

 

В результаті на екрані отримаємо:

1,5

1,833

2,083

2,283

2,45

2,593

 

4.2. Оператор циклу з пост-умовою Repeat.

Оператор циклу з пост-умовою починається зі слова repeat, потім іде послідовність операторів, які виконуються в циклі, завершується оператор ключовим словом untilз умовою. Загальний вигляд оператора repeat…until:

Repeat

< оператори1>

.........

< операториN>

until <вираз> ;

 

Результатом виразу (умови) повинен бути результат булевого типу. Оператори, що містяться між ключовими словами repeat та until, виконуються послідовно доти, поки результат виразу не набуде значення Тrue. Послідовність операторів виконується хоча б один раз, оскільки обчислення виразу виконується після кожного виконання послідовності операторів.

 

Приклад: обчислювати суму ряду 1-1/2+1/3-1/4+1/5-... доти, доки останній з його членів не стане меншим по модулю за E=0.01. В даному випадку що i-тий член ряду по модулю обчислюється за формулою:

а сума і – перших членів:

 

 

ProgramName_43;

Var

i : integer; {ціла змінна}

s,a: real;{дійсні змінна для суми та i-го члену ряду}

znak: integer;{ціла змінна для визначення додавати чи віднімати наступний член ряду}

Begin

s:=0; {спочатку сума =0}

i:=0;

znak:=1; {так як перший член послідовності >0}

Repeat

i := i + 1; {збільшуємо i на 1}

a := 1/i; {обчислюємо і-тий член ряду}

s := s+znak*a; {сумма i – перших}

znak := -znak; {знак міняємо на протилежний}

untila<0.01;

Writeln(’i=’, i);

Writeln(’a=’, a:5:4);

Writeln(’s=’, s:5:3);

End.

При виконанні цієї програми отримаємо:

i = 101

a= 0.0099

s= 0.698

Прослідкуємо, як змінювалися значення змінних в циклі:

· на першому кроці i=0+1=1, a=1/1=1, s=0+1*1=1, znak=-1;

· на другому кроці i=1+1=2, a=1/2=0.5, s=1+(-1)*0.5=0.5, znak=1;

· на третьому кроці i=2+1=3, a=1/3=0.333, s=0.5+1*0.333=0.833,znak=-1;

· і т.д.

· на сотому i=99+1=100, a=1/100=0.01, s=0.6981+(-1)*0.01=0.6881, znak=1

· на сто першому i=100+1=101, a=1/100=0.0099, s=0.6981, znak=-1

 

Як бачимо цикл виконувався, поки а було більше або рівне 0.01 (на сотому кроці a=1/100=0.01), а як тільки a стало менше 0.01, тобто умова стала істиною - цикл завершив свою роботу.

 

4.3. Оператор циклу з передумовою While.

Оператор циклу з передумовою починається зі слова while, містить в собі вираз, який керує повторним виконанням оператора (або блоку операторів). Загальний вигляд оператора while:

while <вираз> < оператор >

 

Вираз, за допомогою якого здійснюється керування повтором оператора, повинен мати булевого тип. Обчислення його виконується до того, як внутрішній оператор буде виконаний. Внутрішній оператор виконується повторно доти, поки вираз набуває значення Тruе. Якщо вираз спочатку набуває значення False, то оператор, який міститься всередині оператора циклу з передумовою, не виконується.

Звуваження:

· на відміну від оператора repeatв у випадку блоку операторів необхідно використовувати ключові слова begin…end;

· оператор while –виконується доти, поки логічний вираз приймає значення Тruе, repeat –поки логічний вираз приймає значення False.

Розглянемо розв’язання попередньої задачі за допомогою оператора while:

 

ProgramName_44;

Var

i : integer; {ціла змінна}

s,a: real;{дійсні змінна для суми та i-го члену ряду}

znak: integer;{ціла змінна для визначення додавати чи віднімати наступний член ряду}

Begin

s:=0; {спочатку сума =0}

i:=0;

znak:=1; {так як перший член послідовності >0}

a:=1; {a – присвоюємо таке значення, що б виконувалась умова циклу}

whilea>=0.01 do

Begin

i := i + 1; {збільшуємо i на 1}

a := 1/i; {обчислюємо і-тий член ряду}

s := s+znak*a; {сумма i – перших}

znak := -znak; {знак міняємо на протилежний}

end;

Writeln(’i=’, i);

Writeln(’a=’, a:5:4);

Writeln(’s=’, s:5:3);

End.

Як бачимо в порівнянні з попередньою програмою, умова змінилася на протилежну - a>=0.01, і довелося присвоювати змінній a початкове значення, для того щоб цикл виконався перший раз.

Результат виконання програми:

i = 101

a= 0.0099

s= 0.698

повністю співпадає з результатом попереднього прикладу.

Приклад 4.

Приклад 4.

Скласти програму для обчислення суми членів ряду:

з точністю до члена ряду, що по модулю менше E=0.00001.

1. Перший член цього ряду обчислюється за формулою:

де .

Отже за допомогою циклу For необхідно обчислити значення (n+1)!, цей фрагмент програми можна виконати так:

Var

i : integer; {ціла змінна для циклу}

n: integer; {змінна для значення n}

d: real; {дійсна змінна для добутку (факторіалу)}

а: real; {дійсна змінна для членів ряду}

x:real; {дійсна змінна для значення X}

Begin

Readln(n,x); {зчитуємо значення n та x}

d :=1;

fori:=1 to n+1dod:=d*i; {так знаходимо (n+1)!}

a:=x/d; {так знаходимо a0}

{…}

End.

2. Наступний член ряду – можна обчислити за допомогою попереднього:

3. Не важко помітити, що аналогічно знаходиться значення :

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

тобто ці значення можна підрахувати за допомогою циклу, наприклад:

i:=0; {початкове значення i}

s:=0; {спочатку сума =0}

Whileabs(a) >= 0.00001do {виконуємо поки модуль a >= 0.00001}

Begin

i := i + 1; {збільшуємо i на 1}

a:=-sqr(x)*a/(n+i+1); {знаходимо ai}

s:=s+a; {знаходимо si}

end;

4. Тепер запишемо програму повністю:

 

ProgramLaba_4;

Const

E=0.00001; {задаємо значення E за допомогою константи}

Var

i : integer; {ціла змінна для циклу}

n: integer; {змінна для значення n}

d: real; {дійсна змінна для добутку (факторіалу)}

а: real; {дійсна змінна для членів ряду}

x:real; {дійсна змінна для значення X}

Begin

Write(’Введіть значення X :’);

Readln(x);

Write(’Введіть значення N :’);

Readln(n);

d :=1;

fori:=1 to n+1dod:=d*i; {так знаходимо (n+1)!}

a:=x/d; {так знаходимо a0}

i:=0; s:=0; {початкове значення i, s}

Whileabs(a) >= Edo {виконуємо поки модуль a >= E}

Begin

i := i + 1; {збільшуємо i на 1}

a:=-sqr(x)*a/(n+i+1); {знаходимо ai}

s:=s+a; {знаходимо si}

end;

Writeln(’i=’, i);

Writeln(’a=’, a:10:6);

Writeln(’s=’, s:10:5);

End.

Виконаємо програму для значень X=5.0 і N=4, отримаємо результат:

 

Введіть значення X : 5.0

Введіть значення N : 4

i=59

a= -0,000006

s= -0,17260

Блок-схема програми:

4.5. Індивідуальні завдання.

Скласти алгоритм i програму розв’язання задач

1. Обчислити суму членів ряду:

з точністю до члена ряду, що менше E=0.0001.

 

2. Обчислити суму членів ряду:

з точністю до 0,0001.

3. Обчислити суму членів ряду:

з точністю до члена ряду, що менше E=0.00001.

 

4. Обчислити суму членів ряду:

з точністю до члена ряду, що менше 10-4.

 

5. Обчислити суму членів ряду:

з точністю до члена ряду, що менше E.

 

6. Обчислити суму членів ряду:

з точністю до члена ряду, що менше 10-6.

 

7. Обчислити суму членів ряду:

з точністю до члена ряду, що менше 10-6.

 

8. Обчислити значення функції exp з точністю до п’ятого знака, використовуючи розкладення в ряд Тейлора:

 

9. Обчислити значення функції cos з точністю до п’ятого знака, використовуючи розкладення в ряд Тейлора:

10. Обчислити суму членів ряду:


з точністю до члена ряду, що менше E.

 

11. Обчислити з точністю до п’ятого знака:

з точністю до члена ряду, що менше E.

 

12. Обчислити суму членів ряду:

з точністю до члена ряду, що менше 10-4.

13. Обчислити arctg використовуючи наступне розкладання в ряд:
для x>1

Обчислення провести з точністю до шостого знака.

 

14. Обчислити значення функції sinз точністю до п’ятого знака, використовуючи розкладення в ряд Тейлора:

15. Обчислити суму членів ряду:

з точністю до члена ряду, що менше 10-4.

 

16. Обчислити суму членів ряду:

з точністю до члена ряду, що менше 10-4. Для визначеного поточного члена ряду використовувати рекурентну формулу: де n - номер члена ряду. Початкове значення y взяти рівним .

17. Обчислити суму членів ряду:

 

з точністю до члена ряду, що менше E.

18. Скласти програму обчислення відрізка ряду:
x = 0,56. Розрахунки припинити, якщо .

19. Скласти програму обчислення функцiї , використовуючи ітераційну формулу: .
Розрахунки припинити, якщо .

20. Обчислити з точністю E, використовуючи співвідношення: .

21. Знайти значення змінної для кожного із значень x, розташованих на інтервалі (-2; 2) з кроком 0,5, з точністю до 0,0001 .
Роздрукувати таблицю значень y і x.

22. Знайти значення змінної з точністю до 0,00001 для значень x, розташованих на інтервалі (0; 1) з кроком 0,25.
Роздрукувати таблиці значень y і x.

23. Обчислити значення змінної з точністю E для значень x, розташованих на інтервалі (-1; 2) з кроком 0,25. Роздрукувати таблицю значень p і x.

24. Знайти значення змінної з точністю до 0,00001 для значень x, розташованих на інтервалі (0; 1) з кроком 0,25; на інтервалі (0; 3) з кроком 0,5. Роздрукувати таблицю значень y і x.

25. Знайтиметодом Ньютона корінь рівняння -cos(2x)
з точністю до 10-4, взявши як перше приблизне значення кореня x=0. Наступні наближення знаходяться за формулою: ,
де f `(x) - похідна від функції f(x).

26. Обчислити з точністю до четвертого знака, використовуючи співвідношення: .

27. Скласти програму обчислення відрізка степеневого ряду.

x=0,56.
Розрахунки припинити, якщо .

28. Знайти значення змінної з точністю до 0,0001 для значень x, розташованих на інтервалі (0; 1.5) з кроком 0,25. Роздрукувати таблиці значень y і x.

29. Знайти значення змінної з точністю до 0,0001 для значень x, розташованих на інтервалі (0; 2) з кроком 0,4. Роздрукувати таблицю значень y і x.

30. Обчислити значення змінної з точністю до 0,0001, для значень x, розташованих на інтервалі (-1; 2) з кроком 0,25. Роздрукувати таблицю значень d і x.

 


5. Лабораторна робота №5
Вивчення циклів з використанням функцій.







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.