ТЕМА 12: Опреатор за цикъл
Оператори за цикъл for, while и do while
Операторът за цикъл for има следния общ вид:
for (израз1; израз2; израз3)
Оператор
Обикновено израз1 инициализира управляващата променлива на цикъла, израз3 задава стъпката, с която се изменя управляващата променлива при всяко изпълнение на тялото на цикъла. Условието за продължаване на цикъла се проверява преди изпълнението на тялото на цикъла. Затова тялото на цикъла може да не се изпълни нито веднъж. Да съставим програма, която пресмята корен квадратен на числата от 1 до 99 и направената грешка при това пресмятане.
using System;
class SqrRoot
{
static void Main()
{
double num, sroot, rerr;
for (num = 0; num < 100; num++)
{
sroot = Math.Sqrt(num);
Console.WriteLine("Корен квардатен от{0} е {1}", num, sroot);
rerr = num - sroot * sroot;
Console.WriteLine("Грешката е равна на" + rerr);
Console.WriteLine();
}
}
}
Грешката е резултат от грешката на метода и грешката на закръгляне.
Операторът за цикъл for може да съдържа няколко управляващи променливи. Например:
for (int i=0, j=10; i<j; i++, j--)
оператор
Всеки един от израз1, израз2 и израз3 могат да бъдат пропуснати, но „;” се запазва. Пропускането на израз2 означава, че условието е изълнено.
for (;;) //безкраен цикъл
оператор
Тялото на цикъла може да бъде празния оператор. Например – пресмятане сумата на числата от 1 до 5:
for (int i=0; i<=5; suma+=i++);
Много често управляващата променлива се използва само в рамките на оператора за цикъл. Тогава е удобно тя да бъде дефинирана при нейната инициализация в израз1. Например:
int fact=1, n;
…
for (int i=1; i<n; i++)
fact*i;
Видимостта на управляващата променлива, която е дефинирана в оператора for, е ограничена в рамките на този оператор. Извън границите на цикъла променливата е неизвестна.
Операторът за цикъл while има следния общ вид:
while (израз)
Оператори;
Условието за продължаване на цикъла се проверява преди изпълнението на тялото на цикъла.Следователно тялото на цикъла може да не се изпълни нито веднъж.
char ch;
while(ch<=’z’)
{
Console.Write(ch+ “ “);
ch++;
}
using System;
class Power
{
public static void Main()
{
int e;
int result;
for (int i = 0; i < 10; i++)
{
result = 1;
e = i;
while (e > 0)
{
result *= 2;
e--;
}
Console.WriteLine("2 на {0} степен = {1}", i, result);
}
}
}
Операторът за цикъл do while има следния общ вид:
do
Operator
while ( израз)
„Израз” е булев. Операторът се изпълнява по следния начин:
Тук условието се проверява след като е изпълнено тялото на цикъла. Следователно, то се изпълнява поне веднъж. Пример за продължаване на цикъла докато не бъде въведен символ ‘q’:
char ch;
do
{
Console.WriteLine("Въведете символ: ");
ch = (char)Console.Read();
}
while (ch != 'q');
При натискане на enter се въвеждат символите ‘\r’ и ‘\n’. Тези символи могат да бъдат игнорирани по следния начин:
char ch;
do
{
Console.WriteLine("Въведете символ: ");
ch = (char)Console.Read();
}
while (ch != '\n' || ch!=’\r’);
Вече разгледахме един пример, в който един цикъл е вложен в друг цикъл. Сега ще разгледаме друг пример на вложени цикли, в който се намират делителите на целите числа, които са в диапазона от 2 до 100.
using System;
class FindFac
{
public static void Main()
{
for (int i = 2; i <= 100; i++)
{
Console.Write("Делители на {0} са : ", i);
for (int j = 2; j < i; j++)
{
if (i % j == 0)
{
Console.Write("{0} ,", j);
}
}
Console.WriteLine();
}
}
}
Обикновено цикъл for се използва, когато предварително е известен броя на повторенията на тялото на цикъла. Цикълът do while – когато е необходимо поне едно изпълнение на тялото на цикъла, а while е най-ефективен в тези случаи, когато броят на повторенията на тялото на цикъла предварително не е известен.