Оператори циклу. Оператори циклів Завдання цілої арифметики

С.А. Григор'єв

Задля реалізації циклічних алгоритмів, тобто. алгоритмів, що містять однакові операції, що багато разів повторюються, застосовуються спеціальні оператори циклу. У Паскалі є три види циклів: FOR, WHILE та REPEAT. Оператор циклу FOR записується у вигляді:

FOR змінна:=початкове значення TO кінцеве значення DO

оператор/блок

FOR змінна:=початкове значення DOWNTO кінцеве значення DO

оператор/блок.

Тут змінна - будь-яка змінна порядкового типу, звана в такому контексті змінної циклу, початкове значення і кінцеве значення - вирази того ж типу (виняток, як завжди робиться для цілісних різнотипних змінних). Цикл FOR виконується наступним чином: змінній циклу надається початкове значення, після чого виконується тіло циклу (оператор або блок, що стоїть після DO). Дві ці дії разом становлять один крок циклу. Потім змінній циклу присвоюється наступне (у циклі FOR...TO) або попереднє (у циклі FOR...DOWNTO) значення (згадаймо функції Succ та Pred) та виконується наступний крок циклу. Так відбувається до того часу, поки значення змінної циклу стане більше (FOR...TO) чи менше (FOR...DOWNTO) кінцевого значення. Цикл FOR може не виконатися жодного разу, якщо початкове значення більше кінцевого в циклі FOR...TO або менше кінцевого циклу FOR...DOWNTO. Запишемо два приклади використання циклу FOR: обчислимо суму квадратів натуральних чисел від 1 до N.

CONST: Real = 0; N = 22;

BEGIN FOR i:=1 TO N DO s:=s+SQR(i); WRITELN("сума=",s); END.

та виведемо на екран символи з номерами від 32 до 255

BEGIN FOR c:=" " TO #255 DO WRITE(c); WRITELN; END.

Другий тип циклу – цикл WHILE – записується у вигляді:

WHILE логічний вираз DO оператор/блок

Тут логічний вираз – будь-який вираз типу Boolean. Цикл виконується так: обчислюється логічне вираз і, якщо воно істинно, виконується тіло циклу, інакше цикл закінчується. Очевидно, що цикл WHILE може не виконатися жодного разу, так і виконуватися нескінченну кількість разів (в останньому випадку кажуть, що програма зациклилася). Запишемо два попередні завдання, використовуючи цикл WHILE:

BEGIN WHILE i<=N DO BEGIN s:=s+SQR(i); INC(i); END;

WRITELN("сума=",s);

BEGIN c:=Pred(" ");

WHILE c<#255 DO BEGIN c:=Succ(c); WRITE(c); END;

Як вправи, подумайте, чому програма

WHILE c<=#255 DO BEGIN WRITE(c); c:=Succ(c); END;

виявляється зацикленою.

Третій тип циклу – REPEAT – записується у вигляді:

REPEAT оператори UNTIL логічний вираз;

Якщо тіло циклу REPEAT містить більше одного оператора, немає необхідності використовувати блок, оскільки самі ключові слова REPEAT та UNTIL є у цьому випадку логічними дужками. Перед UNTIL не можна ставити ";". Цикл REPEAT виконується так: спочатку виконується тіло циклу, потім обчислюється логічне вираження, і якщо воно є істинним, цикл закінчується. Таким чином, цикл REPEAT завжди виконується хоча б один раз і так само, як і WHILE, схильний до зациклювання. Запишемо наші приклади циклом REPEAT:

CONST i: Word = 1; Real = 0; N = 22;

BEGIN REPEAT s:=s+SQR(i); INC(i) UNTIL i>N;

WRITELN("сума=",s);

BEGIN c:=Pred(" ");

REPEAT c:=Succ(c); WRITE(c) UNTIL c=#255;

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

В останній версії мови Паскаль з'явилися процедури BREAK та CONTINUE, аналогічні операторам break та continue мови С. Процедура BREAK призводить до негайного закінчення циклу, в якому вона викликана. Виклик процедури CONTINUE призводить до негайного переходу до наступного кроку циклу. Запишемо наші приклади, використовуючи BREAK:

CONST i: Word = 1; s: Real = 0; N = 22;

