THE BELL

Є ті, хто прочитали цю новину раніше вас.
Підпишіться, щоб отримувати статті свіжими.
Email
ім'я
Прізвище
Як ви хочете читати The Bell
без спаму

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

Y \u003d 1 + 1/2 + 1/3 + ... + 1 / n

Очевидно, що з використанням тільки розглянутих вище типів операторів можна скласти програму лише для фіксованого значення n. Наприклад, при n \u003d 5 необхідні обчислення можна задати за допомогою оператора присвоювання виду:

Y: \u003d 1 + 1/2 + 1/3 + 1/4 + 1/5

Якщо ж значення n не фіксується, а є вихідними даними, які вводяться в процесі виконання програми (і навіть константою, описаної в програмі), то аналогічний оператор присвоювання записати неможливо. Бо запис виду Y: \u003d 1 + 1/2 + 1/3 + ... + 1 / n в мовах програмування неприпустима.

Для усунення виникаючих труднощів служать оператори циклу. Вони дозволяють повторювати виконання окремих частин програми. Можна виділити чотири ператора циклу, Присутніх в тому чи іншому вигляді у всіх мовах програмування: простий арифметичний оператор циклу (Цикл з параметром з кроком 1), складний арифметичний оператор циклу (Цикл з параметром довільного кроку), ітераційний оператор циклу з передумовою, ітераційний оператор циклу з умовою поста.

Простий арифметичний оператор циклу Паскаля (цикл з параметром)

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

Насправді обчислення цієї суми можна здійснити за дуже простим і компактному алгоритму: попередньо покладемо y \u003d 0 (за допомогою оператора присвоювання y: \u003d 0), а потім виконаємо оператор присвоювання y: \u003d y + 1 / i для послідовних значень i \u003d 1 , 2, ..., n. При кожному черговому виконанні цього оператора до поточного значення y буде додаватися чергове доданок. Як видно, в цьому випадку процес обчислень буде носити циклічний характер: оператор y: \u003d y + 1 / i повинен виконуватися багаторазово, тобто циклічно, при різних значеннях i.

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

  • число повторень циклу відомо до початку його виконання (в даному випадку воно дорівнює значенню n, яке передбачається заданим до цього часу);
  • управління циклом здійснюється за допомогою змінної порядкового типу, Яка в цьому циклічному процесі приймає послідовні значення від заданого початкового до заданого кінцевого значень (в нашому випадку - це целочисленная змінна i, приймаюча послідовні значення від 1 до n).

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

For V: \u003d E1 to E2 do S,

де for (Для), to (Збільшуючись до) і do (Виконувати, робити) - службові слова, V - змінна порядкового типу, звана параметром циклу, Е1 і Е2 - вираження того ж типу, що й параметр циклу, S - оператор, який і виконується багаторазово в циклі, званий тілом циклу.

Зауважимо, що в Паскалі після do повинен стояти один оператор, якщо необхідно виконати кілька дій, то вони повинні бути об'єднані в один складений оператор шляхом укладення в операторні дужки.

Цей оператор циклу Паскаля передбачає присвоювання параметру циклу V послідовних значень від початкового значення, рівного значенню виразу Е1, до кінцевого значення, рівного значенню виразу Е2, тобто при кожному повторенні виконується оператор присвоювання V: \u003d succ (V), І виконання оператора S при кожному значенні параметра циклу V. При цьому значення виразів Е1 і Е2 обчислюються один раз, при вході в оператор циклу, а значення параметра циклу V не повинно змінюватися в результаті виконання оператора S. Якщо заданий кінцеве значення менше початкового значення (що допустимо), то оператор S не виконується жодного разу.

У Паскалі вважається, що при нормальному завершенні виконання оператора циклу значення параметра циклу не визначено.

З використанням оператора циклу з параметром алгоритм обчислення суми перших n членів гармонійного ряду може бути заданий наступним чином:

Приклад коду програми для підсумовування перших n членів гармонійного ряду

Readln (n);
Y: \u003d 0;
For i: \u003d 1 to n do y: \u003d y + 1 / i;

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

For V: \u003d E1 downto E2 do S,

де downto (Зменшуючись к) - службове слово, а всі інші слова і вирази мають колишній сенс. Зміна параметра циклу від більшого значення до меншого відбувається при виконанні присвоювання V: \u003d pred (V). Зауважимо, що початкове значення може бути менше кінцевого значення. У цьому випадку оператор S не виконається жодного разу. Значення параметра циклу після закінчення виконання такого циклу так само вважається невизначеним.

