Головна

Then begin

  1. A BEGINNER'S GUIDE
  2. Anti-tobacco treaty begins
  3. Else begin
  4. jmp begin
  5. Match the beginning and the ending of a sentence.
  6. The beginning of a restaurant business
  7. The Beginning of Formal Education

<команди 1>

End

Else If < логічний вираз 2>

Then begin

<команди 2>

End

Else begin

<команди 3>

End;

15. · Поясніть хід виконання послідовності команд:

If < логічний вираз 1>

Then begin

<команди 1>

End;

If < логічний вираз 2>

Then begin

<команди 2>

End;

Виконайте завдання

1. º Виконайте алгоритм:

1. Задумати два цілих числа.

2. Обчислити суму задуманих чисел.

3. Порівняти "Знайдена сума більша, ніж 30?".

4. Якщо істина, то повідомити "Більше" і виконати команду 8; якщо хиба, то виконати команду 5.

5. Порівняти "Знайдена сума менша, ніж 30".

6. Якщо істина, повідомити "Менше" і виконати команду 8, якщо хиба і, виконати команду 7.

7. Повідомити "Дорівнює".

8. Закінчити виконання алгоритму

Які числа ви задумали і який результат отримали? Яку назву можна дати цьому алгоритму або яку задачу розв'язує цей алгоритм?

2. (ДЗ)· Складіть блок схему алгоритму, наведеного в № 1. Виконайте цей алгоритм для трьох різних пар цілих чисел. Підберіть ці пари так, щоб кожного разу виконання алгоритму йшло по-іншому.

3. · Складіть блок-схему алгоритму обчислення значення виразу: (a + b) - c : a. Виконайте його при різних значеннях a, b, c. Підберіть числа так, щоб кожного разу виконання алгоритму йшло по-іншому.

4. (ДЗ) · Складіть блок-схему алгоритму обчислення значення виразу: (a + b) - c : (a-2b). Виконайте його при різних значеннях a, b, c. Підберіть числа так, щоб кожного разу виконання алгоритму йшло по-іншому.

5. · Складіть блок-схему алгоритму знаходження x з рівняння: ax = b. Виконайте його при: 1) a = 2; b = -8; 2) a = 20; b = 0; 3) a = 0; b = 12; 4) a = 0; b = 0.

6. (ДЗ) · Складіть блок-схему алгоритму знаходження x з рівняння: ax + b = c. Виконайте його при: 1) a = 2; b = - 8; c = 18; 2) a = 20; b = 5; c = 5; 3) a = 0; b = 12; c = 3; 4) a = 0; b = 10; c = 10.

7. * Складіть блок-схему алгоритму розв'язування квадратного рівняння. Виконайте його при різних значеннях коефіцієнтів рівняння.

8. (ДЗ) * Є деяка кількість однакових на вигляд монет. Відомо, що серед них є одна фальшива і вона важча за справжню. Складіть алгоритм виявлення фальшивої монети найменшою кількістю зважувань на шалькових терезах без гир, якщо кількість монет дорівнює: 1) 3; 2) 9; 3) 27; 4) 30.

9. · (ДЗ) Створіть проект, який визначає більше з двох нерівних дійсних чисел. Створіть у власній папці папку Проект 2.8.9 і збережіть у ній проект.

10. · Створіть проект, який визначає менше з двох довільних дійсних чисел або виводить повідомлення, що числа рівні. Створіть у власній папці папку Проект 2.8.10 і збережіть у ній проект.

11. º (ДЗ) Створіть проект, який обчислює модуль довільного дійсного числа. Створіть у власній папці папку Проект 2.8.11 і збережіть у ній проект.

12. * Створіть проект, який визначає найменше число серед трьох нерівних чисел. Створіть у власній папці папку Проект 2.8.12 і збережіть у ній проект.

13. * Створіть проект, який за градусною мірою двох кутів трикутника обчислює градусну міру третього кута і визначає вид цього трикутника за його кутами (гострокутний, прямокутний або тупокутний). Створіть у власній папці папку Проект 2.8.13 і збережіть у ній проект.

14. * Створіть проект, в якому кнопка буде переміщуватися на 20 пікселів вправо при наведенні на неї вказівника. Після того, як кнопка зникне за правою границею вікна, вона повинна з'явитися біля лівої його границі. Створіть у власній папці папку Проект 2.8.14 і збережіть у ній проект.

15. * Створіть проект для визначення, чи можна з чотирьох відрізків з заданими довжинами скласти паралелограм. Створіть у власній папці папку Проект 2.8.15 і збережіть у ній проект.

16. · (ДЗ) Створіть проект, в якому можна обчислити значення функції .

Створіть у власній папці папку Проект 2.8.16 і збережіть у ній проект.

17. · Створіть проект, в якому можна обчислити суму, або різницю, або добуток або частку двох довільних дійсних чисел у залежності від вибраного перемикача. Створіть у власній папці папку Проект 2.8.17 і збережіть у ній проект.

18. ·(ДЗ) Створіть проект, в якому можна обчислити суму, різницю, добуток, частку двох довільних дійсних чисел у залежності від встановлених позначок прапорців. Створіть у власній папці папку Проект 2.8.18 і збережіть у ній проект.

19. · Робітник виготовляє деталі. Відомо, скільки деталей він повинен виготовити за місяць (план), кількість реально виготовлених ним деталей і вартість однієї деталі. Якщо робітник виконує план, то він одержує премію в розмірі 10% від заробленої в результаті виготовлення деталей суми. Якщо робітник перевиконує план, то його премія становить 30% від заробленої суми. А якщо він недовиконає план, то з нього знімається 20% від заробленої суми. Створіть проект, який визначає суму, зароблену робітником за місяць. Створіть у власній папці папку Проект 2.8.19 і збережіть у ній проект.

Практична робота № 8

«Складання програм з розгалуженнями»

Увага! Під час роботи з комп'ютером дотримуйтеся правил безпеки та санітарно-гігієнічних норм.

