Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Теоретическая часть. Циклические вычисления в Паскале реализуются с помощью операторов forto(downto)do, whiledoили repeatuntil.
Циклические вычисления в Паскале реализуются с помощью операторов FOR...TO(DOWNTO)...DO, WHILE...DO или REPEAT...UNTIL. Особенностью операторов FOR...TO(DOWNTO)...DO является встроенный внутренний счетчик цикла, фиксирующий количество повторений. Форматы записи оператора: FOR переменная цикла: = выражение 1 TO выражение 2 DO {операторы тела цикла}; или FOR переменная цикла: = выражение 1DOWNTO выражение 2 DO {операторы тела цикла}; В формате: переменная цикла (управляющая переменная, счетчик цикла) - имя переменной целочисленного типа; выражения 1 и 2 — выражения, тип результата которых совпадает с типом переменной цикла; операторы тела цикла — любой исполнимый оператор или блок операторов, заключенных в операторные скобки;. FOR, TO, DOWNTO и DO - ключевые слова. Ключевые слова TO и DOWNTO определяют особенности выполнения оператора цикла. Если в формате записи указано слово TO, то для выполнения оператора необходимо соблюсти условие «выражение 1» < = «выражение 2». В этом случае переменная цикла последовательно с шагом 1 будет принимать значения от «выражение 1» до «выражение 2». Операторы тела цикла будут многократно выполняться до тех пор, пока переменная цикла меньше или равна значению «выражение 2», и, как только она его превысит, управление будет передано оператору, следующему в программе за конструкцией FOR... TO... DO. Ключевое слово DOWNTO используют в том случае, когда «выражение 1» > = «выражение 2», то есть переменная цикла последовательно с шагом 1 убывает от значения «выражение 1» до значения «выражение 2». При этом операторы тела цикла выполняются до тех пор, пока переменная цикла больше или равна значению «выражение 2». В инструкции FOR... ТО... DО, если значение «выражение 1» превышает значение «выражение 2» (для инструкции FOR... DOWNTO... DO значение «выражение 2» превышает значение «выражение 1»), операторы тела цикла не выполняются ни разу, а управление сразу же передается оператору, следующему в программе за конструкцией FOR... TO (DOWNTO)... DO. Использование оператора FOR регламентируется следующими правилами. · Переменная цикла, её начальное и конечное значения должны быть одного типа. · При выполнении оператора очередное значение параметра цикла вычисляется автоматически. В частности, для целого типа шаг изменения значения переменной цикла равен 1 при конструкции с TO и -1 при конструкции с DOWNTO. · После служебного слова DO может стоять только один оператор. Если в цикле необходимо выполнить группу операторов, то их заключают в операторные скобки BEGIN... END, образуя составной оператор. · Из конструкции FOR.. TO (DOWNTO)... DO peкомендуется выходить после полного завершения цикла (естественный выход). Однако при использовании составного оператора допускается досрочный выход. При досрочном выходе за переменной цикла сохраняется ее последнее значение. · В теле цикла не допускается принудительно изменять значение переменной цикла. · Не разрешается обращаться извне к любому оператору, входящему в тело цикла. Вход в цикл возможен только через его начало, то есть оператор FOR. · Цикл не выполняется вообще, если начальное значение переменной цикла больше (при DOWNTO меньше), чем конечное. В этом случае управление передается оператору, следующему непосредственно за конструкцией FOR.. TO (DOWNTO)... DO. · В конструкции FOR.. TO (DOWNTO)... DO используется только одна переменная цикла. При наличии вложенных циклов у каждой конструкции FOR.. TO (DOWNTO)... DO должна быть своя, отличающаяся от других переменная. · При организации вложенных циклов внутренний и внешний циклы не должны пересекаться. Цикл, который начинается последним, должен завершаться первым: FOR N: = 1 TO 5 DO BEGIN WRITELN (N: 2, '.'); FOR J: = 1 TO 5 DO WRITELN (N: 2, '.', J: 2, '.') END;
Пример 7.1. Дано действительное число х. Вычислить сумму элементов ряда. Число суммируемых элементов ряда (N) вводится во время работы программы с клавиатуры.
.
Схема алгоритма и текст программы.
Program zikl1; {вычисление суммы заданного числа элементов ряда} uses crt; var x, s, a: real; f: longint; i, n, k: integer; begin {начало раздела операторов} clrscr; write('введите значение x='); readln(x); write('введите значение n='); readln(n); {значение первого слагаемого ряда вычисляется до цикла} a: =x; {значение x в степени (2*1-1)} f: =1; {значение f=(2*1-1)! =1} s: =a; {а - значение 1-го слагаемого, s=a} {к - переменная для изменения знака очередного слагаемого с + на - } k: =1; for i: =2 to n do {начало цикла} begin k: =- k; {значение (-1) для i-го слагаемого} a: =a * sqr(x); {вычисление х в степени (2i+1) i-го слагаемого } f: =f * (2*i-2) (2*i-1); {вычисление факториала i-го слагаемого} s: =s+k*a/f; {добавление i-го слагаемого к общей сумме } end; {конец цикла} {вывод результата на экран} writeln('при x=', x: 4: 2, ' сумма', n, ' элементов =', s: 7: 5); readln; end.
Пример 7.2. Задано число х и натуральное число N. Вычислить произведение N элементов ряда . Для вычисления произведения целесообразно использовать рекуррентные соотношения, т.е. каждую дробь в скобках, начиная со второй, выражать через предыдущую. Это позволит существенно сократить объем вычислений. Расчет N! в числителе дроби каждого множителя выполняется в программе в теле цикла по формуле f: =f*n. p: =p*(2+f/a) - формула умножения элементов ряда Р=P1*P2*…*Pi-1 на очередной Pi элемент ряда.
Схема алгоритма и текст программы.
Program zikl2; {вычисление произведения заданного числа элементов ряда} uses crt; {указание библиотечных модулей} var {раздел описания переменных} x, p, a: real; f: longint; i, n: integer; begin {начало раздела операторов} clrscr; write('введите x='); readln(x); write('введите n='); readln(n); p: =1; {начальное значение произведения} a: =1; f: =1; {начальные значение числителя и знаменателя дроби} for i: =1 to n do {начало цикла} begin a: = a*x; f: =f*i p: =p*(2+f/a); end; {конец цикла} {вывод результата на экран} writeln('при x=', x: 4: 2, ' произведение', n: 2, ' элементов=', p: 7: 5); readln; end. {конец программы}
Варианты заданий Вычислить значение суммы или произведения членов ряда. Значение x задать с клавиатуры.
Контрольные вопросы 1.Для чего предназначен оператор цикла? 2.Какие виды циклов есть в Паскале? 3.Какой формат записи имеет оператор FOR? Какие существуют варианты этого цикла? 4.Как работает оператор FOR? B каких случаях применяется? 5.Что является телом цикла? 6.Как в теле цикла выполнить несколько операторов? 10.Почему перед выполнением цикла некоторым переменным нужно задавать начальные значения? 11.При каких условиях оператор for не выполнится ни разу?
|