Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Русский_Проект: Изучение Visual Basic


Здравствуйте, программисты! Сегодня на 15 занятии поговорим об операторах while и do-while.

Цикл while

Конструкция for — самая удобная в тех ситуациях, когда вы точно знаете, сколько раз необходимо выполнить определенное действие. Если же вам точно неизвестно, сколько раз может потребоваться выполнение блока кода, гораздо удобнее циклы while и do/while.

Синтаксис цикла while выглядит следующим образом:

while (условие) оператор;

Условие управляет циклом и может быть любым действительным булевым выражением. Оператор (или блок операторов) выполняется в том случае, если условие принимает значение true. Если же условие принимает значение false, управление переходит к следующему после цикла оператору. Напишем программу для вывода на экран символов русского алфавита:

// Пример цикла while

using System;

public class WhileDemo
{
   public static void Main() 
      {
        char ch;
                
        // Выводим символы русского алфавита с помощью цикла while
        ch = 'а';
        while(ch <= 'я')
            {
                Console.Write(ch+ " ");
                ch++;   
            }
      }
}

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

Как и цикл for, цикл while проверяет условие в начале цикла, а значит, что код цикла может вообще никогда не выполняться.

Напишем еще один пример для вычисления целочисленной степени числа 2:

// вычисляем значения целочисленной степени числа 2 с помощью цикла while

using System;

class PowerTwo
{
    public static void Main ()
   {
        int e;
        int result;
        
        for(int counter = 0; counter < 10; counter++)
        {
            result = 1;
            e = counter;
            
            while (e > 0)
            {
                result *= 2;
                e--;   
            }
            Console.WriteLine("2 в  " + counter + "-й степени = " + result);
        }
   }
}

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

Для того чтобы проиллюстрировать работу цикла с этими конструкциями, мы используем возможности С# в отношении работы с файлами. Для считывания информации из файлов в С# предусмотрен класс StreamReader, определенный внутри пространства имен System. IO. Обратите внимание, что экземпляр класса StreamReader создается как значение, возвращаемое статическим методом File.OpenText(). После открытия файла config.win вы можете обработать каждую его строку (то есть вывести ее на консоль) с использованием метода StreamReader.ReadLine():

try // Это на тот случай, если файла config.win на месте не окажется
{
    // Открываем файл config.win
    StreamReader strReader = File.OpenText("C:\config.win");
    // Считываем каждую строку и выводим ее на консоль
    string strLine;
    while (null != (strLine = strReader.ReadLine()));
    Console.WriteLine(strLine);
    {
        // Файл необходимо закрыть
        strReader.Close();
    }
    catch (FileNotFoundException e)
    {
        Console.WriteLine(e.Message);
    }
}

Цикл do-while

В отличии от циклов for и while, где условие проверяется в самом начале, в цикле do-while условие проверяется в конце цикла. Так образом цикл будет выполнен по крайней мере один раз (в предыдущих циклах это совсем не гарантируется — например, в тех ситуациях, когда условие на продолжение цикла ложно с самого начала). Синтаксис цикла do-while следующий

do
{
    операторы;
}
while (условие);

При наличии в цикле только одного оператора фигурные скобки не обязательны. Если при проверке условие принимает значение true, цикл do-while выполняется еще раз. Рассмотрим пример с циклом do-while:

{
    string ans;
        
        do
        {
            Console.WriteLine("Продолжим? [yes], [no]: ");
            ans = Console.ReadLine();
        }
        while (ans != "yes");
}

В этом примере программа каждый раз будет выводить одну и ту же строку, пока пользователь не наберет на клавиатуре слово yes.

При изучении оператора if мы написали простую программу для угадывания буквы. Теперь мы можем усовершенствовать ее при помощи цикла do-while. Теперь программа будет выполняться до тех пор, пока буква не будет угадана.

// Угадай букву. Усовершенствованная версия

using System;

public class GuessLetter2 
{
   public static void Main() 
   {
        char ch, answer = 'к'; 
        do
        {
            Console.WriteLine("Угадайте букву алфавита");
            Console.WriteLine("Введите символ с клавиатуры");
        
            // в цикле считываем символ, но при этом игнорируем
            // escape-последовательности \n и \r, которые соответствуют клавише Enter
            do
            {
                ch = (char) Console.Read();  // считывание символа, введенного с клавиатуры
            }
            while (ch == '\n' |  ch == '\r');
        
            if(ch == answer) Console.WriteLine("Молодец, вы угадали!");
            else
            {
                Console.WriteLine("Попробуйте еще раз");
            
                // Вложенный оператор if
                if(ch < answer) Console.WriteLine("Ищите после этой буквы");
                else Console.WriteLine("Ищите до этой буквы");      
            }
        }
        while (answer != ch);
   
   }
}

Удачного вам программирования!


©2007 А.Климов
Русский_Проект

В избранное