Урок по C# №9: «Циклы с параметрами »


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

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

Помните аналогию с отжиманиями?  Нам там нужно было  отжаться 30 раз. Иными словами, мы знаем количество отжиманий наперед, поэтому нам выгоднее использовать цикл с параметром.

Его синтаксис такой:

for (начальное значение цикла (с возможным объявлением;условие;приращение)

{

Если несколько выражений

}

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

int i=0;
for (; i < 30;i++,Console.WriteLine ("Вы сделали {0} отжиманий",i));

Кстати, как вы могли заметить, я часто привожу участки кода. Я не хочу загромождать страницу ненужной информацией, поэтому привожу саму суть.  Если вы хотите скомпилировать программу, то набирайте этот код в теле метода Main.

 

Итак,  давайте рассмотрим, что мы сделали. Обратите внимание на то, что я объявил переменную i вне скобок for. Я это сделал для того, чтобы можно было использовать i уже дальше в программе. Сейчас время сделать маленькое лирическое отступление.

Дело в том, что в сишной программе переменная будет делиться так или иначе на две группы – локальные и глобальные. Хотя в C# глобальных переменных нет (если сравнивать их с аналогиями в C++ и C), тем не менее, есть такие переменные, которые можно использовать в любом месте вашего класса. Это так называемые члены- класса. Более подробно мы это рассмотрим, когда будем изучать ООП.

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

Локальные переменные входят в методы, в тела условий и циклов, наподобие того, что мы сейчас рассмотрели. Особенность локальной переменной заключается в том, что она известна только в том участке кода, где мы ее используем. Это означает, что, например, в реализации нашего цикла таким образом (это, обычно, так нужно делать):

for (int i=0; i<30;i++);
Console.WriteLine (i);

Мы получим ошибку компиляции, так как C# не знает о переменной i. А все лишь потому, что эта переменная известна только в теле цикла. Например, если бы мы написали так:


for(int i=0; i<30;i++)//обратите внимание, здесь нет точки с запятой, Console.WriteLine является телом цикла
{
Console.WriteLine (i);

}

Наберите и запустите этот код. Посмотрите как он работает.

Кроме того, нам никто не запрещает самим указывать коффициент приращения. Например, нам нужно вывести список четных чисел от 2 до 50. Тогда мы поступим так:

for (int i=2; i<=50;i+=2}
Console.WriteLine (i);

Думаю, смысл вам понятен. Еще один важный момент при использовании цикла с параметром является его гибкость в настройках. Хотя лично я не приветствую такой подход (все –таки, я начинал программировать с Паскаля, а там эти безобразия пресекались на корню), тем не менее, другие программисты часто используют эту возможность. Так что не удивляйтесь, если увидите такой код:

int k=3; for (;;) { k++; if (k>10) break;}
Console.WriteLine (k);

Как видите, можно делать и такое. Кроме того, такой цикл всегда можно превратить в цикл с пред или постусловием.

Ну и напоследок. Где же применяются циклы с параметром? Как я уже сказал, когда мы точно знаем некие параметры цикла. Например, с использованием такого цикла очень легко вывести ряд Фибоначчи или же написать факториал. Ну и задача, подобная этим пресловутым отжиманиям.

Но гораздо большее применение цикла с параметром в обработке такой структуре данных, как массивы. Именно там вы и поймете прелесть подобного цикла. Но массивы и последний цикл foreach мы оставим на следующий урок. А пока все.
<<Предыдущий урок                                      Следующий урок>>

Яндекс.Метрика