|
Цикл с постусловием (do while)Цикл с постусловием реализует структурную схему, приведенную на рис. 4.1(б). Синтаксис: do { / / Инструкции цикла (тело цикла) } while (УсловиеПовторения);
Сначала выполняется простой или составной оператор, составляющий тело цикла, а затем вычисляется выражение УсловиеПовторения. Если оно истинно (не равно false), тело цикла выполняется еще раз. Цикл завершается, когда выражение станет равным false или в теле цикла будет выполнен какой-либо оператор передачи управления. Тип выражения должен быть арифметическим или приводимым к нему. Пример 2. Программа осуществляет проверку ввода.
Цикл с параметром (for) Синтаксис: for (Инициализация; УсловиеВыполнения; Изменение) { // Здесь инструкции цикла (тело цикла) }
Инициализация используется для объявления и присвоения начальных значений величинам, используемым в цикле. В этой части можно записать несколько операторов, разделенных запятой (операцией «последовательное выполнение»), например, так: for (int 1 = 0, j = 2; … int к, m; for (k = 1, m = 0; … Областью действия переменных, объявленных в части инициализации цикла, является цикл. Инициализация выполняется один раз в начале исполнения цикла. Выражение УсловиеВыполнения определяет условие выполнения цикла: если его результат, приведенный к типу bool (логический), равен true, цикл выполняется. Цикл с параметром реализован как цикл с предусловием. Сам оператор for - это оператор цикла, обобщающий оператор while. Так же, как и в случае оператора while, тело цикла может состоять из одного оператора или из группы операторов, заключенных в фигурные скобки. Инициализирующая и реинициализирующая части могут быть любыми отдельными выражениями. Выбор между операторами while и for произволен и основывается на том, что выглядит яснее. Оператор for обычно удобен для циклов, в которых инициализация и реинициализация логически связаны и каждая задается одним оператором, так как в этом случае запись более компактна, чем при использовании оператора while, а операторы управления циклом сосредотачиваются вместе в одном месте. Изменение (модификация) выполняется после каждой итерации цикла и служит обычно для изменения параметров цикла. В части модификаций можно записать несколько операторов через запятую. Простой или составной оператор представляет собой тело цикла. Любая из частей оператора for может быть опущена (но точки с запятой надо оставить на своих местах!). Пример 3. Реализовать задачу из примера 1 через цикл for.
# include <iostream.h> # include <math.h> # include <conio.h> void main (){ clrscr(); float n,k,d,i; cout <<"VVedite nachalo, konec i shag izmeneniy "; cin >> n>>k>>d; for (i=n; i<=k; i+=d) { cout<<" "<< (pow(i,2)+1); } getch(); } Любой цикл while может быть приведен к эквивалентному ему циклу for и наоборот по следующей схеме:
for (i; j; k) оператор i;
while (j){ оператор; k;}
Часто встречающиеся ошибки при программировании циклов — использование в теле цикла неинициализированных переменных и неверная запись условия выхода из цикла. Чтобы избежать ошибок, рекомендуется: • проверить, всем ли переменным, встречающимся в правой части операторов присваивания в теле цикла, присвоены до этого начальные значения (а также возможно ли выполнение других операторов); • проверить, изменяется ли в цикле хотя бы одна переменная, входящая в условие выхода из цикла; • предусмотреть аварийный выход из цикла по достижению некоторого количества; • и, конечно, не забывать о том, что если в теле цикла требуется выполнить более одного оператора, нужно заключать их в фигурные скобки. Операторы цикла взаимозаменяемы, но можно привести некоторые рекомендации по выбору наилучшего в каждом конкретном случае. Оператор do while обычно используется для организации приближенных вычислений, в задачах поиска и обработки данных, вводимых с клавиатуры или из файла. · Число повторений инструкций цикла do while определяется ходом выполнения программы; · инструкции цикла do while выполняются до тех пор, пока значение выражения, записанного после слова while, не станет равным нулю; · после слова while надо записывать условие выполнения инструкций цикла; · для завершения цикла do while в теле цикла обязательно должны быть инструкции, выполнение которых влияет на условие завершения цикла; · цикл do while — это цикл с постусловием, т. е. инструкции тела цикла будут выполнены хотя бы один раз.
Оператором while удобнее пользоваться в случаях, когда число итераций заранее не известно, очевидных параметров цикла нет или модификацию параметров удобнее записывать не в конце тела цикла. · инструкции цикла while выполняются до тех пор, пока значение выражения, записанного после слова while, не станет равным нулю; · после слова while надо записывать условие выполнения инструкций цикла; · для завершения цикла while в теле цикла обязательно должны быть инструкции, выполнение которых влияет на условие завершения цикла; · цикл while — это цикл с предусловием, т. е. возможна ситуация, при которой инструкции тела цикла ни разу не будут выполнены; · цикл while, как правило, используется для организации приближенных вычислений, в задачах поиска и обработки данных, вводимых с клавиатуры или из файла.
Оператор for предпочтительнее в большинстве остальных случаев (однозначно — для организации циклов со счетчиками). · инструкция for используется для организации циклов с фиксированным, известным во время разработки программы, числом повторений; · количество повторений цикла определяется начальным значением переменной-счетчика и условием завершения цикла; · переменная-счетчик должна быть целого (int) типа и может быть объявлена непосредственно в инструкции цикла. Циклы в TPascal
Цикл с предусловием (иначе цикл пока) имеет вид:
где условие – выражение логического типа. Цикл может не выполняться ни разу, если значение логического выражения сразу же оказывается ложным. Серия команд, находящихся между begin и end, выполняются до тех пор, пока условие истинно. Для того чтобы цикл завершился, необходимо, чтобы последовательность инструкций между BEGIN и END изменяла значение переменных, входящих в условие. Цикл с постусловием (иначе цикл до) имеет вид:
где условие – выражение логического типа. Обратите внимание: Последовательность инструкций между repeat и until всегда будет выполнено хотя бы один раз; Для того чтобы цикл завершился, необходимо, чтобы последовательность операторов между repeat и until изменяла значения переменных, входящих в выражение условие. Инструкция repeat, как и инструкция while, используется в программе, если надо провести некоторые повторяющиеся вычисления (цикл), однако число повторов заранее не известно и определяется самим ходом вычисления. Цикл с параметром (иначе цикл для) имеет вид:
где i – параметр цикла; a – начальное значение цикла; b – конечное значение цикла; h – шаг изменения параметра. Структура данного цикла иначе называют циклом i раз. Заголовок оператора повтора for определяет: - диапазон изменения параметра цикла и число повторений тела цикла; - направление изменения параметра цикла (возрастание (+1) for..to..do и убывания (-1) for..down to.. do) на единицу (шаг изменения параметра) при каждом повторе. Эта команда выполняется таким образом: параметру i присваивается начальное значение а, сравнивается с конечным значением b и, если оно меньше или равно конечному значению b, выполняется серия команд. Параметру присваивается значение предыдущего, увеличенного на величину h – шага изменения параметра и вновь сравнивается с конечным значением b. Если между begin и end находится только один оператор, то операторные скобки можно не писать. Это правило работает для цикла типа «Пока» и «Для».
Тело цикла может быть простым и составным оператором. Оператор for обеспечивает выполнения тела цикла до тех пор, пока не будут перебраны все значения параметра цикла от начального до конечного. Параметр цикла, его начальное и конечное значения должны принадлежать к одному и тому же типу данных. При этом допустим целый, символьный, булевский, перечислимый типы. Сам параметр должен быть описан совместно с прочими операторами. Например: Var I:integer;{описание переменных цикла} Begin for I: = -3 to 3 do write (i); {-3 -2 – 1 0 1 2 3} for I: = 3 down to –3 do write (i); {-3 -2 -1 0 1 2 3} Начальное и конечное значения параметра цикла могут задаваться выражениями, например: for j:= x+2 down to x-2 do Begin A:=j/2; Write1n (a) End; Допустимо применять вложенные циклы, например: for I: = 1 to 10 do for j: = 1 to 5 do F [i,j]: = 0; {обнуление элементов матрицы} Если телом цикла является циклическая структура, то такие циклы называются вложенными. Цикл, содержащий в теле цикла другой цикл, называется внешним циклом. Цикл, входящий в тело другого цикла называется внутренним циклом. Внутренние и внешние циклы могут быть трех видов: циклами с предусловием while, циклами с постусловиями repeat или циклами с параметром for.
Рассмотрим пример решения задач с использованием данных структур Пример 4. Вычислить произведение чисел от 1 до 5 используя различные варианты цикла Математическая модель: Р= 1· 2· 3· 4· 5=120 Составим алгоритм в виде блок-схемы. Для проверки правильности алгоритма заполним трассировочную таблицу.
Проверка условия происходит в несколько шагов: проверка условия и выполнение команд на одной из ветвей. Поэтому в трассировочной таблице записываются не команды алгоритма, а отдельные операции, выполняемые компьютером на каждом шаге. Шаг первый: Р присваивается значение один. Шаг второй: i присваивается значение один. Шаг третий: при i равном единице проверяем условие один меньше или равен пяти, да, условие истинно, значит Р присваивается значение один умноженное на один, будет два. Для i: один плюс один, будет два. Шаг четвертый: при i равном двум проверяем условие два меньше или равен пяти, да, условие истинно, значит Р присваивается значение 2 умноженное на один, будет 2. Для i: два плюс один, будет три. Шаг пятый: при i равном трем проверяем условие три меньше или равен пяти, да, условие истинно, значит Р присваивается значение два умноженное на три, будет шесть. Для i: три плюс один, будет четыре. Шаг шестой: при i равном четырем проверяем условие четыре меньше или равен пяти, да, условие истинно, значит Р присваивается значение шесть умноженное на четыре, будет двадцать четыре. Для i: четыре плюс один, будет пять. Шаг седьмой: при i равном пяти проверяем условие пять меньше или равен пяти, да,условие истинно, значит Р присваивается значение двадцать четыре умноженное на пять, будет сто двадцать. Для i: пять плюс один, будет шесть. Шаг восьмой: при i равном шести проверяем условие шесть меньше или равен пяти, нет, условие ложно, тогда мы выходим из цикла, а в результате получаем последнее значение равное сто двадцати. Program Pr1; Var i: integer; Begin P:=1; i:=1; While i<=5 do Begin P:=P*i; i:=i+1; end; Write (‘P=’, P); End.
Пример 5. Вычислить и вывести на экран значение заданной функции t=2.2, xЄ[0.2;2], Δx=0.2. Значение функции вычислять многократно при изменении аргумента в указанном диапазоне и с заданным шагом Δx. Организовать вывод значения аргумента и вычисленного значения функции в виде таблицы. 1. Блок-схема.
Текст программы. Program Lab4_for; Const dx=0.2;t=2.2; Var x0,xk,z,x:real; n,i:byte; Begin Writeln('Введите x0,xk'); Read(x0,xk); Writeln('Таблица функции z(x)'); Writeln(' x y'); n:=trunc((xk-x0)/dx)+1; x:=x0; for i:=1 to n do begin If x<0.5 then z:=(ln(exp(3*ln(x)))+sqr(x))/sqrt(x+t) else if x=0.5 then z:=sqrt(x+t)+1/x else z:=cos(x)+t*(sqr(sin(x))); Writeln(x:6:3,' ',z:6:3); x:=x+dx; end; End. 2. Блок-схема.
Текст программы. Program Lab4_repeat; Const dx=0.2;t=2.2; Var x0,xk,z,x:real; Begin Writeln(' Введите x0,xk'); Read(x0,xk); Writeln('Таблица функции z(x)'); Writeln(' x y'); x:=x0; Repeat If x<0.5 then z:=(ln(exp(3*ln(x)))+sqr(x))/sqrt(x+t) else if x=0.5 then z:=sqrt(x+t)+1/x else z:=cos(x)+t*(sqr(sin(x))); Writeln(x:6:3,' ',z:6:3); x:=x+dx; Until x>xk; End. 3. Блок-схема.
Текст программы. Program Lab4_while; Const dx=0.2;t=2.2; Var x0,xk,z,x:real; Begin Writeln(' Введите x0,xk'); Read(x0,xk); Writeln(' Таблица функции z(x)'); Writeln(' x y'); x:=x0; while x<=xk do begin If x<0.5 then z:=(ln(exp(3*ln(x)))+sqr(x))/sqrt(x+t) else if x=0.5 then z:=sqrt(x+t)+1/x else z:=cos(x)+t*(sqr(sin(x))); Writeln(x:6:3,' ',z:6:3); x:=x+dx; end; End. Таблица функции z(x) x y 0.200 -3.091 0.400 -1.606 0.600 1.527 0.800 1.829 1.000 2.098 1.200 2.273 1.400 2.306 1.600 2.169 1.800 1.859 2.000 1.403
Пример 6. Вычислить: При вычислении конечной суммы следует организовать цикл, в котором число повторений равно количеству слагаемых. Перед началом цикла переменную суммы обнуляют S:=0. Тело цикла должно содержать вычисления очередного слагаемого А и рекуррентного соотношения: S:=S+A. К переменной суммы S прибавляется переменная А, результат вычисления присваивается переменной S. Вычисление произведения конечного числа элементов аналогично, начальному значению произведения присваивается значение единицы P:=1, а в рекуррентной формуле меняется знак: P:=P*A. При организации алгоритма необходимо помнить, что открытие циклов следует в порядке их очередности, начиная с самого внешнего, заканчивая самым внутренним циклом. Закрытие циклов, наоборот, начинают с самого внутреннего цикла, заканчивают самым внешним циклом. Обозначим результаты вычисления произведения по параметру i - через P1, результат вычисления суммы по параметру j - через S1, результат вычисления суммы по параметру k - через S2, результат произведения по параметру l -через P2.
Текст программы: program lab_4; var p1, s1, s2, p2: real; i, j, k, l: integer; begin p1:=1; for i:=1 to 4 do begin s1:=0; for j:=1 to 6 do begin s2:=0; for k:=2 to 11 do s2:=s2+sqr(k); p2:=1; for l:=1 to 3 do p2:=p2*l; p2:=sin(p2); s1:=s1+i+j-sqrt(s2+p2); end; p1:=p1*(sqr(i)+s1); end; writeln (`s= `, p1:6:3); end. Что вызывает тренды на фондовых и товарных рынках Объяснение теории грузового поезда Первые 17 лет моих рыночных исследований сводились к попыткам вычислить, когда этот... Что способствует осуществлению желаний? Стопроцентная, непоколебимая уверенность в своем... Живите по правилу: МАЛО ЛИ ЧТО НА СВЕТЕ СУЩЕСТВУЕТ? Я неслучайно подчеркиваю, что место в голове ограничено, а информации вокруг много, и что ваше право... Что делать, если нет взаимности? А теперь спустимся с небес на землю. Приземлились? Продолжаем разговор... Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:
|