Слід запам'ятати і те, що для обох варіантів запису циклу з параметром справедливо: якщо початкове і кінцеве значення рівні, то тіло циклу (оператор S) виконається один раз.

Зауважимо також, що параметр циклу може і не використовуватися в тілі циклу, так що основне його призначення - це управління числом повторень циклу. Наприклад, значення y \u003d x n, де n\u003e \u003d 0 - ціле, можна обчислити за наступним алгоритмом: попередньо покласти y \u003d 1, а потім n раз помножити це значення на x:

Приклад коду програми циклу Паскаля

Readln (n);
Readln (x);
Y: \u003d 1;
For i: \u003d 1 to n do y: \u003d y * x;

Як видно, тут параметр циклу i служить лише для того, щоб тіло циклу (оператор y: \u003d y * x) виповнилося потрібне число раз.

Арифметичний оператор циклу Паскаля з довільним кроком

Природним ускладненням простого арифметичного циклу Паскаля, є цикл, в якому параметр циклу змінюється на 1, а на довільну величину - крок збільшення. При цьому в процесі виконання циклу крок змінюється по заданому закону. Стандартні оператори для реалізації такого циклу є в Форте, в інших мовах їх доводиться організовувати з найпростішого арифметичного циклу.

Ітераційні оператори циклу Паскаля

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

Нехай ми вирушаємо за грибами та повертаємося додому, коли корзина наповниться. Все грибники діляться на 2 категорії:

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

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

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

Який алгоритм вибрати? Це залежить від конкретного завдання.

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

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

Оператор циклу Паскаля з умовою поста

Розглянемо тепер задачку. Нехай нам необхідно обчислити суму перших членів гармонійного ряду, які відповідають умові 1 / i\u003e \u003d e, де 0< e<1, а i=1,2,3…...Эту задачу можно решить по следующему алгоритму: положить предварительно y=0 и i=0, а затем в цикле увеличивать i на 1, к значению y добавлять очередное слагаемое 1/ i до тех пор, пока текущее значение 1/ i впервые окажется больше заданного значения 0< e<1.

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

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

Repeat S1; S2; ...; Si until B,

де repeat (Повторювати) і until (До) - службові слова, через Si позначений будь-оператор Паскаля, а через Влогічне вираз.

При виконанні цього оператора циклу послідовність операторів, які перебувають між словами repeat і until, виконається один або більше разів. Цей процес завершується, коли після чергового виконання заданої послідовності операторів логічне вираз В прийме (вперше) значення true. Таким чином, за допомогою логічного виразу В задається умова завершення виконання оператора циклу. Оскільки в даному випадку перевірка умови проводиться після виконання послідовності операторів (тіла циклу), цей оператор циклу і називається оператором циклу з умовою поста.

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

Readln (e);
i: \u003d 0;
y: \u003d 0;
Repeat
i: \u003d i + 1;
y: \u003d y + 1 / i;
Until 1 / i

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

Приклад коду оператора циклу Паскаля з умовою поста

Readln (n);
i: \u003d 0;
y: \u003d 0;
Repeat
i: \u003d i + 1;
y: \u003d y + 1 / i;
Until i\u003e n;

Оператор циклу Паскаля з передумовою

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

Нехай, наприклад, дано дійсне число М. Потрібно знайти найменше ціле невід'ємне число k, при якому 3 k\u003e M. Це завдання можна вирішити за наступним алгоритмом: попередньо покласти y \u003d 1 і k \u003d 0; потім в циклі домножать значення y на 3 та збільшувати значення k на 1 до тих пір, поки поточне значення y вперше виявиться більше значення М. На перший погляд, тут можна скористатися оператором циклу з умовою поста:

Приклад коду оператора циклу Паскаля з умовою поста

Y: \u003d 1; k: \u003d 0;
Repeat
y: \u003d y * 3;
k: \u003d k + 1;
Until y\u003e M;

Однак неважко переконатися в тому, що при M<1 будет получен неправильный результат k=1, тогда как должно быть получено k=0: в этом случае предварительно сформированное значение k=0 является окончательным результатом и действия, предусмотренные в цикле, выполняться не должны.

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

де while (поки що), do (Робити, виконувати) - службові слова, В - логічне вираження, S - оператор. Тут оператор S виконується нуль або більше разів, але перед кожним черговим його виконанням обчислюється значення виразу В, і оператор S виконується тільки в тому випадку, коли значення виразу В true. Виконання оператора циклу завершується, коли вираз В вперше приймає значення false. Якщо це значення вираз В приймає при першому ж його обчисленні, то оператор S не виконається жодного разу.

