загрузка...
загрузка...
На головну

Загальні відомості

  1. HTML: Загальні відомості.
  2. I. Загальні положення
  3. I. Загальні положення
  4. I. Загальні положення
  5. I. Загальні положення
  6. I. Загальні положення
  7. I. Загальні положення

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

· Перед початком циклу задати початкове значення параметра;

· Всередині циклу змінювати параметр циклу за допомогою оператора присвоювання;

· Перевіряти умова повторення або закінчення циклу;

· Управляти циклом, тобто переходити до його початку, якщо він не закінчений, або виходити з циклу в іншому випадку.

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

У циклі з відомим числом повторень параметр змінюється в заданому діапазоні. Якщо в циклі змінюється проста змінна, то вона є параметром циклу; якщо в циклі змінюється змінна з індексом, то індекс цієї змінної є параметром циклу. Нижче наведені графічні позначення (позначення на блок-схемах) алгоритмів циклічних структур (рис. 4).

на схемах серія позначає один або декілька довільних операторів; умова є логічне вираження (лв) (Якщо його значення істина, Перехід відбувається по гілці да, Інакше - по немає). На схемі циклу з параметром використані позначення: ПЦ - Параметр циклу, нз - Початкове значення параметра циклу, кз - Кінцеве значення параметра циклу, ш - Крок зміни параметра циклу. Початок і кінець алгоритму на блоці-параллелограмме.

а  б в

Мал. 4. а - цикл з передумовою (цикл поки), Б - цикл з умовою поста (цикл до), В - цикл з параметром

Приклад 1.Представлена ??на малюнку 3 блок-схема програми зводить введене число в 10 ступінь і виводить результат.

 
 

Мал. 5. Блок-схема програми

Приклад 2.Підрахувати кількість непарних цифр у записі натурального числа n. Ідея рішення. З заданого числа вибирати з молодшого розряду цифру за цифрою до тих пір, поки воно не вичерпається, тобто стане рівним нулю. Кожну непарну цифру враховувати.

Мал. 6. Приклади блок-схем

1. Ввести число n

2. K: = 0 {готуємо лічильник}

3. Якщо n = 0, перехід до п. 7

4. Якщо n mod 10 mod 2 = 1, то K: = K +1

5. n: = n div 10

6. Перехід до п. 3

7. Висновок K

8. Кінець

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

зміст роботи

Робота передбачає базові знання шкільного курсу мови програмування Turbo Pascal. Запустити програму Pascal ABC. Ознайомитися з роботою програми, рядком меню, вікном редактора коду і введення-виведення команд. Відтворити приклади, наведені нижче, використовуючи, де необхідно, перетворення команд «шкільного алгоритмічного мови» в оператори Паскаля. За вказівкою викладача вибрати варіант з Додатка Г. По завершенні роботи результати зберегти файл.

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

обчислити при n> 2 суму тих її членів, які більше заданого числа e. При вирішенні задачі знаходиться черговий член послідовно і, якщо він більше e, додається до суми.

 1. Ввести e2. S: = 03. A: = 1/44. n: = 35. Порівняти А з e. Якщо A> = e, перехід до п. 106. S: = S + A7. A: = (n-1) / (n * n) 8. n: = n + 19. Перехід до п. 510. Висновок S11. кінець

Мал. 7. Приклад блок-схеми

У розглянутих вище прикладах кількість повторень заздалегідь невідомо. У першому воно залежить від кількості цифр у записі натурального числа, у другому - від числа e. У тих же випадку, коли кількість кроків відомо з умови задачі, простіше і краще використовувати цикл з параметром.

Приклад 4.Знайти твір перших k натуральних чисел, кратних трьом. При складанні алгоритму врахуємо, що перше натуральне число, кратне 3, є трійка, а всі наступні більше попереднього на 3.

 1. Введення k2. P: = 1 {тут накопичуємо твір} 3. T: = 0 {тут будуть числа, кратні 3} 4. I: = 15. Якщо I> k, перехід до п. 106. T: = T + 37. P: = P * T8. I: = I + 19. Перейти до п. 510. Висновок P11. кінець

Мал. 8. Приклад блок-схеми

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

Приклад 5.Для заданого x і n обчислити

Тут n! = 1. 2. 3 .... n (читається як "n-факторіал").

Program SumUp; Uses Crt; Var x, S, P: Real; {P - чергове доданок} i, n: Integer; BEGIN ClrScr; Write ( 'Введіть n ='); ReadLn (n); Write ( 'Введіть x ='); ReadLn (x); WriteLn; S: = 1; P: = 1; For i: = 1 to n do beginP: = - P * x / i; {Отримання чергового доданка} S: = S + P end; WriteLn ( 'Про т в е т: S =', S: 7: 3); ReadLnEND.

Мал. 9. Приклад блок-схеми

Приклад 6.Фрагмент програми простий пральний захисту

For I: = 1 to 3 do begin {дається три спроби ввести пароль}

