Цикл с параметром for
Цикл с постусловием do
Цикл с постусловием имеет вид:
do оператор while выражение;
Сначала выполняется простой или составной оператор, образующий тело цикла, а затем вычисляется выражение (оно должно иметь тип bool). Если выражение истинно, тело цикла выполняется еще раз и проверка повторяется. Цикл завершается, когда выражение станет равным false или в теле цикла будет выполнен какой-либо оператор передачи управления.
Этот вид цикла применяется в тех случаях, когда тело цикла необходимо обязательно выполнить хотя бы один раз, например, если в цикле вводятся данные и выполняется их проверка. Если же такой необходимости нет, предпочтительнее пользоваться циклом с предусловием.
Пример программы с оператором цикла do while
using System;
namespace ConsoleApplicationl
{ class Classl
{ static void Main()
{
char answer;
do
{
Console.WriteLine("Купи слоника, а?" );
answer = (char) Console.Read();
Console.ReadLine();
}
while ( answer != 'y' );
} } }
Рассмотрим еще один пример применения цикла с постусловием — программу, определяющую корень уравнения cos(x) = x методом деления пополам с точностью 0,0001.
Исходные данные для этой задачи — точность, результат — число, представляющее собой корень уравнения. Оба значения имеют вещественный тип. Суть метода деления пополам очень проста. Задается интервал, в котором есть ровно один корень (следовательно, на концах этого интервала функция имеет значения разных знаков). Вычисляется значение функции в середине этого интервала. Если оно того же знака, что и значение на левом конце интервала, значит, корень находится в правой половине интервала, иначе — в левой. Процесс повторяется для найденной половины интервала до тех пор, пока его длина не станет меньше заданной точности.
В приведенной далее программе исходный интервал задан с помощью констант, значения которых взяты из графика функции. Для уравнений, имеющих несколько корней, можно написать дополнительную программу, определяющую (путем вычисления и анализа таблицы значений функции) интервалы, содержащие ровно один корень.
//Вычисление корня нелинейного уравнения
using System;
namespace ConsoleApplicationl
{ class Classl
{ static void Main()
{
double x, left = 0, right = 1;
do
{
x = ( left + right ) / 2;
if ( ( Math.Cos(x) - x ) * ( Math.Cos(left) - left ) < 0 )
right = x;
else left = x;
}
while ( Math.Abs( right - left ) < le-4 );
Console.WriteLine( "Корень равен " + x );
} } }
Цикл с параметром имеет следующий формат:
for( инициализация; выражение; модификации ) оператор;
Инициализация служит для объявления величин, используемых в цикле, и присвоения им начальных значений. В этой части можно записать несколько операторов, разделенных запятой, например:
for ( int i = 0, j = 20; ..
int k, m;
for ( k = 1, m = 0; ...
Областью действия переменных, объявленных в части инициализации цикла, является цикл. Инициализация выполняется один раз в начале исполнения цикла.
Выражение типа bool определяет условие выполнения цикла: если его результат равен true, цикл выполняется. Цикл с параметром реализован как цикл с предусловием.
Модификации выполняются после каждой итерации цикла и служат обычно для изменения параметров цикла. В части модификаций можно записать несколько операторов через запятую, например:
for ( int i = 0, j = 20; i < 5 && j > 10; i++, j-- ) ...
Простой или составной оператор представляет собой тело цикла. Любая из частей оператора for может быть опущена (но точки с запятой надо оставить на своих местах!).
Для примера вычислим сумму чисел от 1 до 100:
int s = 0;
for ( int i = 1; i <= 100; i++ ) s += i;
Пример программы с оператором цикла for
//смотри ТЕКСТ ПРОГРАММЫ * из примера с циклом while
using System;
namespace ConsoleApplicationl
{ class Classl
{ static void Main()
{
double Xn = -2, Xk = 12, dX = 2, t= 2, y;
Console.WriteLine( "| x | у |"; // заголовок таблицы
for ( double x = Xn; x <= Xk; x += dX )
{
y=t;
if ( x >= 0 && x < 10 ) у = t * x;
if ( х >= 10 ) у = 2 * t;
Console.WriteLine( "| {0,6} | {1,6} |", x, у ); } } } }
Любой цикл while может быть приведен к эквивалентному ему циклу for и наоборот.
Например, два следующих цикла эквивалентны.
Цикл for:
for ( bl; b2; bЗ ) оператор;
Цикл while:
b1;
while ( b2 )
{
оператор;
b3;
}