УРОК №6 |
ЦИКЛЫ |
Алгоритм или программа использующие структуру повторения называются циклическими.
Циклический алгоритм - алгоритм, который содержит повторяющуюся часть и повторение происходит до тех пор пока не выполнится некоторое условие.
Существуют несколько видов циклов: Порядковый (счетный) цикл, Цикл с предусловием и Цикл с постусловием.
Для организации любого цикла необходимо знать:
1. Параметр цикла [ ПЦ ] - переменная, которая меняет свое значение в процессе выполнения цикла.
2. Начальное значение параметра цикла [ НЗ ] - значение переменной до начала выполнения повторений.
3. Условие при котором цикл прекратит свое выполнение или количество повторений.
4. Шаг - значение с которым изменяется параметр цикла.
5. Конечное значение параметра цикла [ КЗ ] - значение переменной после выполнения всех повторений.
6. Тело цикла (Команду или список команд), которые нужно повторять.
Циклический алгоритм - алгоритм, который содержит повторяющуюся часть и повторение происходит до тех пор пока не выполнится некоторое условие.
Существуют несколько видов циклов: Порядковый (счетный) цикл, Цикл с предусловием и Цикл с постусловием.
Для организации любого цикла необходимо знать:
1. Параметр цикла [ ПЦ ] - переменная, которая меняет свое значение в процессе выполнения цикла.
2. Начальное значение параметра цикла [ НЗ ] - значение переменной до начала выполнения повторений.
3. Условие при котором цикл прекратит свое выполнение или количество повторений.
4. Шаг - значение с которым изменяется параметр цикла.
5. Конечное значение параметра цикла [ КЗ ] - значение переменной после выполнения всех повторений.
6. Тело цикла (Команду или список команд), которые нужно повторять.
СЧЕТНЫЙ ЦИКЛ С ИЗВЕСТНЫМ КОЛИЧЕСТВОМ ШАГОВ - (ЦИКЛ ДЛЯ...)
ВАЖНО!!! Порядковый или счетный цикл применяют в задачах только когда шаг равен 1 или -1, когда необходимо выполнить тело цикла определенное количество раз. Порядковый цикл напоминает шагометр или таймер и работает только с целыми, порядковыми переменными. Счетный цикл обычно считает: раз, два, три и т.д. или наоборот: ... три, два один.
СЧЕТНЫЙ ЦИКЛ ФОРМАЛЬНО ЗАПИСЫВАЕТСЯ ТАК:
НАПРИМЕР ДЛЯ C++
|
НАПРИМЕР ДЛЯ PASCAL
for i:=-10 to 25 do begin Write(i,' '); end; |
На экране компьютера увидим:
-10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
ВАЖНО!!! Посмотрите какая маленькая программа может вывести на экран целую кучу цифр. Если бы не было циклов, нам бы пришлось команду вывода использовать N-ое количество раз.
Счетный цикл можно запустить в обратную сторону с шагом = -1
НАПРИМЕР ДЛЯ C++
|
НАПРИМЕР ДЛЯ PASCAL
for i:=25 downto -10 do begin Write(i,' '); end; |
На экране компьютера увидим:
25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10
ЗАДАЧА
Решим задачу: Вывести на экран значение функции Y=X+5 для всех целых X от - 5 до 10.
1) X - параметр цикла; 2) Начальное значение параметра цикла Х=-5; 3) Условие прекращения цикла Х=10 4) Шаг =1; 5) Конечное значение параметра цикла X=10; 6) Тело цикла: Y=X+5; Вывод на экран значений X и Y; изменение параметра цикла на число шага X=X+Шаг (X=X+1).
Сколько же раз выполнится цикл? Давайте посчитаем: -5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 - 16 раз.
1) X - параметр цикла; 2) Начальное значение параметра цикла Х=-5; 3) Условие прекращения цикла Х=10 4) Шаг =1; 5) Конечное значение параметра цикла X=10; 6) Тело цикла: Y=X+5; Вывод на экран значений X и Y; изменение параметра цикла на число шага X=X+Шаг (X=X+1).
Сколько же раз выполнится цикл? Давайте посчитаем: -5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10 - 16 раз.
#include <conio.h> //базовые библиотека консоли ввода вывода
#include <windows.h> //расширенная библиотека управления консолью #include <iomanip> // библиотека, в которой содержится модификаторы #include <iostream> //библиотека, в которой содержатся потоки ввода и вывода cin и cout using namespace std; // Использовать пространство стандартных имён int x,y; //объявление переменных int main() { SetConsoleCP(1251); // установка режима консоли для кириллицы SetConsoleOutputCP(1251); for ( x =-5; x <= 10; x ++ ) //счетный цикл от -5 до 10 { y=x+5; //тело цикла cout<<"Y="<<y<<" при X="<<x<<endl; } getch(); // задержка содержимого экрана до нажатия любой клавиши return 0; }
|
VAR
x,y:integer; {объявление переменных} BEGIN For x:=-5 to 10 do {счетный цикл от -5 до 10} begin y:=x+5; {тело цикла} Writeln('Y=',y,' при X=',x); end; readln; END.
|
ЦИКЛ С ПРЕДУСЛОВИЕМ - (ЦИКЛ ПОКА...)
ВАЖНО!!! Цикл с предусловием - является универсальным оператором повторения, т.к работает с любым параметром цикла и любым шагом. Его повторяющаяся серия выполняется до тех пор, пока верно условие, которое проверяется каждый раз перед тем как начать повтор серии. Если условие ИСТИННО, то цикл продолжается и останавливает свою работу, когда условие ЛОЖНО.
ВАЖНО!!! Необходимо понимать, что если условие при первом выполнении команды будет ложно, такой цикл не сможет сделать повтор ни разу. Если условие истинно и параметр цикла в процессе выполнения повторения не изменятся, т.е условие никогда не станет ложным, тогда цикл будет выполняться бесконечно и программа "зависнет...". Для выхода из цикла используют команду break; Чтобы завершить текущий шаг цикла и сразу перейти к новому шагу (не выходя из цикла) применяют оператор continue.
ВАЖНО!!! Необходимо понимать, что если условие при первом выполнении команды будет ложно, такой цикл не сможет сделать повтор ни разу. Если условие истинно и параметр цикла в процессе выполнения повторения не изменятся, т.е условие никогда не станет ложным, тогда цикл будет выполняться бесконечно и программа "зависнет...". Для выхода из цикла используют команду break; Чтобы завершить текущий шаг цикла и сразу перейти к новому шагу (не выходя из цикла) применяют оператор continue.
ЦИКЛ С ПРЕДУСЛОВИЕМ WHILE ФОРМАЛЬНО ЗАПИСЫВАЕТСЯ ТАК:
На экране компьютера увидим изменение параметра цикла от -5 до 5 с шагом = 0.5 :
-5, -4.5, -4, -3.5, -3, -2.5, -2, -1.5, -1, -0,5, 0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5
Цикл с предусловием WHILE можно запустить в обратную сторону с шагом = -0.5
НАПРИМЕР ДЛЯ С++
i=5; while ( i>=-5) { cout<<i<<" "; i=i-0.5; } |
НАПРИМЕР ДЛЯ PASCAL
i:=5; While i>=-5 do begin Write(i,' , '); i:=i-0.5; end; |
На экране компьютера увидим изменение параметра цикла от 5 до -5 с шагом = -0.5 :
5, 4.5, 4, 3.5, 3, 2.5, 2, 1.5, 1, 0,5, 0, -0.5, -1, -1.5, -2, -2.5, -3, -3.5, -4, -4.5, -5
РЕШИМ ПОДОБНУЮ ЗАДАЧУ С ПОМОЩЬЮ ЦИКЛА С ПРЕДУСЛОВИЕМ
Решим задачу: Вывести на экран значение функции Y=X^2 для всех X от - 5 до 10 с шагом 0.01
1) X - параметр цикла; 2) Начальное значение параметра цикла Х=-5; 3) Условие прекращения цикла Х=10 4) Шаг =0.01; 5) Конечное значение параметра цикла X=10; 6) Тело цикла: Y=X^2; Вывод на экран значений X и Y; изменение параметра цикла на число шага X=X+Шаг (X=X+0.01); подсчет количества повторений count=count+1
Сколько же раз выполнится цикл? С таким шагом цикл выполнится 1501 раз.
1) X - параметр цикла; 2) Начальное значение параметра цикла Х=-5; 3) Условие прекращения цикла Х=10 4) Шаг =0.01; 5) Конечное значение параметра цикла X=10; 6) Тело цикла: Y=X^2; Вывод на экран значений X и Y; изменение параметра цикла на число шага X=X+Шаг (X=X+0.01); подсчет количества повторений count=count+1
Сколько же раз выполнится цикл? С таким шагом цикл выполнится 1501 раз.
ВАЖНО!!! В этой задаче параметр цикла вещественного типа, поэтому легче всего ее сделать используя цикл с предусловием.
#include <stdio.h> //базовые библиотека ввода вывода
#include <conio.h> //базовые библиотека консоли ввода вывода #include <windows.h> //расширенная библиотека управления консолью #include <iomanip> // библиотека, в которой содержится модификаторы #include <iostream> //библиотека, в которой содержатся потоки ввода и вывода cin и cout #include <cmath> //библиотека математических функций using namespace std; // Использовать пространство стандартных имён double x,y; //объявление вещественных переменных int count; //объявление переменных целого типа int main() { SetConsoleCP(1251); // установка режима консоли для кириллицы SetConsoleOutputCP(1251); x=-5; //начальное значение параметра цикла while ( x<= 10) //условие пока... { y=x*x; //находит квадрат числа X cout<<"Y="<<y<<" при X="<<x<<endl; x=x+0.01; //изменение параметра цикла с шагом 0.01 count++; //считает количество повторений, каждый раз увеличивая переменную count на 1 } cout<<"Цикл выполнился "<<count<<" раз"<<endl; getch(); // задержка содержимого экрана до нажатия любой клавиши return 0; }
|
Program poka;
VAR x,y:Real; {объявление переменных вещественного типа} count:integer; {объявление переменных целого типа} BEGIN count:=0; x:=-5; while x<=10 do {цикл пока...} begin y:=sqr(x); {находит квадрат числа X} Writeln('Y=',y,' при X=',x); x:=x+0.01; {изменение параметра цикла с шагом 0.01} Inc(count); {считает количество повторений, каждый раз увеличивая переменную count на 1} end; Writeln('Цикл выполнится ',count,' раз '); readln; { задержка содержимого экрана до нажатия клавиши ENTER } END.
|