У розглянутій нами задачі правильне значення k при будь-якому значенні М може бути отримано наступним чином:

Приклад коду оператора циклу Паскаля з передумовою

Y: \u003d 1; k: \u003d 0;
While y Begin
y: \u003d y * 3;
k: \u003d k + 1;
End;

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

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

Цикл з передумовою While (поки умова істинна) Цикл з умовою поста Repeat (до істинності умови)
  • До початку циклу повинні бути зроблені початкові установки змінних, керуючих умовою циклу, для коректного входу в цикл
  • У тілі циклу повинні бути присутнім оператори, що змінюють змінні умови так, щоб цикл через деякий число ітерацій завершився
  • Цикл працює поки умова істинна (поки True)
  • Цикл працює поки умова помилкова (поки False)
  • Цикл завершується, коли умова стає помилковим (до False)
  • Цикл завершується, коли умова стає істинним (до True)
  • Цикл може не виконатися жодного разу, якщо початкове значення умови при вході в цикл False
  • Цикл обов'язково виконається як мінімум один раз
  • Якщо в тілі циклу потрібно виконати більше одного оператора, то необхідно використовувати складовою оператор
  • Незалежно від кількості операторів в тілі циклу, використання складеного оператора не потрібно
Цикл з лічильником (з параметром) For
  • Початкова установка змінної лічильника циклу до заголовка не потрібно
  • Зміна в тілі циклу значень змінних, що стоять в заголовку не допускається
  • Кількість ітерацій циклу незмінно і точно визначається значеннями нижньої і верхньої меж і кроку збільшення
  • Нормальний хід роботи циклу може бути порушений оператором goto або процедурами Break і Continue
  • Цикл може не виконатися жодного разу, якщо крок циклу буде змінювати значення лічильника від нижньої межі в напрямку, протилежному верхній межі

Оператор, який виконується в циклі, сам може бути циклом. Це стосується всіх видів циклів. В результаті ми отримуємо вкладені цикли. Механізм роботи вкладених циклів найзручніше розглянути на прикладі вкладених циклів з параметром. Нехай нам потрібно описати роботу електронного годинника, починаючи з моменту часу 0 годин, 0 хвилин, 0 секунд. Значення хвилин стане рівним 1 тільки після того, як секунди «пробіжать» все послідовні значення від 0 до 59. Годинники змінять своє значення на 1 тільки після того, як хвилини «пробіжать» все послідовні значення від 0 до 59. Таким чином, висновок всіх значень часу від початку доби до кінця доби може бути представлений таким фрагментом програми:

For h: \u003d 0 to 23 do
For m: \u003d 0 to 59 do
For s: \u003d 0 to 59 do
Writeln (h, ":", m, ":", s);

Для зручності реалізації циклічних структур на Паскалі в останніх версіях мови введені оператори break і continue, Що застосовуються всередині циклів. Вони розширюють можливості використання циклів і покращують структуру програми.

В процесі виконання тіла циклу до повного завершення циклу можуть виникнути додаткові умови, що вимагають завершення циклу. У цьому випадку цикл може бути припинений оператором break.

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

Привіт, дорогі читачі! Ось ми з вами і підійшли до вивчення циклів. Цикли в Паскаль. Що це таке? Як цим користуватися? Для чого вони потрібні? Саме на ці питання я сьогодні і відповім.
Якщо ви читали, то знаєте, що існує три види алгоритмів: лінійний, розгалужується і циклічний. Ми з вами вже знаємо, як реалізовувати і алгоритми на Паскалі. Приступимо до вивчення останнього типу алгоритмів.
У мові Pascal, як і в більшості мов програмування, існує три типи циклічних конструкцій.

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

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

Завдання 1. Вивести всі числа від 1 до числа, введеного з клавіатури.

While, або цикл з передумовою

Як ви, напевно, вже зрозуміли з назви, while - це цикл, в якому умова стоїть перед тілом. Причому тіло циклу виконується тоді і тільки тоді, коли умова true; як тільки умова стає false

While має формат:

while < условие> do<оператор 1>; (Поки що ... роби ....)

Даний цикл підходить тільки для одного оператора, якщо ж ви хочете використовувати кілька операторів в своєму коді, вам слід зробити висновок їх в операторні дужки - beginі end;.

Рішення завдання.

