Страница 49 из 502
<b> Console.WriteLine("Наибольший множитель: " + largest);</b>
<b> Console.WriteLine("Наименьший множитель: " + smallest);</b>
<b> }</b>
<b>}</b>
Ниже приведен результат выполнения этой программы.
<b>Наибольший множитель: 50 </b>
<b>Наименьший множитель: 2</b>
Благодаря применению двух переменных управления циклом удается выявить наименьший и наибольший множители числа в одном цикле for. В частности, управляющая переменная i служит для выявления наименьшего множителя. Первоначально ее значение устанавливается равным 2 и затем инкрементируется до тех пор, пока не превысит половину значения переменной num. А управляющая переменная j служит для выявления наибольшего множителя. Ее значение первоначально устанавливается равным половине значения переменной num и затем декрементируется до тех пор, пока не станет меньше 2. Цикл продолжает выполняться до тех пор, пока обе переменные, i и j, не достигнут своих конечных значений. По завершении цикла оба множителя оказываются выявленными.
Условным выражением, управляющим циклом for, может быть любое действительное выражение, дающее результат типа bool. В него не обязательно должна входить переменная управления циклом. В следующем примере программы управление циклом for осуществляется с помощью значения переменной done.
<b>// Условием выполнения цикла может служить любое выражение типа bool.</b>
<b>using System;</b>
<b>class forDemo {</b>
<b> static void Main() { </b>
<b> int i, j;</b>
<b> bool done = false;</b>
<b> for(i=0, j=100; !done; i++, j--) {</b>
<b> if(i*i >= j) done = true;</b>
<b> Console.WriteLine("i, j: " + i + " " + j);</b>
<b> }</b>
<b> }</b>
<b>}</b>
Ниже приведен результат выполнения этой программы.
<b>i, j: 0 100</b>
<b>i, j: 1 99</b>
<b>i, j: 2 98</b>
<b>i, j: 3 97</b>
<b>i, j: 4 96</b>
<b>i, j: 5 95</b>
<b>i, j: 6 94</b>
<b>i, j: 7 93</b>
<b>i, j: 8 92</b>
<b>i, j: 9 91</b>
<b>i, j: 10 90</b>
В данном примере цикл for повторяется до тех пор, пока значение переменной done типа не окажется истинным (true). Истинное значение переменной done устанавливается в цикле, когда квадрат значения переменной i оказывается больше или равным значению переменной j.
Ряд интересных разновидностей цикла for получается в том случае, если оставить пустыми отдельные части определения цикла. В C# допускается оставлять пустыми любые или же все части инициализации, условия и итерации в операторе цикла for. В качестве примера рассмотрим такую программу.
<b>// Отдельные части цикла for могут оставаться пустыми.</b>
<b>using System;</b>
<b>class Empty {</b>
<b> static void Main() { </b>
<b> int i;</b>
<b> for (i = 0; i < 10; ) </b><b>{</b>
<b> Console.WriteLine("Проход №" + i);</b>
<b> i++; // инкрементировать переменную управления циклом</b>
<b> }</b>
<b> }</b>
<b>}</b>
В данном примере итерационное выражение в определении цикла for оказывается пустым, т.е. оно вообще отсутствует. Вместо этого переменная i, управляющая циклом, инкрементируется в теле самого цикла. Это означает, что всякий раз, когда цикл повторяется, значение переменной i проверяется на равенство числу 10, но никаких других действий при этом не происходит. А поскольку переменная i инкрементируется в теле цикла, то сам цикл выполняется обычным образом, выводя приведенный ниже результат.
<b>Проход №0 </b>
<b>Проход №1 </b>
<b>Проход №2 </b>
<b>Проход №3 </b>
<b>Проход №4 </b>
<b>Проход №5 </b>
<b>Проход №6 </b>
<b>Проход №7 </b>
<b>Проход №8 </b>
<b>Проход №9</b>
В следующем примере программы из определения цикла for исключена инициализирующая часть.
<b>// Исключить еще одну часть из определения цикла for.</b>
<b>using System;</b>
<b>class Empty2 {</b>
<b> static void Main() { </b>