ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Оператор цикла с постусловием
Этот оператор начинается словом Repeat, после которого следуют операторы, реализующие тело цикла, за ними записывается слово Until и логическое выражение. При работе такого цикла, сначала выполняются все операторы тела цикла, затем вычисляется логическое выражение, записанное после Until. Если значение этого выражения False, повторяется выполнение тела цикла и опять подсчитывается логическое выражение. И так до тех пор, пока не будет получено значение True. Иными словами выход из цикла осуществляется при истинном значении логического выражения. Запишем предыдущий пример подсчета факториала, используя оператор цикла с постусловием. Эта программа соответствует алгоритму, представленному на рис.6. Program Loop1; { подсчет факториала числа } Var i, n, Fact: integer; Begin Write(‘n=‘); Readln(n); Fact:= 1; i:= 1; { цикл с постусловием } Repeat Fact:= Fact * i; i:= i + 1; Until i > n; Writeln(‘n! = ‘,n) End. Оператор цикла с предусловием
Оператор цикла с предусловием имеет вид:
While S Do A,
где S - логическое выражение, A - оператор, представляющий тело цикла. В этом операторе тело цикла будет выполняться до тех пор, пока значение выражения S истинно. Тем самым, если при входе в цикл значение S есть False, тело цикла не выполнится ни разу. Рассмотрим пример. Требуется подсчитать сумму бесконечного ряда:
- + -... + -...
с заданной точностью. Для решения этой задачи надо суммировать члены ряда до тех пор, пока абсолютная величина прибавляемого члена не станет меньше значения требуемой точности. Полученная при этом сумма есть сумма ряда с заданной точностью. Алгоритм решения этой задачи состоит из цикла, для которого заранее не известно число повторений, критерием выхода из цикла является величина прибавляемого члена ряда. На первый взгляд может показаться, что для подсчета величины добавляемого члена надо организовывать дополнительный цикл, т.к. член содержит факториал. Но легко заметить, что, имея значение (i - 1) - го члена можно получить i - ый член, используя рекуррентную формулу
,
где i - номер члена, U - i -ый член ряда. Индексы в этой формуле указывают на то, что в правой части стоит предыдущий член, а в левой получаемый из него следующий. Т.к. после получения нового значения члена ряда - старое значение больше не нужно, новое значение можно записать на место старого, т.е. использовать для них одну и ту же переменную. В программе это выразится в том, что в рекуррентной формуле в левой и правой частях будет присутствовать одна и та же переменная. Естественно перед началом вычислений в цикле эта переменная должна получить значение первого члена ряда. В соответствии с рассмотренным методом разработаем алгоритм (рис.10) и программу.
Рис. 10
Program Loop3; Var x,y,z,sum,u: real; I: integer; Begin { Ввод значения x}; Write(‘x=‘); Readln(x); { Ввод значения eps}; Write(‘eps=‘); Readln(eps); u:= x; i:= 1; sum:= u; z:= x*x; { цикл с предусловием для нахождения суммы ряда } While Abs(u) > eps Do { составной оператор - тело цикла } Begin u:= -u * z / (2* i * (2* i + 1)); sum:= sum + u; i:= i + 1; End; { конец тела цикла } Writeln(‘sum = ‘, sum) End. Переменная z введена в алгоритм для того, чтобы вынести из тела цикла лишние вычисления, это позволит не возводить x в квадрат при каждом повторении цикла. В переменной sum накапливается сумма ряда.
Производные типы Перечислимые типы
Перечислимый тип - нестандартный скалярный тип. Он определяется набором идентификаторов, перечисляемых через запятую в круглых скобках. Каждый идентификатор - допустимое значение данного типа. Порядок перечисления идентификаторов существенен. Первому идентификатору присваивается номер 0, второму - номер 1 и т.д. Функция Ord от значения перечислимого типа дает порядковый номер значения. К переменным перечислимого типа применимы также функции Pred и Succ, описанные ранее. Переменная перечислимого типа может быть параметром параметрического цикла. Пример задания перечислимого типа: Type week = (sun, mon, tus, wen, the, fr, sat); Var a: week;
Тип - диапазон
Каждый такой тип задается путем наложения ограничений на уже заданный тип, который называется базовым. В качестве базового - может использоваться любой перечислимый тип: стандартный или определенный в программе. Тип - диапазон задается указанием минимального и максимального значений разделенных двумя точками. Например:
Type num = 5.. 15;
Использование переменных такого типа в качестве параметра цикла повышает надежность программ, т.к. значение этих переменных не может выйти за заданные границы.
Не нашли, что искали? Воспользуйтесь поиском:
|