Program example_while; var i, N: integer; (Оголошуємо змінні) begin i: \u003d 1; (Надаємо i значення 1) readln (N); (Прочитуємо останнє число) while i<= N do {Как только i станет больше N, цикл прекратится (можно было бы написать просто <, но пришлось бы добавлять 1 к N) } begin {Открываем операторные скобки} write(i, " "); {Выводим i} Inc(i); {увеличиваем i на один.} end; { закрываем скобки } end.

Repeat, або цикл з умовою поста

Repeat - повна протилежність while. Repeat - це цикл, в якому умова варто після тіла. Причому воно виконується тоді і тільки тоді, коли результат умови false; Як тільки логічне вираження стає true, Виконання циклу припиняється.

Repeat має формат:

repeat (Повторюй ...)
<оператор 1>;
< оператор 2>;

until (До ...) <условие>

Begin і end не потрібні.

Рішення завдання.

Program example_repeat; var i, N: integer; (оголошуємо змінні) begin i: \u003d 1; (Надаємо i значення 1) readln (N); (Прочитуємо останнє число) repeat (після repeat не потрібно begin і end) write (i, ""); (Виводимо i) Inc (i); (Збільшуємо i на один.) Until i \u003d N + 1; (Наприклад, i \u003d 11, а N \u003d 10. Цикл припиниться, так умова стало true.) End.

For, або цикл з параметром

For - це цикл, в якому тіло виконується задану кількість разів.

Існує дві форми запису цього циклу:

перша форма

for<счетчик1> := <значение1> to<конечное_значение> do<оператор1>;

<счетчик1> буде збільшуватися на 1.

<значение1> - це початкове значення лічильника. Це може бути змінна або число.
<конечное_значение> : Як тільки значення<счетчик1> побільшає<конечное_значение>

Якщо потрібно написати кілька операторів в тілі циклу, використовуємо begin і end.

І<счетчик1>, і<конечное_значение>, і<значение1> - змінні цілого типу.

Найчастіше в якості лічильника використовується змінна i.

друга форма

for<счетчик2> := <значение2> downto<конечное_значение> do<оператор1>;

Після кожної ітерації значення<счетчик2> буде зменшаться на 1.

<значение2> - це початкове значення лічильника.
<конечное_значение> : Як тільки значення<счетчик2> стане менше<конечное_значение>, Виконання циклу припиниться.

Два важливих примітки:

  1. Цикл повторюється, поки значення значення лічильника лежить в відрізку [значення; конечное_значеніе].
  2. Змінювати значення лічильника всередині тіла не можна! Ось що виводить компілятор:

Рішення завдання:

Program example_for; var i, N: integer; begin read (N); (Припустимо, що ми ввели 10) for i: \u003d 1 to N do write (i, ""); (Кількість ітерацій - 10 - 1 + 1 \u003d 10) end.

Погодьтеся, цей код простіше і лаконічніше, ніж всі попередні. І цикл for - не зовсім звичайний цикл, в ньому немає логічного умови. Тому цикл з параметром в програмуванні називають синтаксичним цукром. Синтаксичний цукор - це доповнення синтаксису мови програмування, які не додають нових можливостей, а роблять використання мови більш зручним для людини.

Давайте вирішимо пару завдань.

For1. Дано цілі числа K і N (N\u003e 0). Вивести N раз число K.

Організовуємо простий цикл від 1 до необхідного числа.

Program for1; var K, N, i: integer; begin read (K, N); for i: \u003d 1 to N do write (K, ""); (Пишемо До через пробіл) end.

For2. < B). Вывести в порядке возрастания все целые числа, расположенные между A и B (включая сами числа A и B), а также количество N этих чисел.

Так як A< B, то цикл должен будет выводить все числа от А до B. Чтобы сосчитать количество чисел, используем формулу: <конечное_значение> — <начальное_значение> + 1.

Program for2; var A, B, i, count: integer; begin read (A, B); for i: \u003d A to B do write (i, ""); (Виписуємо числа від меншого до більшого) count: \u003d B - A + 1; (Вважаємо кількість чисел) writeln; write ( "Кількість чисел -", count); end.

For9. Дано два цілих числа A і B (A< B). Найти сумму квадратов всех целых чисел от A до B включительно.

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

Program for9; var A, B, i, S: integer; begin read (A, B); S: \u003d 0; (PascalABC робить це автоматично, але якщо у вас інший компілятор радимо обнуляти змінні вручну) for i: \u003d A to B do S: \u003d S + Sqr (i); (Складаємо всі квадрати) writeln; write ( "Сума квадратів -", S); end.