1. Відкрийте середовищерозробки Turbo Delphi 2006 і створіть новий проект.

2. Розмістіть на формі елементи керування для розв'язання задачі: Відомо довжини сторін двох прямокутників. Обчислити площі прямокутників та порівняти їх. Визначити, чи є прямокутники квадратами. З'ясувати, чи вміститься один прямокутник у середину другого. Повідомити визначені результати. У проекті:

а) складіть обробник події OnClick першої кнопки для обчислення площ прямокутників та виведення повідомлення про те, у якого прямокутника більша площа;

б) складіть обробник події OnClick другої кнопки, виконання якого залежно від встановлених прапорців приведе до визначення того, чи є відповідний прямокутник квадратом;

в) складіть обробник події OnClick третьої кнопки, виконання якого приведе до визначення, чи вміститься перший прямокутник у середину другого або другий прямокутник у середину першого залежно від вибраного перемикача;

г) виконайте складені процедури і переконайтеся, що результати їх роботи правильні.

3. Створіть у власній папці папку Практична 8 і збережіть у ній проект.


2.9. Цикли в алгоритмах і в програмах

Пригадайте!

1. Які процеси називаються циклічними? Наведіть приклади.

2. Опишіть характерні властивості лінійних алгоритмів (фрагментів алгоритмів), алгоритмів з розгалуженням.

3. Як виглядає і як виконується команда повного розгалуження в Delphi?

4. Як виглядає і як виконується команда неповного розгалуження в Delphi?

5. Як і для чого використовуються перемикачі та прапорці?

Цикли в алгоритмах

У лінійних алгоритмах і в алгоритмах з розгалуженням кожна команда алгоритму могла бути виконана не більше одного разу.

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

Задача 1. Є діжка і відро. Використовуючи відро, наповнити діжку водою. (Вважаємо, що існує джерело води, з якого можна наповнювати відро, і води у джерелі достатньо для наповнення діжки.)

Розглянемо виконавця з такою системою команд:

1. Наповнити відро водою.

2. Вилити воду з відра в діжку.

3. Перевірити умову «Діжка неповна?».

Оскільки з умови задачі невідомо, чи є в діжці вода, виконавець повинен спочатку перевірити умову «Діжка неповна?». Якщо результат цієї перевірки true, то він повинен наповнити відро водою, вилити її з відра в діжку і знову перевірити умову «Діжка неповна?». І так до тих пір, поки результат перевірки цієї умови стане false. Після цього можна припинити виконання алгоритму.

Подамо алгоритм розв'язування цієї задачі для розглянутого виконавця у словесній формі і у формі блок-схеми (рис. 2.53).

1. Перевірити умову «Діжка неповна?»

2. Якщо результат виконання попередньої команди true, то виконати команду 3, якщоfalse, то закінчити виконання алгоритму.

3. Наповнити відро водою.

4. Вилити воду з відра в діжку.

5. Перейти до виконання команди 1.

У цьому алгоритмі команди 3-5 можуть бути виконані більше одного разу. Чергове виконання цих команд залежить від результату перевірки умови в команді 1. Якщо цей результатtrue, то команди 3-5 виконуються ще раз, якщо жfalse, то ці команди більше не виконуватимуться.

Звертаємо вашу увагу: команди 3-5 саме «можуть бути виконані більше одного разу», а не «обов'язково виконуються більше одного разу». Адже можливо, що після першого ж виливання води з відра в діжку вона наповниться і виконання алгоритму закінчиться. Крім того, якщо діжка з самого початку є повною, то ці команди не виконаються жодного разу.

Запам'ятайте!

Фрагмент алгоритму, що складається з команд, які можуть бути виконані більше одного разу, називається циклом. Алгоритми, які містять цикли, називаються алгоритмами з циклами.

У наведеному алгоритмі цикл складається з трьох команд: команди перевірки умови і двох команд, які утворюють тіло циклу.

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

Загальний вигляд циклу з передумовою наведено на рис. 2.54. Виконання такого циклу відбувається так: виконавець виконує команду перевірки умови (обчислення значення логічного виразу); якщо результат виконання цієї команди true, то виконавець виконуєкоманди тіла циклу, після чого знову виконуєкоманду перевірки умови (обчислення значення логічного виразу); якщо ж результат виконання команди перевірки умови (обчислення значення логічного виразу) false, то виконавець переходить до виконання першої команди наступного фрагмента алгоритму.

Верстальнику: на рис. 2.54 в ромбі написати «Перевірка умови (обчислення значення логічного виразу)

Якщо б в умові задачі 1 було відомо, що діжка порожня, то виконавцю не потрібно було б одразу перевіряти умову «Діжка неповна?». Він мав би хоча б один раз наповнити відро водою, перелити воду з відра в діжку і лише після цього перевірити умову «Діжка неповна?» (або умову «Діжка повна?», якщо вона входить до системи його команд).

Блок-схема алгоритму розв'язування такої задачі з використанням умови «Діжка повна?» виглядає так (рис. 2.55):

Верстальнику: на рис. 2.55 Стрілку Так пустити справа від ромба і вниз, а Ні - зліва від ромба і вгору!

Рис. 2.55. Блок-схема алгоритму розв'язування модифікованої задачі 1

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

Загальний вигляд блок-схеми циклу з післяумовою наведено на рис. 2.56. Верстальнику: на рис. 2.56 Стрілку Так пустити справа від ромба і вниз, а Ні - зліва від ромба і вгору! І в ромбі написати «Перевірка умови (обчислення значення логічного виразу)

Виконання такого циклу відбувається так: виконавець виконує команди тіла циклу, після чого виконує команду перевірки умови (обчислення значення логічного виразу); якщо результат виконання цієї команди false, то виконавець знову виконуєкоманди тіла циклу; якщо ж true, то виконавець переходить до виконання першої команди наступного фрагмента алгоритму.

