Опубликован: 28.04.2014 | Доступ: свободный | Студентов: 987 / 89 | Длительность: 01:30:00
Специальности: Программист
Лекция 6:

Основы программирования. Типы данных, переменные, операторы

< Лекция 1 || Лекция 6: 123456

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

Если бы язык программирования содержал только описанные выше операторы – присваивания, составной оператор и оператор выбора, то компьютеры были бы не более чем простые счетные машины - калькуляторы. Компьютеры становятся по-настоящему эффективными только тогда, когда управлять вычислением можно так, чтобы один оператор в тексте программы мог выполняться многократно. Такие средства есть во всех языках программирования.

В языке C# существует оператор цикла while, позволяющий организовать циклическое выполнение некоторого фрагмента программы. Синтаксис этого оператора достаточно прост:

while(<булевское выражение>)
 <оператор А>

Достаточно проста и семантика этого оператора. Вычисляется значение булевского выражения, если оно истинно, то выполняется оператор А, называемый телом цикла, после чего снова проверяется истинность булевского выражения. Оператор цикла заканчивает свою работу, когда значение булевского выражения становится ложным. Другими словами, пока истинно булевское выражение оператор тела цикла будет выполняться. В соответствии с описанной семантикой возможны три ситуации:

  • Оператор А ни разу не будет выполняться. Это происходит в том случае, если при первой проверке булевское выражение ложно.
  • Оператор А будет выполняться бесконечное число раз (программа зацикливается). Такая ситуация возможна, когда выполнение тела цикла не влияет на булевское выражение и оно всегда остается истинным.
  • Нормальная ситуация, когда тело цикла выполняется конечное число раз. Выполнение тела цикла шаг за шагом приближает нас к цели. Когда цель достигнута, булевское выражение получает значение false и оператор цикла завершает свою работу.

В нашем проекте Lesson3 есть метод TestWhile, который демонстрирует применение цикла while на примере задачи нахождения обращенного числа – числа, у которого цифры идут в обратном порядке. Например, если x равно 123, то reverse(x) равно 321. Для нахождения обращенного числа мы будем в цикле получать цифру за цифрой исходного числа x, и из полученных цифр будем формировать обращенное число reverse. Вот текст этого метода, решающий поставленную задачу:

int x;
Console.WriteLine("Введите целое число");
x = int.Parse(Console.ReadLine());
int digit;
int reverse = 0;
while(x > 0)
{
   digit = x % 10; //получить последнюю цифру числа x
   x = x / 10;     //отрезать последнюю цифру
   reverse = 10 * reverse + digit; 
}
Console.WriteLine("Обращение числа x -" + reverse);

Как работает алгоритм? По условиям задачи на входе x – это положительное целое число, поэтому при первой проверки булевского выражение (x > 0) оно будет истинным и начнет выполняться тело цикла.

Первый оператор тела цикла в результате выполнения операции взятия остатка от деления нацело числа x на основание десятичной системы счисления позволяет получить последнюю цифру в числе x.

Следующий оператор тела цикла в результате выполнения операции деления нацело числа x на основание десятичной системы счисления позволяет отрезать последнюю цифру в числе x.

Последний оператор тела цикла формирует обращенное число reverse, делая последнюю цифру первой.

Отрезая цифру за цифрой, мы шаг за шагом приближаемся к цели. Когда все цифры будут отрезаны, булевское выражение станет ложным, но к этому моменту будет сформировано обращенное число – поставленная цель будет достигнута. Сколько шагов будет сделано, сколько раз будет выполняться тело цикла? Число шагов равно числу цифр в исходном числе x.

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

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

Оператор цикла while является универсальным оператором, позволяющим организовать циклическое выполнение любого фрагмента программы. Часто для организации цикла используют оператор цикла for, применимый тогда, когда число повторений тела цикла заранее известно. Этот

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

Синтаксис оператора for следующий:

for(<инициализация счетчика>; <условие окончания цикла>; <изменение счетчика цикла>)
<тело цикла>

Типичная конструкция этого цикла выглядит так:

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

Семантика выполнения этого оператора следующая. Заголовок цикла, заключенный в круглые скобки состоит из трех частей. Первая часть заголовка служит для инициализации счетчика цикла. Она выполняется один раз в начале работы оператора. В типичном примере выполнения этого оператора первая часть состоит из объявления с инициализацией переменной i, представляющей счетчик цикла. Вторая часть заголовка содержит булевское условие, задающее условие выполнения цикла. Это условие задает ограничение на значение счетчика цикла. В типичном примере. В типичном примере применения это условие имеет вид: i < n, где n – переменная с известным значением. Если условие истинно, то выполняется тело цикла – оператор А. После чего выполняется третья часть заголовка, изменяющая счетчик на заданную величину. В типичном примере счетчик увеличивается на единицу.

В проекте Lesson3 есть метод TestFor, демонстрирующий работу цикла for на примере задачи вычисления корня квадратного из суммы квадратов целых чисел от 1 до 10. Для вычисления суммы удобно использовать цикл for, поскольку известно, что тело цикла должно выполняться 10 раз, а счетчик будет задавать искомое число, возводимое в квадрат. Вот текст данного метода:

int n = 10;
double y;
int summa = 0;
for (int i = 0; i < n; i++)
    summa += (i + 1) * (i + 1);
y = Math.Sqrt(summa);
Console.WriteLine("Корень квадратный суммы квадратов первого десятка = " + y);

Как видите, здесь применяется типичный вариант цикла for. Вычисление суммы – это классическая задача начального этапа изучения программирования. Следует внимательно ознакомиться с этим образцом программирования.

< Лекция 1 || Лекция 6: 123456
Дмитрий Лубченков
Дмитрий Лубченков
Николай Молдован
Николай Молдован