Write ( 'Введіть ПАРОЛЬ');

ReadLn (S); {Змінні S і Parol - одного типу}

IF S = Parol

THEN BREAK {переривання циклу захисту}

ELSE IF I <3 THEN CONTINUE; {Даємо ще спроби}

WriteLn ( 'Не знаєте Пароль!'); {Спрацює при I = 3}

ReadLn;

HALT {переривання програми}

End;

{Захищається ділянку програми}

Приклад 7.Числа Фібоначчі (Fi ) Визначаються за формулами F0 = F1 = 1; Fi = Fi -1 + Fi -2 При i = 2, 3, ... (кожне чергове число дорівнює сумі двох попередніх). Обчислити суму всіх чисел Фібоначчі, які не перевищують заданого натурального числа М.

Program SummaFib; Uses Crt; Var M, {заданий число} F0, F1, F2, {три послідовних числа Фібоначчі} S: Integer; {Сума чисел Фібоначчі} BEGIN ClrScr; Write ( 'Введіть натуральне М:'); ReadLn (M); F0: = 1; F1: = 1; F2: = 2; S: = 4; {4 - сума перших трьох чисел Фібоначчі} Write ( 'Числа Фібоначчі, не перевищують', M, ':', F0: 4, F1: 4); While F2 <= M do beginF0: = F1; F1: = F2; Write (F1: 4); F2: = F0 + F1; S: = S + F2; end; S: = S-F2; {Віднімання з суми останнього числа, яке перевершує М} WriteLn; WriteLn; WriteLn ( 'Про т в е т: Сума цих чисел дорівнює', S); ReadLnEND.

Мал. 10. Приклад блок-схеми

Приклад 8.  Визначимо суму ряду, поки черговий член ряду не стане менше 10-8.

Var S, a, eps: real;

N: word;

Begin

Eps: = 1e-8; {Точність обчислень}

S: = 0; N: = 0; {Початкові значення параметрів}

REPEAT

a: = 1 / (2 * N + 1) / (2 * N + 1); {Поточний член ряду}

inc (N); {Лічильник членів ряду}

S: = S + a; {Часткова сума ряду}

UNTIL a

WriteLn ( 'S =', S: 10: 8);

ReadLn

END.

Приклад 9.Запобігання невірного введення даних. Модернізуємо програму визначення площі трикутника за трьома сторонами (з попереднього практичного заняття) так, щоб при неправильному введенні даних відбувалося не просто переривання програми, а виникав запит на їх коригування (з повтором до виконання необхідних умов).

Var a, b, c, p, S: real;

Begin

REPEAT {перевірка коректності введення даних}

REPEAT

Write ( 'Ввести сторону а ='); ReadLn (a);

IF a <= 0 THEN WriteLn ( 'має бути a> 0!') Until a> 0;

REPEAT

Write ( 'Ввести сторону b ='); ReadLn (b);

IF b <= 0 THEN WriteLn ( 'має бути b> 0!') Until b> 0;

REPEAT

Write ( 'Ввести сторону c ='); ReadLn (c);

IF з <= 0 THEN WriteLn ( 'має бути з> 0!') Until з> 0;

IF (a + b <= c) and (a + c <= b) and (c + b <= a)

THEN WriteLn ( 'сума двох сторін повинна більше третьої!')

UNTIL (a + b> c) and (a + c> b) and (c + b> a);

{Розрахунок за перевіреними даними}

p: = (a + b + c) / 2;

S: = sqrt (p * (p-a) * (p-b) * (p-c));

WriteLn ( 'Площа:', S: 15: 5);

ReadLn

END.

Цикл з передумовою в подібних випадках використовувати менш зручно, оскільки, що він може ні разу не виконатися, якщо змінні, яким задаються значення з клавіатури, вже мали задовольняють умовам «захисту» значення.

Приклад 10.Розрахувати період (в місяцях) зростання банківського вкладу в m раз при відомій щомісячної процентної ставки pr (1% відповідає pr = 1).

Var pr, m, s, s0: double;

N: word;

Begin

Repeat

Write ( 'Введи відсотки за вкладом:'); redLn (pr);

Write ( 'Введи коефіцієнт зростання вкладу:'); redLn (m)

Until (m> 1) and (pr> 0);

N: = 0: {лічильник місяців}

s0: = 1000; {Початкова сума вкладу - довільно}

s: = s0; {Поточна сума вкладу}

Repeat {перебір по місяцях}

s: = s * (1 + pr / 100);

inc (N)

Until s / s0> = m;

WriteLn ( 'кількість місяців вкладу:', N);

ReadLn

End.



Попередня   1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   Наступна

Б2. В.1 ТЕОРІЯ АЛГОРИТМІВ | Бакалавр | Загальні відомості | Принцип роботи | Принцип роботи | Опис програми-емулятора машини Посту | Загальні відомості | Принцип роботи | Опис програми-емулятора машини Тьюринга | Загальні відомості |

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