Звертаємо вашу увагу: якщо в алгоритмі, блок-схема якого наведена на рис. 2.55 використати умову «Діжка неповна?», то виконання циклу продовжувалося б при результаті true виконання команди перевірки умови і припинялося б при результаті false виконання цієї команди.

Таким чином, ми розглянули три базові структури алгоритмів: лінійні фрагменти (слідування), розгалуженнята цикли (повторення). Доведено, що використовуючи тільки ці три структури, можна скласти алгоритм розв'язування будь-якої задачі, якщо він існує.

Зауважимо, що більшість алгоритмів містять і лінійні фрагменти, і розгалуження, і цикли.

Команда циклу з лічильником в Delphi

У мові програмуванні Delphi є кілька команд, які можуть реалізувати цикл. Одна з них - команда циклу з лічильником. Її доцільно використовувати в тих випадках, коли кількість повторень команд тіла циклу відома до початку виконання команди циклу. Загальний вигляд цієї команди такий:

for <ім′я змінної> := <вираз1> to <вираз2> do

Begin

<команди тіла циклу>

End;

Рядок for ... to ... do (англ. for - для, to - до,do - робити, виконувати)називається рядком заголовку команди циклу з лічильником. Змінна в рядку заголовка команди циклу з лічильником, що стоїть перед знаком присвоювання, називається лічильником циклу.

Лічильник циклу, вираз1 і вираз2 мають набувати тільки цілих значень. Якщо тіло циклу складається лише з однієї команди, операторні дужки begin і end можна не ставити.

Виконується команда циклу з лічильником так:

1. Надати лічильнику циклу значення виразу1.

2. Обчислити значення логічного виразу i £ вираз 2

3. Якщо значення лічильнику циклу не перевищує значення виразу2, то виконати команди тіла циклу і перейти до виконання команди 3, інакше виконати команду, наступну за командою циклу.

4. Збільшити значення лічильника циклу на 1.

5. Перейти до виконання команди 2.

Блок-схема виконання команди циклу з лічильником наведена на рис. 2.57 (і - лічильник циклу).

Для ілюстрації виконання команди циклу з лічильником розглянемо фрагмент програми, в якому обчислюється сума 1! + 2! + 3! +4! (нагадаємо, що n! = 1×2×3×...×n):

var a, s, i: Integer;

Begin

s := 0; a := 1;

For i := 1 to 4 do

Begin

a := a*i;

s := s + a;

End;

Label1.Caption := IntToStr (s);

End;

Функція IntToStr(англ. integerto string- ціле в рядок) використовується для переведення цілого числа в його текстове представлення для виведення в напис.

Виконаємо цей фрагмент програми.

Команда Результат виконання
s := 0 s = 0
a := 1 a = 1
i := 1 i = 1
і <= 4 (1 <= 4) = true
a := a*i a = 1*1= 1
s := s + a s = 0 + 1 = 1
i := i + 1 i = 2
і <= 4 (2 <= 4) = true
a := a*i a = 1*2= 2
s := s + a s = 1 + 2 = 3
i := i + 1 i = 3
і <= 4 (3 <= 4)= true
a := a*i a = 2*3= 6
s := s + a s = 3 + 6 = 9
i := i + 1 i = 4
і <= 4 (4 <= 4) =true
a := a*i a = 6*4= 24
s := s + a s = 9 + 24 = 33
i := i + 1 i = 5
і <= 4 (5 <= 4) = false
Label1.Caption := IntToStr (s) Label1.Caption = 33

Звертаємо вашу увагу:

1. Після закінчення виконання команди циклу з лічильником лічильник циклу має значення на 1 більше значення виразу2, і це значення, при необхідності, можна використовувати в наступних командах.

2. Існує різновид команди циклу з лічильником, який змінюється в зворотному порядку:

For <ім′я змінної> := <вираз1> downto <вираз2> do

Begin

<команди тіла циклу>

End;

(англ. down - униз), який відрізняється від попереднього лише тим, що після кожного виконання команд тіла циклу значення лічильника циклу не збільшується на 1, а зменшується на 1.

Команди циклу з передумовою і циклу з післяумовою в Delphi

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

Загальний вигляд команди циклу з передумовою такий:

while <логічний вираз> do

Begin

<команди тіла циклу>

End;

(англ. while - поки). Якщо тіло циклу складається лише з однієї команди, операторні дужки begin і end можна не ставити.

Виконується команда циклу з передумовою так:

6. Обчислити значення логічного виразу.

7. Якщо це значення true, то виконати команди тіла циклу і перейти до команди 1, а якщо false, то виконати команду, наступну за командою циклу.

Для ілюстрації виконання команди циклу з передумовою розглянемо фрагмент програми для розв'язування наступної задачі.

Задача 2. Обчислити суму додатних членів арифметичної прогресії з додатним першим членом і від'ємною різницею.

Домовимося вводити перший член прогресії в поле Edit1, а її різницю - в поле Edit2.

var a, d, s: Real;

Begin

a := StrToFloat (Edit1.Text);

d := StrToFloat (Edit2.Text);

s := 0;

While a > 0 do

Begin

s := s + a;

a := a + d;

End;

Label1.Caption := FloatToStr (s);

End;

Виконаємо цей фрагмент програми для деякого набору значень a і d.

Команда Результат виконання
a := StrToFloat (Edit1.Text) a = 7
d := StrToFloat (Edit2.Text) d = -3
s := 0 s = 0
a > 0 (7 > 0) = true
s := s + a s = 0 + 7 = 7
a := a + d a = 7 +(-3) = 4
a > 0 (4 > 0) = true
s := s + a s = 7 + 4 = 11
a := a + d a = 4 +(-3) = 1
a > 0 (1 > 0) = true
s := s + a; s = 11 + 1 = 12
a := a + d a = 1 +(-3) = -2
a > 0 (-2 > 0) = false
Label1.Caption := FloatToStr (s) Label1.Caption = 12

Загальний вигляд команди циклу з післяумовою такий:

Repeat

