Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа4.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
101 Кб
Скачать
☆

4.2 Оператор цикла с предусловием

Другим способом реализации цикла является оператор while. Его формат следующий:

while (условие)

оператор

Условие – как и в условном операторе if – это выражение, которое принимает логическое значение "истина" или "ложь". Выполнение оператора повторяется до тех пор, пока значением условия является true (истина). Условие вычисляется заново перед каждой итерацией, поэтому данная разновидность циклов называется циклом с предусловием. Например, подсчитать, сколько десятичных цифр нужно для записи целого положительного числа N, можно с помощью следующего фрагмента:

int digits = 0;

while (N > 0)

{

digits++;

N /= 10;

}

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

Третьей формой оператора цикла является цикл do ... while. Он имеет форму:

do

оператор;

while (условие);

Отличие от предыдущей формы цикла while заключается в том, что условие проверяется после выполнения тела цикла, поэтому данный формат циклов называется циклом с постусловием. Предположим, требуется прочитать символы с клавиатуры до тех пор, пока не будет введен символ "звездочка".

int ch;

do

ch = Console.Read();

while (ch !='*');

В операторах while и do также можно использовать операторы break и continue.

Как легко заметить, операторы цикла взаимозаменяемы. Оператор while соответствует оператору for:

for ( ; условие ; )

оператор

Пример чтения символов с терминала можно переписать в виде:

int ch;

ch = Console.Read();

while (ch != '*')

ch = Console.Read();

4.4 Итерационные циклы

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

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

Значащими цифрами числа называются все цифры в его десятичной записи, кроме крайних левых и крайних правых нулей.

При решении задач, как правило, нет необходимости хранить промежуточные итерации – достаточно получения окончательного результата и (в итерационных алгоритмах) числа шагов, проделанных для достижения условия – для оценки скорости сходимости алгоритма.

Часто в задачах для вычисления очередного слагаемого удобно рекуррентно использовать предыдущее слагаемое, а не организовывать дополнительный (внутренний) цикл.

5 Примеры программ

5.1 Простые циклы

Вычислить значение факториала f=n! (n≤20) с использованием трех вариантов цикла. (f = n! = 1*2*3*…*n).

Внешний вид формы показан на рисунке 4.1.

Рисунок 4.1 – Главная форма приложения

В данном случае число n будем вводить с помощью компонента NumericUpDown (счетчик). В его свойства Minimum и Maximum можно задать соответственно минимальное и максимальное значения числа n (в нашем случае: 1 и 20). А свойство Value позволяет получить или установить текущее значение счетчика. При проектировании формы свойству Value было присвоено значение 10. Свойство Value имеет тип decimal, поэтому, чтобы преобразовать его в значение другого типа (у нас – в int), нужно использовать функции преобразования типов:

int n = Convert.ToInt32(numericUpDown1.Value.ToString());

Оператор цикла for:

private void button1_Click(object sender, EventArgs e)

{

int n = Convert.ToInt32 (numericUpDown1.Value.ToString());

long f = 1;

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

f *= i;

label2.Text = "n! = " + f.ToString();

}

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

private void button1_Click(object sender, EventArgs e)

{

long f = 1;

int i = 1;

int n = Convert.ToInt32 (numericUpDown1.Value.ToString());

while (i <= n)

{

f *= i;

i++;

}

label2.Text = "n! = " + f.ToString();

}

Оператор цикла do ... while

private void button1_Click(object sender, EventArgs e)

{

long f = 1;

int i = 1;

int n = Convert.ToInt32 (numericUpDown1.Value.ToString());

do

{

f *= i;

i++;

}

while (i <= n);

label2.Text = "n! = " + f.ToString();

}