BEGIN WHILE TRUE DO BEGIN

s:=s+SQR(i); INC(i); IF i>N THEN BREAK; END;

WRITELN("сума=",s);

BEGIN c:=Pred(" ");

REPEAT c:=Succ(c); WRITE(c); IF c=#255 THEN BREAK UNTIL FALSE;

Щоб навести осмислений приклад використання процедури CONTINUE, змінимо умову другого завдання наступним чином: вивести на екран усі символи з 32-го по 255-й, що не є російськими літерами.

IF (c>="А")AND(c<="Я")OR(c>="а")AND(c<="п")OR

(c>="р")AND(c<="я") THEN CONTINUE;

Втім, останнє завдання, очевидно, можна вирішити простіше:

BEGIN FOR c:=" " TO #255 DO BEGIN

IF NOT((c>="A")AND(c<="Я")OR(c>="а")AND(c<="п")OR

(c>="р")AND(c<="я")) THEN WRITE(c);


Include main() ( int i=0; /*i=0, а не одиниці*/ do i++; while (getchar()!='R'); printf("Символ R %d-й",i); ) Програма, представлена ​​вище, тепер написана циклом do-while. Результат програми буде таким самим. Оператор циклу for Опис: for (вираз 1; вираз 2; вираз 3) оператор; Дія: У круглих дужках міститься три вирази. Перший з них служить для...

1 до 9. Іншим варіантом використання оператора for є нескінченний цикл. Для організації такого циклу можна використовувати порожній умовний вираз, а для виходу із циклу зазвичай використовують додаткову умову та оператор break. Приклад: for (;;) ( ... ... break; ... ) Оскільки відповідно до синтаксису мови С# оператор може бути порожнім, тіло оператора for також може бути порожнім. Така...

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

Визначає, як змінюватиметься параметр циклу. В операторі for спочатку перевіряється умова і якщо значення умови "істинно", то йде виконання тіла циклу (блок операторів або простого оператора). Завдання №3. «Масиви та підпрограми» Результатом виконання третього завдання має бути програма, написана з використанням підпрограм – не менше 2 процедур та 1 функції. Завдання...

Обладнання: Персональний комп'ютер, компілятор мови C#.

Мета роботи: Ознайомитись з операторами циклу та навчитися застосовувати їх у С#-програмах.

Циклічна керуюча структура застосовується в організацію багаторазового виконання деякого оператора. Оператор циклу включає<заголовок цикла>і<тело цикла>. Заголовок визначає кількість повторень циклу, а тіло - повторювані оператори.

C реалізовано три види оператора циклу.

(1) Цикл while

while<условие>

<тело цикла>

Умова – це логічне вираження булевського типу.

Тіло циклу - це оператор, або послідовність операторів, укладена в операторні дужки ( ). Алгоритм виконання циклу while

1. Обчислюється значення умови.

2. Якщо умова є істинною, то виконуються оператори тіла циклу і повторюється крок 1.

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

(2) Циклdo while

<телоцикла>

while(<условие>);


Умова – це вираз булевського типу.

Тіло циклу - це оператор, чи послідовність операторів, розділена символом ";".

Алгоритм виконання циклу do while

1. Виконуються оператори тіла циклу.

2. Обчислюється значення умови.

3. Якщо умова хибна, повторюється крок 1.

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

Зауваження.

1. Оператор dowhile, на відміну оператора while, обов'язково виконається по крайнього заходу один раз.

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

3. Якщо оператори тіла циклу не впливають на значення умови та умову істинно перед виконанням циклу while і після виконання циклу dowhile, цикл буде виконуватися нескінченно (ефект "зациклювання").

(3) Оператор for

Оператор for – це найбільш загальний спосіб організації циклу. Він має наступний формат:

for (вираз 1; вираз 2; вираз 3) тіло

Вираз 1 зазвичай використовується встановлення початкового значення змінних, управляючих циклом. Вираз 2 - це вираз, що визначає умова, за якої тіло циклу виконуватиметься. Вираз 3 визначає зміну змінних, що управляють циклом після кожного виконання тіла циклу.

Схема виконання оператора for:

1. Обчислюється вираз 1.

2. Обчислюється вираз 2.

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

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

for (i=1; i<10; i++)

