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


Цикл с условием. Оператор while
Изучая цикл for, мы говорили, что если известно число повторений каких-либо действий, то можно сократить программу, используя оператор цикла for. А что делать, если количество повторений неизвестно? А такое бывает довольно часто.
 
Пример
Вспомнив перевод числа из десятичной системы счисления в любую другую, нам необходимо делить число (а затем результат деления) на основание системы счисления, пока в ответе мы не получим ноль. Сколько раз мы поделим неизвестно. А программ, реализующих такой алгоритм достаточно много. 

Как же реализовывать алгоритм, если нам неизвестно точное число повторений?

Для таких случаев в программировании существует оператор цикла с условием. 
В языке программировании Python, оператор цикла с условием начинается со слова while и имеет следующую конструкцию.
while (<условие>) 
{
  тело цикла
}

Как нам уже известно:
- условие - это выражение, результатом которого может быть либо истина, либо ложь (как в условном операторе);
- тело цикла - это команды, которые необходимо повторить, они записываются с отступами.

Как работает оператор?
1. Сначала программа вычисляет условие, стоящее в скобках после слова while. Если условие выполнятся (истинно), то программа выполняет оператор(ы), содержащийся в теле цикла.
2. После того, как завершено выполнение тела цикла, программа возвращается на проверку условия и заново его проверяет.
3. Эти действия (проверка условия - выполнение тела цикла) повторяются до тех пор, пока условие не станет ложным.
4. Если при первом выполнении данного оператора условие сразу не выполняется (ложно), то программа ни разу не выполнит тело цикла.

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

Пример программы, которую мы назовем "Молчаливый счет".
Заставим программу вместо нас считать, например, до 10.
Программа должна выводить фразы "Start" и "Finish", и между этими действиями выводить на экран числа, которые считаются.

Например, так:
Start
1 2 3 4 5 6 7 8 9 10
Finish

Программа с использованием цикла while будет выглядеть следующим образом:
using System;
class Program {
    static void Main() {
        Console.WriteLine("Start");
        int i = 1;
        while (i <= 10) {
            Console.WriteLine(i);
            i++;
        }
        Console.WriteLine("Finish");
    }
}
В данной программе мы присваиваем значение переменной i = 1 - начало отсчета.
Далее, пока значение переменной i не больше (то есть меньше либо равно) нужного нам значения, мы:
 1) выводим на экран значение переменной i;
 2) увеличиваем значение переменной i на 1 - данный оператор, влияет на значение условия, стоящего в скобках. Переменная i увеличивается, то есть в какой-то момент условие i <= 10 станет ложным. Это произойдет, когда i станет равно 11. В этом случае тело цикла выполняться уже не будет, и программа будет выполнять следующий после цикла оператор, то есть Console.WriteLine("Finish").

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

Идея решения.
Нам необходимо просто последовательно отсекать от числа последнюю цифру (сделать это можно, уменьшив число в 10 раз, применяя целочисленное деление на 10), при этом каждый раз необходимо увеличивать счетчик. 
В итоге, после того как мы отсечем все числа, счетчик будет хранить количество цифр в числе.
По другому алгоритм можно сформулировать так: пока число не равно нулю, уменьшить его в 10 раз и увеличить счетчик на 1.
число (n) счетчик
123 0
12 1
1 2
0 3
Программа будет выглядеть следующим образом:
...
static void Main()
{
    int n = Convert.ToInt32(Console.ReadLine());
    int count = 0;
    while (n != 0) 
    {
      count ++;
      n = n / 10;
    }
}
Данную программу нужно хорошо знать и понимать, так как на ее основе решаются многие другие задачи, связанные с вычислением по цифрам числа.

Задача

На вход программы поступает поток данных — последовательность целых чисел, которая заканчивается нулём (ноль не входит в последовательность). Требуется найти сумму элементов этой последовательности.
 
Алгоритм решения
 sum=0
 ввод x           // ввести первое число 
 пока x != 0      // в условии ставится признак окончания ввода, 
 нц               // то есть пока не ввели ноль
   sum = sum + x // с исходным числом можно выполнить какие-либо действия. 
                  // Можно добавить проверку числа на какое-то условие и т.д.
   ввод x         // ввести следующее число
 кц
 вывести sum      //вывод результата