For13 °. Дано ціле число N (\u003e 0). Знайти значення виразу 1.1 - 1.2 + 1.3 - ... (N доданків, знаки чергуються). умовний оператор не використовувати.

Для того, щоб поміняти знак, кожну ітерацію циклу міняємо значення спеціальної змінної на протилежне.

Program for13; var N, A, i: integer; S: real; begin Write ( "N \u003d"); readln (N); S: \u003d 1.1; A: \u003d 1; (Спочатку позитивне) for i: \u003d 2 to N do (першу ітерацію циклу ми вже зробили, тому починаємо відлік з 2) begin A: \u003d -A; (Тепер негативне) S: \u003d S + A * (1 + i / 10); (Складаємо) end; Writeln (S: 5: 1); (Віддамо під дробову частину одне знакоместо) end.

While1 °. Дано позитивні числа A і B (A\u003e B). На відрізку довжиною A розміщено максимально можлива кількість відрізків довжиною B (без накладання). Чи не використовуючи операції множення і ділення, знайти довжину незайнятої частини відрізка A.

Кожен раз віднімаємо B з А, поки А - В\u003e \u003d 0.

Program while1; var A, B: integer; begin readln (A, B); while (A - B)\u003e \u003d 0 do A: \u003d A - B; (Поки різниця позитивна, віднімаємо. Необхідно передбачити варіант з кратністю А і B, тому\u003e \u003d) write (A); end.

While4 °. Дано ціле число N (\u003e 0). Якщо воно є ступенем числа 3, то вивести True, якщо не є - вивести False.

Діємо в такий спосіб: поки N ділиться без остачі на три, ділимо N остачі. Потім, якщо N \u003d 1 - число є ступенем трійки; якщо N<> 1, тоді число - не ступінь трійки. Для того щоб вирішити цю задачу, потрібно знати, що таке, і як працюють.

Program while4; var N: integer; begin readln (N); while N mod 3 \u003d 0 do N: \u003d N div 3; (Поки залишок від ділення на три дорівнює нулю, ділимо N остачі) writeln (N \u003d 1); (Логічний вираз) end.

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

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

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

Форма запису: while<условие> do<оператор>;

тут while(поки що),do (Робити)- зарезервовані слова.

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

Блок-схема алгоритму роботи такого оператора наведена на рис. 1.

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

приклад

I спосіб

. Обчислення факторіала числа п(Тобто твори 1 2 ...п):

Program Fact_1;

Const n \u003d 5;

Var i, fact: integer;

Begin

i: \u003d 1; Fact: \u003d 1;

while i<=n do {заголовок цикла}

begin (початок циклу)

fact: \u003d fact * i;

i: \u003d i + 1

end; (Кінець циклу)

WriteLn ( "факторіал", n, "\u003d", Fact: 10)

End.

2. Оператор циклу з умовою поста. Блок-схема алгоритму роботи Оператора приведена на рис.2.

Форма запису:

Repeat

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

Until<условие>;

тут Repeat (Повторювати до тих пір), Until (Поки не буде виконана умова) - зарезервовані слова.

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

приклад:

II спосіб

. Обчислення факторіала числа п(Тобто твори 1 2 ...п):

Program Fact_2;

Const n \u003d 5;

Var i, fact: integer;

Begin

i: \u003d 1; Fact: \u003d 1;

Repeat

begin (початок циклу)

fact: \u003d fact * i;

i: \u003d i + 1

end; (Кінець тіла циклу)

Until i\u003e n; (Умова)

WriteLn ( 'Факторіал ", n," \u003d ", Fact: 10)

End.

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

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

Цей цикл дозволяє повторювати дії свідомо відоме кількість разів.

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

Форма запису:

FORлічильник \u003d нач_значеніеTOконечное_значеніеDO

BEGIN

. . . .

END;

Якщо необхідно, щоб параметр зменшувався на 1, то використовують слово Downto(Початкове значення більше кінцевого значення).

приклад:

III спосіб

Обчислення факторіала числа п(Тобто твори 1 2 ...п):

Program Fact_3;

Const n \u003d 5;

Var i, fact: integer;

Begin

Fact: \u003d 1;

for i: \u003d 1 to n do

begin (початок циклу)

fact: \u003d fact * i;

end; (Кінець циклу)

WriteLn ( "Факторіал", n, "\u003d", Fact: 10)

End.

В якості оператора можна використовувати будь-який простий або зставной оператор.

При використанні цього оператора циклу потрібно пам'ятати наступні правила:

1) в якості параметра можна використовувати просту змінну,описану в цьому ж блоці;