У цьому вся прикладі обчислюються квадрати чисел від 1 до 9.

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


Оскільки згідно з синтаксисом мови С# оператор може бути порожнім, тіло оператора for також може бути порожнім. Така форма оператора може бути використана для пошуку.

for (i=0; t[i]<10 ; i++) ;

У цьому прикладі змінна циклу i приймає значення номера першого елемента масиву t, значення якого більше 10. Типи параметра циклу, початкового та кінцевого значень повинні бути сумісні. Допускається будь-який скалярний тип крім матеріального, тобто. будь-який порядковий тип. Порядок, встановлений на безлічі значень таких типів, дозволяє для будь-якого значення визначити наступне і попереднє.

Тіло циклу - це оператор, чи послідовність операторів, укладена в операторні дужки ( ).

Зауваження

1. Цикл for доцільно використовувати у випадках, коли заздалегідь відомо кількість повторень циклу.

2. Значення параметра циклу не можна змінювати всередині тіла циклу і слід вважати це значення невизначеним при виході із циклу.

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

Лабораторна робота 3 включає 4 завдання.

1. Обробка послідовностей значень.

При обробці послідовності її елементи не запам'ятовуються, а обробляються після введення.

Дано натуральне число n і цілі числа A1, A2, ..., An. З'ясувати, скільки зустрінеться в послідовності раніше позитивне чи негативне. Якщо всі члени дорівнюють нулю, то повідомити про це.

Розглянемо кодпроцедури Main()

Console.WriteLine("Введіть n");

N = Console.ReadLine();

n = Convert.ToInt32(N);

while ((a == 0) && (i< n))

Console.WriteLine("Введіть a");

A = Console.ReadLine();

a = Convert.ToInt32(A);

Console.WriteLine("Всеелементирівні 0");

Console.WriteLine("Перший не нульовий елемент негативний");

Console.WriteLine("Перший не нульовий елемент позитивний");

Console.ReadLine();

2. Роздруківка як таблиці значення заданої функції.

Обчислити значення функції:

для а=1,1.1,1.2,...,1+0.1n і роздрукувати як таблиці значень з двома знаками після десяткової точки.

N = Console.ReadLine();

n = Convert.ToInt32(N);

for (i = 1; i< n + 1; i++)

f = ((a - 3) * a + 2) / Math.Sqrt (2 * a * a * a - 1);

Console.WriteLine("*(0)*(1)", a, f);

Console.WriteLine("********************************");

Console.ReadLine();

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

Для заданих дійсного x та цілого n (n>0) обчислити

Розглянемо код процедури Main():


double x, s, h, f;

Console.WriteLine("Введіть кількість елементів");

N = Console.ReadLine();

n = Convert.ToInt32(N);

Console.WriteLine("Введіть значення x");

X = Console.ReadLine();

x = Convert.ToDouble(X);

for(i = 0; i< n; i++)

f = f * (2 * n) * (2 * n + 1);

Console.WriteLine("Summa=(0)",s);

Console.ReadLine();

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

4. Завдання на ітераційний цикл із заздалегідь невідомою кількістю кроків. Реалізувати метод Ньютона знаходження наближення до кореня ступеня k дійсного неотрицательного x.

Нехай y0 – початкове наближення до кореня. Будемо послідовно отримувати значення:


y1=y0-(y0 k - x)/(k*y0 k-1),

y2=y1-(y1 k - x)/(k*y1 k-1),

y3=y2-(y2k-x)/(k*y2k-1) і т.д.

Процес будемо продовжувати доти, доки модуль різниці двох послідовних наближень більше деякого заданого e. Отримане значення буде наближенням до кореня ступеня k x з точністю e. Зауважимо, що на кожному кроці нам потрібні лише два останні наближення. Розглянемо код функції Main():

string K, X, EPS;

double x, d = 1, y, eps;

Console.WriteLine("Введіть ступінь");

K = Console.ReadLine();

k = Convert.ToInt32(K);

Console.WriteLine("Введітьзначенняпершогоелемента");

X = Console.ReadLine();

x = Convert.ToDouble(X);

Console.WriteLine("Введіть значення епсилента");

EPS = Console.ReadLine();

eps = Convert.ToDouble(EPS);

while (Math.Abs(d)>eps)

