
- •1 Понятие цикла. Виды циклических структур
- •2 Оператор цикла с предусловием
- •While (логическое выражение) оператор
- •3 Оператор цикла с постусловием
- •Do оператор while (логическое выражение)
- •4 Задания для самостоятельной работы:
- •5 Оператор цикла с параметром
- •For (инициализация; логическое выражение; модификации) оператор;
- •6 Индивидуальные задания
Лабораторная работа № 6
Реализация алгоритмов циклической структуры в языке C#.
Цель лабораторной работы: изучить возможные средства языка программирования C#, позволяющие организовывать циклические структуры в программах.
Задачи:
рассмотреть операторы языка, реализующие циклы (while, do, for, foreach);
изучить особенности использования операторов циклов.
1 Понятие цикла. Виды циклических структур
Определение: циклический алгоритм (цикл) – алгоритмическая конструкция, которая содержит упорядоченную совокупность действий, повторяющихся многократно.
Циклические алгоритмы (или проще циклы) содержат повторяющиеся вычисления, зависящие от некоторой переменной. Такая переменная называется параметром цикла, а сами повторяющиеся вычисления составляют тело цикла. Один проход цикла называется итерацией (повторением).
Классификация циклов. Циклы можно условно разделить на две группы:
циклы типа арифметической прогрессии;
итерационные циклы.
Характерной чертой первой группы циклов является то, что количество повторений тела цикла можно определить до начала выполнения программы, реализующей цикл, т.е. априори. Классическими примерами цикла типа арифметической прогрессии являются, например, циклы, вычисляющие сумму или произведение наперед заданного количества выражений.
Для итерационных циклов нельзя априори определить количество повторений тела цикла. Это обусловлено тем, что окончание таких циклов определяется не выходом параметра цикла за конечное значение, а более сложными условиями. Это иллюстрирует следующий пример.
Пример
1. Вычислить приближенное
значение корня квадратного x=
,
используя итерационную процедуру
xn=0.5(xn-1+a/xn-1), где n=1,2,3,.., x0=a.
Известно, что в качестве приближенного значения корня квадратного берется такое значение xn, которое удовлетворяет условию
,
где - заданная точность вычисления.
Видно, что задав исходные данные, например, a = 9, = 10-3, нельзя, не выполняя итерационные вычисления, определить количество повторений тела цикла.
Общая схема структуры обычного цикла:
В языке C# существует четыре оператора цикла, позволяющие реализовывать в программах циклические части алгоритма:
оператор цикла с предусловием while;
оператор цикла с постусловием do;
оператор цикла с параметром for;
оператор цикла с перебором foreach.
Рассмотрим первые два оператора, позволяющие реализовывать итерационные циклы.
2 Оператор цикла с предусловием
Формат оператора while:
While (логическое выражение) оператор
где: while – служебная лексема; логическое выражение – это выражение типа bool; оператор – один любой оператор языка (тело цикла).
Суть работы оператора: сначала вычисляется значение логического выражения, если оно true, то выполняется оператор (тело цикла), затем опять проверяется значение логического выражения и в случае true снова выполняется тело цикла; как только значение логического выражения становится false оператор цикла заканчивает свою работу.
Примечание 1: если по условию задачи в теле цикла требуется выполнить два и более операторов, то их необходимо заключить в блок, т.е. в фигурные скобки.
Пример 2. Задача о табулировании функции одной переменной
Постановка задачи: на отрезке [a,b] с шагом h протабулировать функцию y=f(x).
Замечание: протабулировать функцию – это значит получить табличное представление ее значений. На рисунке 1 отображена математическая интерпретация задачи.
Рисунок 1 – Математическая модель решения задачи о табулировании функции
Рассмотрим конкретизацию задачи о табулировании функции:
на отрезке [-2;3] с шагом x=0,5
протабулировать функцию
Представим программу, реализующую алгоритм решения данной задачи. Самостоятельно сформировать комментарии к программе.
static void Main(string[] args)
{
Console.WriteLine("Введите начало отрезка табулирования"); //1
string s3, s2, s1 = Console.ReadLine(); //2
Console.WriteLine("Введите конец отрезка табулирования"); //3
s2 = Console.ReadLine(); //4
Console.WriteLine("Введите значение приращения переменной");//5
s3 = Console.ReadLine(); //6
double y, x, h, b, a = Convert.ToDouble(s1); //7
b = Convert.ToDouble(s2); //8
h = Convert.ToDouble(s3); //9
x = a; //10
while (x <= b) //11
{
if (x < 0) y = x; else if (x <= 2) y = x * x; else y = Math.Pow(3, x);
Console.Write("при x={0} y={1}", x, y);
Console.WriteLine();
x += h;
}
}