Главная arrow Язык программирования C# arrow C# Полное руководство Герберт Шилдт arrow Применение нескольких переменных управления циклом C# Полное руководство Герберт Шилдт

Применение нескольких переменных управления циклом C# Полное руководство Герберт Шилдт

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

// Использовать запятые в операторе цикла for.

using System;

class Comma {
   static void Main() {
      int i, j;

      for (i=0, j=10; i < j; i++, j --)
         Console.WriteLine("i и j: " + i + " " + j);
   }
}

Выполнение этой программы дает следующий результат:
i и j : 0  10
i и j : 1  9
i и j : 2  8
i и j : 3  7
i и j : 4  6
В данном примере запятыми разделяются два оператора инициализации и еще два итерационных выражения. Когда цикл начинается, инициализируются обе переменные, i и j. Всякий раз, когда цикл повторяется, переменная i инкрементируется, а переменная j декрементируется. Применение нескольких переменных управления циклом нередко оказывается удобным, упрощая некоторые алгоритмы. Теоретически в операторе цикла for может присутствовать любое количество операторов инициализации и итерации, но на практике цикл получается слишком громоздким, если применяется более двух подобных операторов.
Ниже приведен практический пример применения нескольких переменных управления циклом в операторе for. В этом примере программы используются две переменные управления одним циклом for для выявления наибольшего и наименьшего множителя целого числа (в данном случае — 100). Обратите особое внимание на условие окончания цикла. Оно опирается на обе переменные управления циклом.

// Использовать запятые в операторе цикла for для
// выявления наименьшего и наибольшего множителя числа.

using System;

class Comma {
   static void Main() {
      int i, j;
      int smallest, largest;
      int num;

      num = 100;

      smallest = largest =1;

      for(i=2, j=num/2; (i <= num/2) & (j >= 2); i++, j —) {

         if ((smallest == 1) & ((num % i) == 0)) smallest = i;

         if ((largest == 1) & ((num % j) ==0)) largest = j;

}
Console.WriteLine("Наибольший множитель: " + largest);
Console.WriteLine("Наименьший множитель: " + smallest);
   }
}

Ниже приведен результат выполнения этой программы.
Наибольший множитель: 50
Наименьший множитель: 2
Благодаря применению двух переменных управления циклом удается выявить наименьший и наибольший множители числа в одном цикле for. В частности, управляющая переменная i служит для выявления наименьшего множителя. Первоначально ее значение устанавливается равным 2 и затем инкрементируется до тех пор, пока не превысит половину значения переменной num. А управляющая переменная j служит для выявления наибольшего множителя. Ее значение первоначально устанавливается равным половине значения переменной num и затем декрементируется до тех пор, пока не станет меньше 2. Цикл продолжает выполняться до тех пор, пока обе переменные, i и j, не достигнут своих конечных значений. По завершении цикла оба множителя оказываются выявленными.