<команди тіла циклу>

until <логічний вираз>;

(англ. repeat - повторити, until - доки, не раніше як).

Виконується команда циклу з передумовою так:

1. Виконати команди тіла циклу.

2. Обчислити значення логічного виразу.

3. Якщо це значення false, то виконати п.1, а якщоtrue, то виконати команду, наступну за командою циклу.

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

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

var a, d, s: Real;

Begin

a := StrToFloat (Edit1.Text);

d := StrToFloat (Edit2.Text);

s := 0;

Repeat

s := s + a;

a := a + d;

until a <= 0;

Label1.Caption := FloatToStr (s);

End;

Виконаємо цей фрагмент програми для деякого набору значень a і d.

Команда Результат виконання
a := StrToFloat (Edit1.Text) a = 7
d := StrToFloat (Edit2.Text) d = -3
s := 0 s = 0
s := s + a s = 0 + 7 = 7
a := a + d a = 7 +(-3) = 4
а <= 0 (4 <= 0) = false
s := s + a s = 7 + 4 = 11
a := a + d a = 4 +(-3) = 1
а <= 0 (1 <= 0) = false
s := s + a s = 11 + 1 = 12
a := a + d a = 1 +(-3) = -2
а <= 0 (-2 <= 0) = true
Label1.Caption := FloatToStr (s) Label1.Caption = 12

Звертаємо вашу увагу:

1. У команді циклу з післяумовою операторні дужки не використовують незалежно від кількості команд у тілі циклу.

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

Приклади програм з використанням циклів

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

При розв'язуванні багатьох задач доцільно використовувати ще 2 арифметичні операції: знаходження неповної частки і остачі при діленні цілого числа на натуральне. Нагадаємо, що для будь-якого цілого числа m і натурального числа n існує єдина пара цілих чисел q і r (0 ≤ r < n), таких що m = nq + r. Число q називається неповною часткою, а число r - остачею. Для знаходження неповної частки в Delphi використовується операція div(англ. divide - поділити), а для знаходження остачі - mod(англ. modulo - остача від ділення). Наприклад,

23 div 5 = 4, 23 mod 5 = 3,

28 div 4 = 7, 28 mod 4 = 0,

2 div 3 = 0, 2 mod 3 = 2.

Задача 3. Дано натуральне числоn, більше 1. З'ясувати, чи є це число простим.

Нагадаємо, що простим називається натуральне число, яке має рівно 2 дільники. Тому можна перебрати всі натуральні числа від 1 до даного числа і підрахувати кількість дільників даного числа. Якщо ця кількість дорівнює 2, то це число просте, якщо більше - не просте. Відповідний фрагмент програми виглядатиме так:

var i, k, n: Integer;

Begin

n := StrToInt(Edit1.Text);

k := 0;// Кількість дільників числаn

for i := 1 to n do

if n mod i = 0 //Перевірка, чи є число i дільником числа n

then k := k+1;//Збільшення на 1 кількості дільників числа n, якщо число i є його дільником

if k = 2

then Label1.Caption := 'просте'

else Label1.Caption := 'не просте';

End;

Функція StrToInt(англ. stringto integer- рядок в ціле) використовується для переведення текстового представлення цілого числа в саме ціле число.

Але час виконання програми для розв'язування цієї задачі можна суттєво зменшити, якщо врахувати такі властивості натуральних чисел:

1. Будь-яке натуральне число, більше 1, завжди має 2 дільники (одиницю і саме це число). Тому простим буде таке натуральне число, яке не матиме інших дільників.

2. Серед натуральних чисел тільки одне парне число є простим (2), всі інші прості числа - непарні.

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

Якщо при складання програми використати вказані властивості, то відповідний фрагмент програми може бути таким:

var i, k, n: Integer; f: Boolean;

Begin

n := StrToInt(Edit1.Text);

f := true;// Будемо поки що вважати число nпростим, адже дільників у нього поки що не знайшлося

if (n mod 2 = 0) and (n <> 2)

then f := false// Якщо число n парне і не дорівнює 2, то воно не просте

Else

Begin

k := 3;// Якщо число непарне, то будемо шукати його дільники, починаючи з числа 3

while (k <= sqrt(n)) and f do // Шукати дільники числа будемо серед чисел, які не перевищують арифметичний квадратний корінь з числа n, і поки такий дільник не знайшовся

if n mod k = 0// перевірка, чи є число k дільником числа n

then f := false

else k := k + 2;// Якщо k не є дільником n, то наступний можливий дільник - наступне непарне число

End;

If f

then Label1.Caption := 'просте'

else Label1.Caption := 'не просте';

End;

У наведеному фрагменті програми використана логічна змінна f. Її значення визначатиме, чи є число n простим чи ні: true - просте, false- не просте. Тип логічної змінної в Delphi позначається Boolean, на честь Джорджа Буля. Для обчислення арифметичного квадратного кореня використана стандартна функція sqrt (англ. square root- квадратний корінь).

Задача 4. Знайти найбільший спільний дільник (НСД) двох даних натуральних чисел aіb (a > b).

У курсі математики 6 класу ви навчилися знаходити НСД чисел, розкладаючи їх на прості множники. Можна скласти програму, в якій реалізується цей метод знаходження НСД.

Але більш простою виявляється програма, яка реалізує інший метод знаходження НСД, що базується на такому математичному твердженні: якщо a > b, то НСД (a, b) = НСД (b, r), де r - остача від ділення a на b. Ідея цього методу полягає в тому, що послідовно замінюються числа, для яких потрібно знайти НСД: більше з них замінюється на менше, а менше - на остачу від ділення більшого числа на менше. Закінчується цей процес замінювання тоді, коли остача від ділення стає рівною нулю. Тоді НСД дорівнює останній відмінній від 0 остачі від ділення.

Наприклад,

НСд (80, 12) = НСд (12, 8) = НСд (8, 4) = НСд (4,0) = 4,