d=(x/Math.Exp((k-1)*Math.Log10(y))-y)/k;

Console.WriteLine("Наближення докорню дорівнює (0)", d);

Console.ReadLine();

Вправи для контрольної роботи №2

Варіант 1

1. Дано цілі числа а1,...,аn,an+1,...;а1>0, серед а2,а3,... є хоча б одне негативне. Нехай а1, ..., аn члени, що передують першому негативному. Отримати min(a1+a2,a2+a3,...,an-1+an).

2. Дано натуральне число n. Обчислити суму та роздрукувати

3. Дано дійсні числа а і b (a

4. Обчислити суму ряду

та роздрукувати. Обчислення припиняються за умови

Варіант 2

1. Дані натуральні числа n, a 1, ..., a n. Визначити кількість членів а до послідовності а 1, ..., а n, що є квадратами парних чисел.

2. Дано натуральне число n, дійсне - х. Обчислити:

3. Отримати значення функції Z та роздрукувати у вигляді колонки X i , Z i

Завдання цілочисленної арифметики

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

Для організації циклу необхідно виконати такі дії:

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

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

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

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

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

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

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

Для організації циклу з відомим числом повторень Pascal використовується оператор for.

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

For I:= A To B Do Begin<операторы>End;

For I:= A DownTo B Do Begin<операторы>End;

Тут I - параметр, що змінюється у циклі; A, B - вирази порядкового типу, що позначають початкове кінцеве значення параметра циклу. Крок зміни номера параметра циклу дорівнює 1, якщо в заголовку циклу стоїть To (тобто реально наступне значення параметра циклу обчислюється за допомогою функції succ); і -1 - при DownTo (обчислення провадиться за допомогою функції pred).

Порядок виконання циклу з кроком 1 наступний: обчислюються значення початкового та кінцевого значень параметра циклу; параметр якщо I набуває початкового значення; якщо I менше або дорівнює кінцевому значенню, виконується тіло циклу; значення параметра циклу зростає, тобто. I:= succ(I); перевіряється умова I<=B (для отрицательного шага условие I>=B) і за його виконання цикл повторюється. Вихід із циклу здійснюється, якщо I>B (I B (або A

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

Завдання 1. Дано натуральне n, дійсне x. Обчислити

Розробимо алгоритм розв'язання задачі:

1) ввести дані - кількість доданків n та число x;

2) присвоїти змінній, в якій зберігатимемо ступеня sin x, значення 1; S:= 0;

3) присвоїти параметру циклу значення 1;

4) якщо значення параметра циклу менше n, перейти до наступного пункту, інакше п. 9;

5) обчислити черговий ступінь sin x;

6) додати обчислене значення сумі;

7) збільшити параметр циклу на 1;

8) перейти до п.4;

9) вивести на друк суму S;

(Програма обчислення суми ступенів sin x)

Var S, X, Pr: Real; N, I: Integer;

Write("Введіть число доданків та x: "); ReadLn(N, X);

Pr: = 1; (у цій змінній зберігаються послідовні ступеня sin x)

For I:= 1 To N Do

Pr: Pr * Sin (X); (Черговий ступінь Sin(x))

WriteLn("Сума дорівнює", S: 7: 4)

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

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

Порівняно з циклом із параметром ітераційні цикли є універсальними. Для організації ітераційних циклів використовуються оператори циклу з умовою while і циклу з умовою repeat..until.

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

Відповідні структури циклів:

while B Do Begin<операторы>End;

Repeat<операторы>Until C;

Тут B, C – логічні вирази.

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

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

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

Завдання 2. Знайти найменший номер члена послідовності, котрому виконується умова |an-an-1|

Оскільки по ходу розв'язання задачі необхідно знати an та an-1, запам'ятовуватимемо їх відповідно в змінних ANew та AOld.

Var Eps, AOld, ANew: Real; N: Integer;

Write("Введіть число Epsilon"); ReadLn(Eps);

AOld:= 0; ANew:= ArcTan(AOld) + 1;

WriteLn(AOld: 8:5); WriteLn(ANew: 8:5);

While Abs(ANew - AOld) >= Eps Do

ANew:= ArcTan(AOld) + 1;

WriteLn(ANew: 8:5);

WriteLn("Шуканий номер", N)

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

