Смекни!
smekni.com

Циклические конструкции в языках программирования высокого уровня (стр. 4 из 5)

for(инициализатор; условие; итератор;) оператор {ы}

Где инициализатор-выражение, вычисляемое до начала выполнения цикла (обычно здесь инициализируется локальная переменная, используемая в качестве счетчика цикла), условие-выражение, которое вычисляется перед выполнением каждой итерации цикла (например, проверка того, что счетчик цикла меньше определенного значения), итератор-это выражение, которое будет выполнятся после каждой итерации цикла (например, увеличение счетчика цикла).Цикл, for известен также как цикл с предусловием, поскольку условие цикла вычисляется до выполнения операторов цикла, а в том случае, если условие сразу оказывается равным false, операторы цикла вообще не будут исполнены. Перед каждой итерацией цикла условие вычисляется вновь. Цикл завершается, как только результат вычисления условия становится false. Цикл for превосходно подходит для повтора оператора или нескольких операторов заранее определенное число раз. Следующий пример показывает типичное использование цикла for:

for ( int I = 0; I < 100; i ++)

{ //Цикл будет выполнен 100 раз}

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

// Этот цикл проходит по строкам

for ( int i = 0; i < 100; i ++)

{// Это цикл проходит по столбцам

for ( int j = 0; j < 100; j ++){

a[ i , j] = 0;}}

Рассмотрим цикл while, его общая форма имеет такой вид:

whi1е (условие) инструкция;

Здесь под элементом инструкция понимается либо одиночная инструкция, либо блок инструкций. Работой цикла управляет элемент условие, который представляет собой любое допустимое выражение типа bool. Элемент инструкция выполняется до тех пор, пока условное выражение возвращает значение истина. Как только это условие становится ложным, управление передается инструкции, которая следует за этим циклом.

Цикл while работает следующим образом. Проверяется значение переменной num. Если оно больше нуля, счетчик mag инкрементируется, а значение num делится на 10. Цикл повторяется до тех пор, пока num больше нуля. Когда num станет равным нулю, цикл завершится, а переменная mag будет содержать порядок исходного числа. Подобно циклу for, условное выражение проверяется при входе в цикл while, a это значит, что тело цикла может не выполниться ни разу. Это свойство цикла (иллюстрируемое следующей программой) устраняет необходимость отдельного тестирования до начала цикла:

// Вычисление целых степеней числа 2.

using System;

class Power {

public static void Main() {

int e;

int result;

for(int i=0; i < 10;

result = 1;

e = i;

while(e > 0) {

result *= 2;

e—;

Console.WriteLine("2 в степени " + i +

" равно " + result);

Третьим циклом в С# является цикл do-while. В отличие от циклов for и while,в которых условие проверяется при входе, цикл do-while проверяет условие при выходе из цикла. Это значит, что цикл do-while всегда выполняется хотя бы один раз. Его общий формат имеет такой вид:

do {инструкции;} while {условие);

Несмотря на то, что фигурные скобки необязательны, если элемент инструкции состоит только из одной инструкции, они часто используются для улучшения читабельности конструкции do-while, не допуская тем самым путаницы с циклом while. Цикл do-while выполняется до тех пор, пока остается истинным элемент условие, который представляет собой условное выражение. В следующей программе цикл do-while используется для отображения в обратном порядке цифр, составляющих заданное целое число.

using System;

class DoWhileDemo {

public static void Main() {

int num;

int nextdigit;

num = 198;

Console.WriteLine("Число: " + num);

Console.Write("Число с обратным порядком цифр: " ) ;

do {nextdigit = num % 10;

Console.Write(nextdigit);

num = num / 10;

} while(num > 0) ;Console.WriteLine();}}}

И еще одна циклическая конструкция foreach. Цикл foreach предназначен для опроса элементов коллекции. Коллекция — это группа объектов. В С# определено несколько типов коллекций, среди которых можно выделить массив. Формат записи цикла foreach имеет такой вид:

foreach (тип имя__переменной in коллекция) инструкция;

Здесь элементы тип и имя_переменной задают тип и имя итерационной переменной, которая при функционировании цикла fоreach будет получать значения элементов из коллекции. Элемент коллекция служит для указания опрашиваемой коллекции (в данном случае в качестве коллекции мы рассматриваем массив). Таким образом, элемент тип должен совпадать (или быть совместимым) с базовым типом массива. Здесь важно запомнить, что итерационную переменную применительно к массиву можно использовать только для чтения. Следовательно, невозможно изменить содержимое массива, присвоив итерационной переменной новое значение.

Рассмотрим простой пример использования цикла foreach. Приведенная ниже программа создает массив для хранения целых чисел и присваивает его элементам начальные значения. Затем она отображает элементы массива, попутно вычисляя их сумму [10, 12, 13, 14].

// Использование цикла foreach.

using System;

class ForeachDemo {

public static void Main() {

int sum = 0;int[] nums = new int[10];

// Присваиваем элементам массива nums значения,

for(int i = 0; i < 10; i++){ nums[i] - i;

// Используем цикл foreach для отображения значений

// элементов массива и их суммирования,

foreach(int x in nums) {

Console.WriteLine("Значение элемента равно: " + х);

sum += х;}

Console.WriteLine("Сумма равна: " + sum);}}}

3. ПРИМЕР ПРОГРАММ ЦИКЛИЧЕСКИХ КОНСТРУКЦИЙ НА ЯЗЫКЕ С#

3.1 Программа №1 «цикл while»

Предположим необходимо найти арендную плату за помещение за 10 лет. Известно, что арендная плата в месяц составляет 1200р. и что она увеличивается на 5 % в год. Для написания программы решения этой задачи воспользуемся циклом while:

using System;

//указывает что используется пространство имен system

using System.Collections.Generic;

using System.Text;{

namespace ConsoleApplication5

{

class Program

{

// объевление функции main

static void Main(string[] args)

{

// программа расчета арендной платы

// год начала и конца арендной платы

int i = 2007, j = 2017;

// арендная плата в месяц и проценты вгод

decimal Renta = 1200, Procent = 5;

// заголовок столбцов

Console.WriteLine("Год Аренда");

Console.WriteLine("---- -----");

while (i <= j)

{ // строка вывода арендной платы

Console.WriteLine("{0,-8}{1,10:C2}", i, Renta);

// расчет арендной платы за год

Renta *= (1 + Procent / 100);

Renta = Decimal.Round(Renta, 2);

i++;

} Console.ReadLine(). }}}

В результате чего получена сумма арендной платы за 10 лет. Результат работы этой программы изображен на рисунке 3

Рисунок 3 - Результат программы №1 «цикл while»

3.2 Программа №2 «цикл do-while»

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

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication6

{

class Program

{ static void Main(string[] args)

{string strAnswer;

double a;

do

{ //запрос на ввод первого числа числа

Console.WriteLine("Введите первое число"); double n1 = Convert.ToDouble(Console.ReadLine());

//запрос на ввод второрго числа

Console.WriteLine("Введите второе число"); double n2 = Convert.ToDouble(Console.ReadLine());

//запрос на выбор действия

Console.WriteLine("Выбирите действие +: /: *: -:");

string s = Convert.ToString(Console.ReadLine());

//выполнение условия

//если введенное значение соответствует знаку + то выполняется сложение

if (s == "+")

{

a = n1 + n2;

Console.WriteLine("Сумма чисел равна :"+a);

}

//если введенное значение соответствует знаку * то выполняется умножение

else if (s == "*")

{ a = n1 * n2;

Console.WriteLine("Произведение чисел равна :"+ a);

} //если введенное значение соответствует знаку - то выполняется отнимание

if (s == "-")

{

a = n1 - n2;

Console.WriteLine("Разность чисел равна :"+ a);

}

//если введенное значение соответствует знаку / то выполняется деление

else if (s == "/")

{ a = n1 / n2;

Console.WriteLine("Частное чисел равна :"+ a);

} // запрос на новое вычисление

Console.Write("Не желает ли пользователь выполнить другое вычисление (y/n)");

strAnswer = Console.ReadLine().Trim();

} //происходит сравнение strAnswer символом y

while (strAnswer.Length > 0 && strAnswer.ToLower()[0] == 'y');

Console.ReadLine();

}

}

}

Результат программыы можно увидеть на рисунке 4

Рисунок 4 - Результат программы №2 «цикл do-while»

3.3 Программа №3 «цикл for»

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

using System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication7

{

class Program

{

static void Main(string[] args)

{

int i, j, m, n;

//запрос на ввод количества строк

Console.WriteLine("введите n");

n = Convert.ToInt32(Console.ReadLine());

//запрос на количество столбцов

Console.WriteLine("введите m");

m = Convert.ToInt32(Console.ReadLine());

//инициализация массивов

int[,] a = new int[n, m];

int[,] b = new int[n, m];

int[,] c = new int[n, m];

int[] d = new int[n];

//заполнение массивов случайными числами

Random r = new Random();

for (i = 0; i < n; i++)

{

for (j = 0; j < m; j++)

{

a[i, j] = r.Next(0, 10);

b[i, j] = r.Next(0, 10);

}

}

Console.WriteLine("----------------матрица a ------------");

for (i = 0; i < n; i++)

{

for (j = 0; j < m; j++)

{

//вывод матрицы а

Console.Write(a[i, j] + "|"); }

Console.WriteLine();

}

Console.WriteLine("---------------матрица b -------------");

for (i = 0; i < n; i++)

{

for (j = 0; j < m; j++)

{

//вывод матрицы b

Console.Write(b[i, j] + "|"); }