НСд (125, 54) = НСд (54, 17) = НСд (17, 3) = НСд (3,2) = НСд (2,1) = НСд (1, 0) = 1.

Цей метод знаходження НСД називається алгоритмом Евкліда. Перевірте цей метод знаходження НСД для різних пар натуральних чисел.

Нижче наведений фрагмент програми, в якому знаходиться НСД двох чисел за алгоритмом Евкліда.

var a, b, r: Integer;

Begin

a := StrToInt(Edit1.Text);

b := StrToInt(Edit2.Text);

r := a mod b;

while r <> 0 do

Begin

a := b;

b := r;

r := a mod b;

End;

Label1.Caption := IntToStr (b);

End;

Звертаємо вашу увагу, що наведений фрагмент програми працює правильно і в тих випадках, коли
a ≤ b. Спробуйте самостійно з'ясувати, чому.

Цікаві факти з історії

Евклід(біля300 р. до н. е. - біля 265 р. до н. е.) (рис. 2.58) - відомий давньогрецький математик. Основною заслугою Евкліда вважається його величезна робота по збиранню і систематизації усіх відомих на той час математичних фактів геометрії та арифметики у 13 книгах, які він назвав «Початки».

Історики математики знайшли підтвердження того, що алгоритм Евкліда для знаходження НСД був відомий ще й до Евкліда. А причиною того, що його назвали на честь Евкліда, напевне є те, що Евклід уперше його детально описав у своїх «Початках».

Рис. 2.58. Евклід

Перевірте себе

1. º Що таке цикл в алгоритмі?

2. · Наведіть блок-схему циклу з передумовою. Поясніть виконання цього циклу. Наведіть приклади циклів з передумовою.

3. · Наведіть блок-схему циклу з післяумовою. Поясніть виконання цього циклу. Наведіть приклади циклів з післяумовою.

4. · Чи можуть команди тіла циклу не виконуватись жодного разу? Поясніть свою відповідь. Наведіть приклади.

5. * Чи може виконання циклу ніколи не закінчитися? Поясніть свою відповідь. Наведіть приклади.

6. · Поясніть відмінності у виконанні основних алгоритмічних структур: слідування, розгалуження, цикл.

7. º Наведіть загальний вигляд команди циклу з лічильником в Delphi.

8. · Поясніть виконання команди циклу з лічильником в Delphi.

9. º Наведіть загальний вигляд команди циклу з передумовою і команди циклу з післяумовою в Delphi.

10. · Поясніть виконання команди циклу з передумовою і команди циклу з післяумовою в Delphi.

11. * Поясніть відмінності у використанні команд циклу з параметром та циклу з передумовою в Delphi.

12. * Поясніть відмінності у використанні команд циклу з передумовою та циклу з післяумовою в Delphi.

Виконайте завдання

1. Виконайте алгоритми:

а)º б) ·


2. (ДЗ) Виконайте алгоритми:

а) º б) ·

3. · Виконайте в таблиці фрагмент програми та з'ясуйте, якими будуть значення змінних після його завершення:

а) р := 1; a := 2; б) k := 1; a := 12; в) s := 0; a := 1; k := 1;

for i := 1 to 5 do while a < 100 do repeat

begin begin s := s + a;

a := 3*a + 1; а := 2*а - 4; k := k + 1;

р := р * a; k := k + 1; a := k * k;

end; end; until a > 50;

4. (ДЗ) · Виконайте фрагмент програми та з'ясуйте, якими будуть значення змінних після його завершення:

а) p := 1; a := 8; б) k := 1; a := 100; в) s := 0; a := 5428;

for i := 1 to 4 do while a > 10 do repeat

begin begin c := a mod 10;

a := 2*a - 5; а := а div 2; s := s + c;

р := р * a; k := k + 1; a := a div 10;

end; end; until a < 1;

5. · Виконайте в таблиці фрагмент програми для задачі 3, наведеної в тексті пункту.

6. (ДЗ) · Виконайте в таблиці фрагмент програми для задачі 4, наведеної в тексті пункту.

7. º Складіть блок-схему алгоритму знаходження суми перших 5 членів послідовності, перший член якої х = 7, а кожен наступний обчислюється на основі попереднього значення за формулою х := 2*х + 3. Виконайте алгоритм.

8. (ДЗ) º Складіть блок-схему алгоритму знаходження добутку перших 8 членів арифметичної прогресії з першим членом, рівним 9 та різницею 4. Виконайте алгоритм.

9. · Складіть блок-схему алгоритму знаходження кількості додатних членів арифметичної прогресії з відомим першим членом та різницею -5. Виконайте алгоритм для трьох різних значень першого члену прогресії. Підберіть ці значення так, щоб команди тіла циклу виконались кілька разів; один раз; жодного разу.

10. (ДЗ) · Складіть блок-схему алгоритму знаходження суми двоцифрових членів арифметичної прогресії з першим членом 25 та відомою різницею. Виконайте алгоритм для трьох різних значень різниці прогресії. Підберіть ці значення так, щоб команди тіла циклу виконались кілька разів; один раз; жодного разу.

11. * Складіть блок-схему алгоритму розв'язання задачі: визначити, на скільки квадратів можна розрізати прямокутну смужку паперу з заданими довжиною та шириною, якщо на кожному кроці від смужки відрізати квадрат, сторона якого дорівнює менший із сторін смужки, що залишилась після попереднього відрізу. Виконайте алгоритм для двох різних значень початкових даних. Підберіть ці значення так, щоб команди тіла циклу виконались кілька разів; один раз.

12. · Створіть проект, в якому можна обчислити добуток перших N членів послідовності чисел, перше з яких дорівнює x, а кожне наступне удвічі менше попереднього. Створіть у власній папці папку Проект 2.9.12 і збережіть у ній проект.

13. (ДЗ) · Створіть проект, в якому можна обчислити суму перших N членів послідовності чисел, перше з яких дорівнює x, а кожне наступне дорівнює квадрату попереднього. Створіть у папці Мої документи папку Проект 2.9.13 і збережіть у ній проект.