2) параметр повинен мати дискретний тип;

3) початкове і кінцеве значення повинні мати той же тип, що іпараметр;

4) в тілі циклу (операторі) явне зміна значення параметра(Наприклад, оператором присвоювання) може привести до нескінченногоциклу;

5) не можна в тілі циклу змінити початкове і кінцеве значення папараметра, якщо вони задані змінними;

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

САМОСТІЙНО

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

7 49

5 25

3 9

1 1

2. Вирішити задачу трьома способами (За допомогою різних видів циклу):

Через скільки роківL величина вкладу досягне бажаної сумиS (Руб.), При початковому внескуV (Руб.), Якщо щорічний відсоток, гарантований банком, становить 10% від величини вкладу.

Виконати алгоритм приS \u003d 100000 руб., V \u003d 10000 руб.

Оператори циклу змушують виконувати входять до їх складу оператори

декілька разів.

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

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

Формат оператора циклу з параметром:

for V: \u003d E1 to E2 do S

де V - змінна порядкоавого типу, Е1, Е2 - вираження того ж типу, S - оператор, званий тілом циклу. Вирази Е1 і Е2 обчислюються один раз при вході в цикл. Параметр V приймає спочатку значення Е1 потім Непос редственно наступне за ним (SUCC (V)) і т.д. до досягнення Е2. При кожному значенні V виконується оператор S. Якщо в тілі циклу необхідно виконати декілька операторів, то їх об'єднують в один за допомогою складеного оператора. Якщо кінцеве значення Е2 менше початкового Е1, то оператор S не виконується жодного разу.

Оператор циклу з параметром застосовується також у наступному вигляді:

for V: \u003d Е1 downto E2 do S

На відміну від першого випадку V змінюється від Е1 до Е2, переходячи від V до pred (V).

Відзначимо, що якщо V, Е1, Е2 типу INTEGER, то в першому випадку це цикл з кроком +1, а в другому з кроком -1.

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

Формат оператора циклу з передумовою:

де B - логічне вираження, S - оператор. Оператор S буде виконуватися поки умова B буде істинно. Виконання оператора циклу завершиться коли вираз B вперше прийме значення false.

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

Формат оператора циклу з умовою поста:

repeat S until B

де B - логічне вираження, S - оператор. Оператор S виконується до тих пір, поки B не стане істинним. Оператор REPEAT виконується принаймні один раз, так як перевірка істинності умови B здійснюється після виконання оператора S.

Службові слова REPEAT і UNTIL вже грають роль дужок, тому операторні дужки BEGIN і END є необов'язковими.

приклади програм

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

Програма 2.1.1. Цикл з параметром (крок +1)

PROGRAM FACTORIAL1;

VAR I, N: INTEGER;

WRITE ( "Введіть N");

READLN (N); F: \u003d 1;

FOR I: \u003d 1 TO N DO F: \u003d F * I;

Програма 2.1.2. Цикл з параметром (крок -1)

PROGRAM FACTORIAL2;

VAR I, N: INTEGER;

WRITE ( "Введіть N");

READLN (N); F: \u003d 1;

FOR I: \u003d N DOWNTO 1 DO F: \u003d F * I;

WRITELN ( "ФАКТОРІАЛ ВІД", N, "РАВЕН", F)

Програма 2.2. Цикл з передумовою

PROGRAM FACTORIAL3;

VAR I, N: INTEGER;

WRITE ( "Введіть N");

READLN (N); F: \u003d 1; I: \u003d 1;

WHILE I<=N DO

WRITELN ( "ФАКТОРІАЛ ВІД", N, "РАВЕН", F)

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

  1. прості;
  2. структуровані.

прості оператори - це оператори, що не містять в собі інших операторів. До них відносяться:

  • оператор присвоєння (: \u003d);
  • оператор процедури;
  • оператор безумовного переходу (GOTO).

структуровані оператори - це оператори, які містять в собі інші оператори. До них відносяться:

  • складовою оператор;
  • оператори умов (IF, CASE);
  • оператори циклу (FOR, WHILE, REPEAT);
  • оператор приєднання (WITH).

прості оператори

оператор процедури

оператор процедури служить для виклику процедури.

формат: [Імя_процедури] (список параметрів виклику);