Завдання 3. На інтервалі знайти натуральне число із максимальною сумою дільників.

Запропонована задача може бути віднесена до класу «завдання цілісної арифметики», де аргументи, результати та проміжні величини відносяться до цілого типу. Слід зазначити, що у таких завданнях досить часто використовуються операції DIV і MOD; Найбільш типовим підзавданням є визначення кількості цифр у записі числа.

Алгоритм розв'язання задачі:

1) запровадити число n;

2) змінної для зберігання максимальної суми дільників привласнити

значення 1 (це сума дільників числа 1);

3) запам'ятати число із максимальною сумою дільників;

4) параметру циклу I присвоїти значення 2;

5) якщо I більше n, перейти до п. 13, інакше – до наступного пункту;

6) змінною для зберігання чергової суми дільників надати значення 0;

7) параметр циклу K присвоїти значення 1;

8) якщо K більший за I/2, перейти до п. 11, інакше - до наступного пункту;

9) якщо I ділиться на K без залишку, додати K до поточної суми дільників;

10) збільшити K на 1 і перейти до п. 8;

11) порівняти поточну суму дільників з максимальною, якщо максимальна менша,

запам'ятати нове значення та число, що відповідає цій сумі;

12) збільшити I на 1 та перейти до п. 5;

13) вивести число з максимальною сумою дільників та цю суму;

Program Sum_Del;

Var N, I, Sum_Max, Sum, K, Ch: Integer;

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

Sum_Max: = 1; (Максимальна сума дільників)

Ch: = 1; (Число з максимальною сумою дільників)

For I:= 2 To N Do (Це цикл за кількістю чисел)

For K:= 1 To I Div 2 + 1 Do (У цьому циклі знаходимо суму дільників)

If I Mod K = 0 Then (Якщо I націло ділиться на K, то K – дільник I)

If Sum > Sum_Max Then Begin Sum_Max:=Sum; Ch: = I End;

WriteLn("Максимальну суму дільників", Sum_Max, "має число",Ch)

Завдання 4. Дано натуральне число n. Отримати всі найпростіші дільники цього числа.

(Програма відшукання найпростіших дільників цього числа)

Var N, I, Vsp: Integer;

Log_Per, Priznak: Boolean;

Write("Введіть натуральне число:");

Priznak:= True; (Ознака того, чи не введене число є простим)

(Поки параметр циклу не перевищив квадратного кореня з даного числа,

продовжуємо пошук простих дільників)

Для I:= 2 To Round(Sqrt(N)) Do

If N Mod I = 0 Then

Priznak:= False; (Введене число не є простим)

Log_Per:=False; (Логічна змінна, що приймає значення True,

якщо знайшлися дільники I, відмінні від 1 та I)

If (I Mod Vsp = 0) And (I<>Vsp) Then Log_Per: = True;

Until (Vsp > I Div 2 + 1) Or Log_Per;

If Not(Log_Per) Then WriteLn(I) (Якщо число I просте, друкуємо його)

If Priznak Then WriteLn(N)

Пропонуємо читачеві самостійно розібратися з поданим рішенням.

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

Обладнання: Персональний комп'ютер, компілятор мови C#.

Мета роботи: Ознайомитись з операторами циклу та навчитися застосовувати їх у С#-програмах.

Циклічна керуюча структура застосовується в організацію багаторазового виконання деякого оператора. Оператор циклу включає<заголовок цикла>і<тело цикла>. Заголовок визначає кількість повторень циклу, а тіло - повторювані оператори.

C реалізовано три види оператора циклу.

(1) Цикл while

While<условие>

<тело цикла>

Умова – це логічне вираження булевського типу.

Тіло циклу - це оператор, чи послідовність операторів, укладена в операторні дужки ( ). Алгоритм виконання циклу while

1. Обчислюється значення умови.

2. Якщо умова є істинною, то виконуються оператори тіла циклу і повторюється крок 1.

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

(2) Цикл do while

<тело цикла>

while (<условие>);


Умова – це вираз булевського типу.

Тіло циклу - це оператор, чи послідовність операторів, розділена символом ";".

Алгоритм виконання циклу do while

1. Виконуються оператори тіла циклу.

2. Обчислюється значення умови.

3. Якщо умова хибна, повторюється крок 1.

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