14. · Створіть проект, в якому можна обчислити кількість двоцифрових чисел у арифметичній прогресії. Перший член прогресії більший від 10, різниця більше нуля. Створіть у власній папці папку Проект 2.9.14 і збережіть у ній проект.

15. (ДЗ) · Створіть проект, в якому можна обчислити середнє арифметичне членів геометричної прогресії, що більші за одиницю. Перший член прогресії більший від 100, знаменник менше від одиниці, але більший нуля. Створіть у папці Мої документи папку Проект 2.9.15 і збережіть у ній проект.

16. · Створіть проект, в якому можна знайти кількість дільників заданого натурального числа. Створіть у власній папці папку Проект 2.9.16 і збережіть у ній проект.

17. * Створіть проект, в якому можна обчислити кількість простих чисел серед перших 100 натуральних чисел. Створіть у власній папці папку Проект 2.9.17 і збережіть у ній проект.

18. · Створіть проект для розв'язання задачі: Людина поклала у банк певну суму грошей. Щорічно банк додає до суми наперед визначений відсоток від суми, що зберігається на рахунку після попереднього року. Яка сума буде на рахунку через N років? Створіть у власній папці папку Проект 2.9.18 і збережіть у ній проект.

19. (ДЗ) · Створіть проект для розв'язання задачі: Людина поклала у банк певну суму грошей. Щорічно банк додає до суми наперед визначений відсоток від суми, що зберігається на рахунку після попереднього року. Через скільки років сума на рахунку стане не меншою від S грн? Створіть у папці Мої документи папку Проект 2.9.19 і збережіть у ній проект.

20. * Створіть проект для обчислення суми цифр заданого натурального числа, кількість цифр якого не більше 9. Створіть у власній папці папку Проект 2.9.20 і збережіть у ній проект.

Практична робота № 9

«Програмування циклічних обчислень»

Увага! Під час роботи з комп'ютером дотримуйтеся правил безпеки та санітарно-гігієнічних норм.

1. Відкрийте середовище візуального проектування Turbo Delphi 2006.

2. Створіть проект для розв'язування задачі: Перед початком повені рівень води у річці становив Н метрів. Під час повені кожну годину рівень води зростав на Р відсотків від рівня попередньої години. Яким буде рівень води через N годин після початку повені? Через скільки годин після початку повені рівень води буде не менше, ніж К метрів?

1. Розмістіть на формі поля для введення початкових даних, написи із текстами, що будуть пояснювати їхні призначення та три кнопки.

2. Установіть на першій кнопці напис Питання 1, на другій - Питання 2, на третій - Спочатку, у полів - порожній текст.

3. Складіть обробник події OnClick першої кнопки, виконання якого приведе до виведення у вікно повідомлення відповіді на перше запитання задачі.

4. Виконайте складену процедуру і переконайтеся, що результати її роботи правильні.

5. Складіть обробник події OnClick другої кнопки, виконання якого приведе до знаходження відповіді на друге запитання задачі і виведення його в окремий напис.

6. Виконайте складену процедуру і переконайтеся, що результати її роботи правильні.

7. Складіть обробник події OnClick третьої кнопки, виконання якого призведе до очищення тексту у полях та напису з відповіддю на друге запитання задачі.

3. Створіть у власній папці папку Практична 9 і збережіть у ній проект.


2.10. Процедури і функції користувача та стандартні процедури і функції в Delphi

Пригадайте!

1. Що таке процедура?

2. Що таке обробник події? Як створити обробник події?

3. Який загальний вигляд процедур-обробників подій, які ви створювали в Delphi?

4. Які змінні називаються локальними, а які глобальними? Поясніть різницю між ними.

5. Як у Delphi змінити числовий тип змінної на текстовий і навпаки?

Процедури користувача в Delphi

У попередніх пунктах ви створювали і використовували процедури, які були пов'язані з певними подіями і були методами певних об'єктів. Заготовки цих процедур середовище розробки створювало автоматично, а ви доповнювали ці заготовки командами і рядком varопису змінних.

При створенні програм можна включати до проекту процедури, не пов'язані з подіями. Такі процедури називаються процедурами користувача. Їх найчастіше використовують у випадках, коли потрібно кілька разів при різних значеннях змінних виконувати одні й ті самі операції: обчислювати площу і периметр трикутників або інших геометричних фігур, вибирати більше з двох чисел, визначати, просте число чи ні, та інші. Або коли задачу можна поділити на окремі підзадачі, кожна з яких розв'язується за окремим алгоритмом, тобто при використанні методу покрокової деталізації.

Процедура користувача, як й інші процедури - це відокремлена частина програми, яка має своє ім'я і яка може бути викликана для виконання в будь-якій іншій частині програми.

Процедури користувача можуть бути:

- без аргументів і без результатів;

- з аргументами і без результатів;

- без аргументів і з результатами;

- з аргументами і з результатами.

Запам'ятайте!

Аргументи процедури - це змінні, які отримують свої значення в команді виклику процедури перед початком виконання команд процедури.

Результати процедури - це змінні, які передають свої значення з процедури певним змінним в команді виклику процедури.

Найчастіше використовують процедури останнього типу. Загальний вигляд цих процедур у Delphiтакий:

procedure <ім'я> (<списки аргументів з їхніми типами>; var <списки результатів з їхніми типами>);

var (<списки локальних змінних процедури з їхніми типами>);

Begin

<команди>

End;

Загальний вигляд команди виклику процедури з аргументами і результатами такий:

<ім'я> (<списки виразів, значення яких передаються аргументам процедури>, <списки змінних, яким передають свої значення результати процедури>);

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

Оформимо як процедуру фрагмент програми, який обчислює НСД двох натуральних чисел. У цієї процедури два аргументи - два натуральні числа, НСД яких потрібно знайти, і один результат - їхній НСД. Виглядатиме ця процедура так:

procedure МCD (a, b: Integer; var c: Integer);

var r: Integer;

Begin

r := a mod b;

while r <> 0 do

Begin

a := b;

b := r;

r := a mod b;

End;

c := b;

End;

Викликати на виконання цю процедуру для одержання значення НСД двох конкретних натуральних чисел можна, наприклад, такою командою: МCD (35, 77, х). Виконуватися ця команда буде так:

1. Змінні a і b (аргументи процедури) одержують значення 35 і 77 відповідно.

2. Виконуються команди процедури.

3. Змінна с (результат процедури) передає своє значення змінній х, вказаній у команді виклику процедури.

Отже, в результаті виконання вказаної команди виклику процедури змінна х одержить значення 7.

У команді виклику цієї процедури в дужках на перших двох місцях, що відповідають аргументам процедури, можуть стояти не тільки константи, а й змінні, які на момент виконання команди виклику мають певні натуральні значення. Тобто при виконанні команди МCD (к, р, х) аргументи процедури a і b одержать значення змінних кірвідповідно. На цих місцях можуть стояти також арифметичні вирази, значення яких будуть обчислені на початку виконання команди виклику процедури і ці значення будуть передані аргументам процедури, наприклад, МCD (2*к+3, 3*р-1, х).

Звертаємо вашу увагу:

1. Аргументи та результати процедури можуть бути одними й тими самими змінними, тобто допустима процедура із заголовком Procedure One (var a, b:Integer). У такої процедури змінні aіb є одночасно і аргументами і результатами. Команда виклику цієї процедури виглядатиме так: One (x, y).

2. Процедура може серед своїх команд мати команду виклику іншої процедури.

Запам'ятайте!

Змінні, які вказані в заголовку процедури, називаються формальними параметрами процедури.

Змінні, які вказуються в команді виклику процедури, називаються фактичними параметрами процедури.

Проілюструємо зручність використання процедур користувача (зокрема, процедури знаходження НСД двох натуральних чисел) на прикладі такої задачі.

Рис. 2.59. Програма додавання двох звичайних дробів з використанням процедури НСД
 
 

Задача 1. Знайти суму двох звичайних дробів.

У наведеному тексті проекту (рис. 2.59) процедура викликається двічі. Перший раз для знаходження НСД знаменників дробів. Цей НСД у наступній команді використовується для знаходження найменшого спільного знаменника дробів (НСК (х, у) = х*у/НСд (х, у)). Другий - для знаходження НСД чисельника і знаменника дробу-суми з метою його подальшого скорочення. Без використання процедури текст цього проекту збільшився б, погіршилась би його структурованість.

Функції користувача в Delphi

Як зазначалося вище, процедура може не мати результатів, а може мати один або більше результатів. Якщо процедура має один результат, то зручніше її оформити і викликати як функцію користувача.

Функція користувача, як і процедура користувача - це відокремлена частина програми, яка має своє ім'я і яка може бути викликана для виконання в будь-якій іншій частині програми.

Відрізняється функція від процедури таким:

1. Рядок заголовка функції виглядає так:

function <ім'я> (<списки аргументів з їхніми типами>): <тип результату >;

2. Значення, яке функція повинна повернути (передати) команді, яка її викликає, в тексті самої функції має бути присвоєно змінній, ім'я якої збігається з іменем функції.

3. Функція може бути викликана або в правій частині команди присвоювання, або в команді виведення.

Якщо обчислення НСД оформити як функцію, то програма виглядатиме так (рис. 2.61):

Рис. 2.61. Програма додавання двох звичайних дробів з використанням функції НСД

Зверніть увагу не тільки на відмінності в оформленні процедури і функції, а й на відмінності в їх виклику і використанні в програмах, наведених на рис. 2.59 і 2.61 (табл. 2.3):

Таблиця 2.3. Відмінності у виклику процедури і функції

1. Використання процедури МCD 2. Використання функції МCD
3. MCD(den1, den2,z); 4. den := den1*den2/z; 5. den := den1*den2/ MCD(den1, den2);
6. MCD(den, nom, k); 7. k :=MCD(den, nom);

Процедури користувача і функції користувача називаються підпрограмами користувача.

Стандартні процедури і функції в Delphi

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

Деякі з них ви вже використовували, наприклад, функцію StrToInt для переведення тексту в ціле число, функцію FloatToStr для переведення дійсного числа в текст, функцію sqrt для обчислення арифметичного квадратного кореня з дійсного числа.

Розглянемо ще кілька стандартних математичних функцій та їхнє призначення (табл. 2.4).

Таблиця 2.4. Приклади стандартних математичних функцій у Delphi

Функція Кількість аргументів та їх типи Результат Тип результату
Abs 1, цілий або дійсний Модуль числа Той самих, що й в аргументу
Arctan 1, дійсний Арктангенс числа (в радіанах) Дійсний
Cos 1, дійсний Косинус числа Дійсний
Exp 1, дійсний Експонента числа (ех) Дійсний
Frac 1, дійсний Дробова частина числа Дійсний
Int 1, дійсний Ціла частина числа Дійсний
Ln 1, дійсний Натуральний логарифм числа Дійсний
Pi Число p Дійсний
Power 2, дійсні І аргумент у степені ІІ аргумент Дійсний
Random Випадкове число від 0 до 1 Дійсний
Random 1, цілий Випадкове ціле число від 0 до значення аргументу-1 Цілий
Sin 1, дійсний Синус числа Дійсний
Sqr 1, дійсний Квадрат числа Дійсний

Звертаємо вашу увагу:

1. При виклику функції без аргументів потрібно вказувати лише її ім'я, наприклад, х := Pi.

2. Перед першим використанням функції Random потрібно включити до тексту проекту команду виклику процедури Randomize без аргументів і без результатів, яка запустить генератор випадкових чисел.

3. Для використання функції Power потрібно в рядок Uses тексту проекту додати текст Math. Після цього до проекту підключиться додаткова бібліотека стандартних процедур та функцій і стане можливим використання ще цілого ряду математичних та інших процедур і функцій, з якими ви можете ознайомитися в Довідці.