Оператор процедури складається з ідентифікатора процедури, безпосередньо за яким в дужках розташований список параметрів виклику. У Паскалі є процедури без параметрів. В цьому випадку, при виклику, список параметрів відсутня. Виконання оператора процедури призводить до активізації дій описаних в її тілі. У мові Паскаль є два види процедур:

  • Стандартні, які описані в самій мові і є приналежністю мови;
  • Процедури користувача, які створює користувач.

Для виклику стандартних процедур необхідно підключення в розділі USES імені модуля (бібліотеки), де описана ця процедура. Ряд процедур, які перебувають в модулі SYSTEM завжди підключається до програми автоматично і їх підключення в розділі USES не потрібно. Стандартні процедури мови Паскаль - READ, WRITE, REWRITE, CLOSE, RESET.

READ ([файловая_переменная], [спісок_ввода])

READ (x, y)

Процедури користувача (нестандартні) повинні бути створені перед їх використанням в програмі і знаходяться або в розділі опису самої програми, або в окремі програмні одиниці модуля. Якщо процедура знаходиться в модулі, то ім'я цього модуля необхідно згадати в додатку USES.

Оператор безумовного переходу GOTO

формат: GOTO [мітка];

GOTO - зарезервоване слово в мові Паскаль. [Мітка] - це довільний ідентифікатор, який дозволяє помітити якийсь оператор програми і надалі послатися на нього. У мові Паскаль допускається в якості міток використовувати ціле число без знаків. Мітка розташовується перед позначеним оператором і відокремлюється від нього (:). Один оператор можна позначати декількома мітками. Вони так само відокремлюються одна від одної (:). Перед тим як використовувати мітку в розділі оператора її необхідно описати в розділі LABEL (розділ опису).

Дія GOTO передає управління відповідного позначеного оператору. При використанні міток потрібно керуватися наступними правилами:

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

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

структуровані оператори

Оператори умови IF

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

У мові Паскаль умовний оператор IF це засіб організації ветвящегося обчислювального процесу.

формат: IF [логічний_вираз] Then [оператор_1]; Else [оператор_2];

IF, Then, Else - службові слова. [Оператор_1], [оператор_2] - звичайні операції мови Паскаль. Частина Else є необов'язковою (може бути відсутнім).

Оператор IF працює наступним чином: спочатку перевіряється результат логічного виразу. Якщо результат Істина (TRUE), то виконується [оператор_1], наступний за службовим словом Then, а [оператор_2] пропускається. Якщо результат Брехня (FALSE), то [оператор_1] пропускається, а [оператор_2] виконується.

Якщо частина Else відсутня, то оператор IF має не повну форму:

IF [логічний_вираз] Then [оператор];

В цьому випадку, якщо результат Істина (TRUE), то виконується [оператор], якщо Брехня (FALSE), то управління передається оператору, наступному за оператором IF.

є 2 числа A і B. Знайти максимальне число.

складовою оператор

Складовою оператор - це послідовність довільних операцій в програмі, укладена в так звані операторні дужки (Begin-End).

формат: Begin [оператори]; End;

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

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

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

формат: CASE [ключ_вибора] OF

[Константа_вибора_1]: [оператор_1];

[Константа_вибора_2]: [оператор_2];

[Константа_вибора_N]: [оператор_N];

ELSE [оператор];

CASE, OF, ELSE, END - службові слова. [Ключ_вибора] - це параметр одного з порядкових типів. [Константи_вибора] - константи того ж типу, що й ключ вибору, що реалізують вибір. [Оператор_1 (N)] - звичайний оператор. ELSE може бути відсутнім.

Оператор вибору працює наступним чином: до роботи оператора визначається значення параметра ключ вибору. Цей параметр може бути або виражений як змінна в програмі, або іншим шляхом. Потім параметр ключ вибору послідовно порівнюємо з константою вибору. При збігу значення ключа вибору з однією з констант вибору, виконується оператор, наступний за цією константою, а всі інші оператори ігноруються. У разі не збіги ключа вибору ні з одним з констант, виконується оператор, наступний за Else. Часто Else є не обов'язковою і в разі розбіжності ключа вибору ні з однією з констант вибору і при відсутності Else, управління передається оператору, наступному за оператором CASE.

В операторі CASE немає явної перевірки умови, характерного для оператора IF. У той же час в неявному вигляді операція порівняння виконується. CASE вносить дисонанс в програму на мові Паскаль, оскільки дані оператор завершується службовим словом End, якому немає парного Begin.