Зауваження.

1. Оператор do while на відміну від оператора while обов'язково виконається принаймні один раз.

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

3. Якщо оператори тіла циклу не впливають на значення умови та умову істинно перед виконанням циклу while та після виконання циклу do while, то цикл виконуватиметься нескінченно (ефект "зациклювання").

(3) Оператор for

Оператор for – це найбільш загальний спосіб організації циклу. Він має наступний формат:

for (вираз 1; вираз 2; вираз 3) тіло

Вираз 1 зазвичай використовується встановлення початкового значення змінних, управляючих циклом. Вираз 2 - це вираз, що визначає умова, за якої тіло циклу виконуватиметься. Вираз 3 визначає зміну змінних, що управляють циклом після кожного виконання тіла циклу.

Схема виконання оператора for:

1. Обчислюється вираз 1.

2. Обчислюється вираз 2.

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

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

for (i=1; i<10; i++)

У цьому вся прикладі обчислюються квадрати чисел від 1 до 9.

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


Оскільки згідно з синтаксисом мови С# оператор може бути порожнім, тіло оператора for також може бути порожнім. Така форма оператора може бути використана для пошуку.

for (i=0; t[i]<10 ; i++) ;

У цьому прикладі змінна циклу i приймає значення номера першого елемента масиву t, значення якого більше 10. Типи параметра циклу, початкового та кінцевого значень повинні бути сумісні. Допускається будь-який скалярний тип крім матеріального, тобто. будь-який порядковий тип. Порядок, встановлений на безлічі значень таких типів, дозволяє для будь-якого значення визначити наступне і попереднє.

Тіло циклу - це оператор, чи послідовність операторів, укладена в операторні дужки ( ).

Зауваження

1. Цикл for доцільно використовувати у випадках, коли заздалегідь відомо кількість повторень циклу.

2. Значення параметра циклу не можна змінювати всередині тіла циклу і слід вважати це значення невизначеним при виході із циклу.

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

Лабораторна робота 3 включає 4 завдання.

1. Обробка послідовностей значень.

При обробці послідовності її елементи не запам'ятовуються, а обробляються після введення.

Дано натуральне число n і цілі числа A1, A2, ..., An. З'ясувати, скільки зустрінеться в послідовності раніше позитивне чи негативне. Якщо всі члени дорівнюють нулю, то повідомити про це.

Розглянемо код процедури Main()

Console.WriteLine("Введіть n");

N = Console.ReadLine();

n = Convert.ToInt32(N);

while ((a == 0) && (i< n))

Console.WriteLine("Введіть a");

A = Console.ReadLine();

a = Convert.ToInt32(A);

Console.WriteLine("Всі елементи дорівнюють 0");

Console.WriteLine("Перший не нульовий елемент негативний");

Console.WriteLine("Перший не нульовий елемент позитивний");

Console.ReadLine();


Include main() ( int i=0; /*i=0, а не одиниці*/ do i++; while (getchar()!='R'); printf("Символ R %d-й",i); ) Програма, представлена ​​вище, тепер написана циклом do-while. Результат програми буде таким самим. Оператор циклу for Опис: for (вираз 1; вираз 2; вираз 3) оператор; Дія: У круглих дужках міститься три вирази. Перший з них служить для...

Якщо в операторі циклу з параметром початкове або кінцеве значення параметра задані змінними або виразами, значення цих змінних повинні бути визначені в програмі до оператора циклу. Не слід всередині циклу змінювати параметр циклу, його початкове та кінцеве значення за допомогою операторів привласнення або введення. Завдання 1. Дано натуральне n, дійсне x. Обчислити Розробимо...

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

Визначає, як змінюватиметься параметр циклу. В операторі for спочатку перевіряється умова і якщо значення умови "істинно", то йде виконання тіла циклу (блок операторів або простого оператора). Завдання №3. «Масиви та підпрограми» Результатом виконання третього завдання має бути програма, написана з використанням підпрограм – не менше 2 процедур та 1 функції. Завдання...

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

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

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

  • оператор присвоєння (:=);
  • оператор процедури;
  • оператор безперечного переходу (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 [параметр_цикла] := [н_з_п_ц] 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=sin(x), де xn=10, xk=100, крок дорівнює 10.