Перевірте себе

1. º Що таке процедури користувача? Якими вони можуть бути?

2. · У яких випадках доцільно використовувати процедури користувача? У чому полягають переваги їхнього використання?

3. · Який загальний вигляд процедур користувача з аргументами та з результатами?

4. º Що таке аргументи процедури; результати процедури?

5. · Який вигляд має команда виклику процедури з аргументами і результатами?

6. º Що таке формальні параметри процедури і фактичні параметри процедури? Поясніть різницю між ними.

7. º Що таке функція користувача?

8. · Чим функція користувача відрізняється від процедури користувача?

9. * Який загальний вигляд функції?

10. · Які ви знаєте стандартні процедури і функції в Delphi?Охарактеризуйте їх.

11. * Знайдіть у Довідці інформацію про процедури без аргументів і без результатів, з аргументами і без результатів, з аргументами і без результатів. Наведіть приклади їхнього використання.

Виконайте завдання

1. º Запишіть заголовок процедури з іменем stepin, аргументами якої є змінна a дійсного типуі змінна b цілого типу, а результатом - змінна с дійсного типу, і приклад команди її виклику.

2. (ДЗ) º Запишіть заголовок процедури з іменем chastka, аргументами якої є дві змінні дійсного типу a, b, а результатами - змінна с дійсного типу та змінна f логічного типу, і приклад команди її виклику.

3. · Запишіть процедуру з іменем simp, яка здійснює перевірку, чи є дане натуральне число простим і повертає як результат значення змінної f логічного типу - ознаку того, чи є число простим, і значення змінної k цілого типу - кількість дільників даного числа.

4. (ДЗ) · Запишіть процедуру з іменем square, яка виконує обчислення площі трикутника за відомими довжинами його сторін, значення яких передаються до процедури як аргументи. Для обчислення площі використайте формулу Герона.

5. · Створіть проект, в якому обчислюється площа трикутника за відомими координатами його вершин. Для обчислення площі використайте формулу Герона. Використайте процедуру обчислення довжини відрізка за координатами його кінців. Створіть у власній папці папку Проект 2.10.5 і збережіть у ній проект.

6. (ДЗ) · Створіть проект, в якому для двох заданих на площині точок з цілими координатами визначається, чи лежать вони в одній координатній чверті. Використайте процедуру для визначення координатної чверті, у якій розміщена точка з заданими координатами. Створіть у власній папці папку Проект 2.10.6 і збережіть у ній проект.

7. º Запишіть заголовок функції з іменем length, аргументами якої є чотири змінні цілого типу, а результат має дійсний тип, і приклад команди її виклику.

8. (ДЗ) º Запишіть заголовок функції з іменем step, аргументами якої є змінна a дійсного типуі змінна b цілого типу, а результат має дійсний тип, і приклад команди її виклику.

9. º Запишіть функцію, яка виконує обчислення довжини відрізка за відомими координатами його кінців. Запишіть команду виклику цієї функції для обчислення довжини відрізка а з координатами кінців (0, 0) та (20, 30).

10. (ДЗ) · Запишіть функцію, в якій обчислюється значення факторіалу заданого натурального числа n (n! = 1*2*3*...*n). Запишіть команду використання цієї функції для обчислення суми факторіалів перших п'яти натуральних чисел.

11. º Створіть проект, в якому можна знайти максимальне з чотирьох заданих різних цілих чисел. Використайте функцію для знаходження більшого з двох заданих цілих чисел. Створіть у власній папці папку Проект 2.10.11 і збережіть у ній проект.

12. · Створіть проект, в якому для двох заданих цілих чисел визначається, яке з них має більшу суму цифр. Використайте функцію для знаходження суми цифр заданого цілого числа. Створіть у власній папці папку Проект 2.10.12 і збережіть у ній проект.

13. (ДЗ) · Створіть проект, в якому для двох заданих цілих чисел визначається, яке з них має більшу суму дільників. Використайте функцію для знаходження суми дільників заданого цілого числа. Створіть у папці Мої документи папку Проект 2.10.13 і збережіть у ній проект.

14. * Створіть проект, в якому для заданого цілого числа визначається, чи є одночасно простим саме число і число, записане тими самими цифрами, взятими у зворотньому порядку. Використайте функцію для визначення того, чи є число простим. Створіть у власній папці папку Проект 2.10.14 і збережіть у ній проект.

15. · Запишіть з використанням стандартних функцій Delphiкоманди для обчислення дискримінанту та коренів квадратного рівняння з коефіцієнтами a, b, c.

16. · Створіть проект, в якому обчислюється сума 11 + 22 + 33 + 44 + 55 + ... + nn. Використайте стандартну функцію для піднесення числа до степеня. Створіть у власній папці папку Проект 2.10.16 і збережіть у ній проект.

17. (ДЗ) · Створіть проект, в якому обчислюється сума . Створіть у власній папці папку Проект 2.10.17 і збережіть у ній проект.

18. ·Додайте до проекту додавання двох дробів процедуру, яка з неправильного дробу виділяє цілу частину

Практична робота № 10

«Використання підпрограм»

Увага! Під час роботи з комп'ютером дотримуйтеся правил безпеки та санітарно-гігієнічних

  1   2   3   4   5   6   7   8   9   10   11   12   13   14   Наступна

Мова програмування Delphi та середовище розробки Turbo Delphi 2006 1 страница | Мова програмування Delphi та середовище розробки Turbo Delphi 2006 2 страница | Мова програмування Delphi та середовище розробки Turbo Delphi 2006 3 страница | Мова програмування Delphi та середовище розробки Turbo Delphi 2006 4 страница | Налагодження програм | Then begin | Else begin | If RadioButton1.Checked | If RadioButton1.Checked | Then begin |

© 2016-2022  um.co.ua - учбові матеріали та реферати