Скласти алгоритм і програму завдання, що моделює роботу світлофора. При введенні символу першої літери кольорів світлофора, програма повинна виводити повідомлення про відповідне кольорі і діях.

Програма працює наступним чином: з клавіатури процедурою Read вводиться символ літери кольору світлофора. Якщо введена буква 'з' відповідна зеленому кольору, то в операторі CASE введено значення в списку вибору знайде константу вибору 'з' і буде виведено повідомлення "Зелений колір, рух дозволено". При введенні символу букв 'до' і 'ж' буду виведені аналогічні повідомлення. При введенні будь-якого іншого символу буде виведено повідомлення "Світлофор не працює", оскільки в цьому випадку працює частина Else, оператора CASE.

Оператори циклу

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

У циклі з параметром завжди є так звані параметри циклу: X, X n, X k, ΔX. Іноді цикл з параметром називають регулярним циклом. Характерною рисою є те, що число циклів і повторень можна визначити до виконання циклу.

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

У мові Паскаль є три оператора, що реалізують циклічні обчислювальні структури:

  • рахунковий оператор FOR. Він призначений для реалізації циклу з параметром і не може бути використаний для реалізації ітераційного циклу;
  • оператор циклу з передумовою WHILE;
  • оператор циклу з умовою поста REPEAT.

Останні два орієнтовані на реалізацію ітераційного циклу, проте їх можна використовувати і для реалізації циклу з параметром.

оператор FOR

формат: FOR [параметр_цікла]: \u003d [н_з_п_ц] To [к_з_п_ц] Do [оператор];

FOR, To, Do - службові слова. [Параметр_цікла] - параметр циклу. [Н_з_п_ц] - початкове значення параметра циклу. [К_з_п_ц] - кінцеве значення параметра циклу. [Оператор] - довільний оператор.

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

Роботу оператора розглянемо на його алгоритмі:

На першому кроці значення параметра циклу приймає [н_з_п_ц], потім здійснюється перевірка параметр циклу менше або дорівнює [к_з_п_ц]. Ця умова є умовою продовження циклу. Якщо виконано, то цикл продовжує свою роботу і виконується [оператор], після чого параметр циклу збільшується (зменшується) на одиницю. Потім з новим значенням параметр циклу, перевіряється умова продовження циклу. Якщо воно виконується, то дії повторюються. Якщо умова не виконується, то цикл припиняє свою роботу.

Оператор For істотно відрізняється від аналогічних операторів в інших мовах програмування. Відмінності наступні:

  • тілом оператора For. Оператор може не виконатися жодного разу, оскільки перевірка умови продовження циклу виконується до тіла циклу;
  • крок зміни параметра циклу постійний і дорівнює 1;
  • тіло циклу в операторі For представлено одним оператором. У тому випадку, якщо дія тіла циклу вимагає більше одного простого оператора, то ці оператори необхідно перетворити в один складений оператор за допомогою операторних дужок (BEGIN-END);
  • Параметр циклу може бути тільки зміною порядкового типу.

Приклад використання оператора FOR: скласти таблицю рублів в долари.

Оператор WHILE (оператор циклу з передумовою)

формат: WHILE [умова] Do [оператор];

WHILE, Do - службові слова. [Умова] - вираз логічного типу. [Оператор] - звичайний оператор.

;

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

При роботі з While треба звернути увагу на його властивості:

  • умови, використані в While, є умовою продовження циклу;
  • в тілі циклу завжди відбувається зміна значення параметра вхідного в вираз умови;
  • цикл While може, не виконається жодного разу, оскільки перевірка умови в продовження циклу виконується до тіла циклу.

Оператор REPEAT (оператор циклу з умовою поста)

формат: REPEAT [тіло_цикла]; UNTIL [умова];

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

Оператор Repeat має такі особливості:

  • в Repeat перевіряється умова завершення циклу і якщо умова виконується, то цикл припиняє роботу;
  • тіло циклу завжди виконується хоча б один раз;
  • параметр для перевірки умови змінюється в тілі циклу;
  • оператори тіла циклу не треба укладати в операторські дужки (BEGIN-END), при цьому роль операторних дужок виконують Repeat і Until.

Обчислити y \u003d sin (x), де xn \u003d 10, xk \u003d 100, крок дорівнює 10.

THE BELL

Є ті, хто прочитали цю новину раніше вас.
Підпишіться, щоб отримувати статті свіжими.
Email
ім'я
Прізвище
Як ви хочете читати The Bell
без спаму