Операторы цикла. Цикл for в Паскаль

Здравствуйте, дорогие читатели! Вот мы с вами и подошли к изучению циклов. Циклы в Паскаль. Что это такое? Как этим пользоваться? Для чего они нужны? Именно на эти вопросы я сегодня и отвечу.
Если вы читали , то знаете, что существует три вида алгоритмов: линейный, разветвляющийся и циклический. Мы с вами уже знаем, как реализовывать и алгоритмы на Паскале. Приступим к изучению последнего типа алгоритмов.
В языке Pascal, как и в большинстве языков программирования, существует три типа циклических конструкций.

Любой цикл состоит из тела и заголовка. Тело цикла — это набор повторяющихся операторов, а условие — это логическое выражение, в зависимости от результата которого и происходит повторное выполнение цикла.

Возьмем одну задачу, которую будем решать, используя различные виды циклов.

Задача 1. Вывести все числа от 1 до числа, введенного с клавиатуры.

While, или цикл с предусловием

Как вы, наверное, уже поняли из названия, while — это цикл, в котором условие стоит перед телом. Причем тело цикла выполняется тогда и только тогда, когда условие true ; как только условие становится false

While имеет формат:

while < условие> do <оператор 1>; {Пока … делай ….}

Данный цикл подходит только для одного оператора, если же вы хотите использовать несколько операторов в своем коде, вам следует заключить их в операторные скобки — begin и end; .

Решение задачи.

Program example_while; var i, N: integer; { объявляем переменные } begin i:= 1; { Присваиваем i значение 1 } readln(N); { Считываем последнее число } while i <= N do {Как только i станет больше N, цикл прекратится (можно было бы написать просто <, но пришлось бы добавлять 1 к N) } begin {Открываем операторные скобки} write(i, " "); {Выводим i} Inc(i); {увеличиваем i на один.} end; { закрываем скобки } end.

Repeat, или цикл с постусловием

Repeat — полная противоположность while . Repeat — это цикл, в котором условие стоит после тела. Причем оно выполняется тогда и только тогда, когда результат условия false ;как только логическое выражение становится true , выполнение цикла прекращается.

Repeat имеет формат:

repeat { повторяй … }
<оператор 1>;
< оператор 2>;

until {до…} <условие>

Begin и end не требуются.

Решение задачи.

Program example_repeat; var i, N: integer;{ объявляем переменные } begin i:= 1; { Присваиваем i значение 1 } readln(N); { Считываем последнее число } repeat {после repeat не требуется begin и end } write(i, " "); {Выводим i} Inc(i); {увеличиваем i на один.} until i = N + 1; {Например, i = 11, а N = 10. Цикл прекратится, так условие стало true.} end.

For, или цикл с параметром

For — это цикл, в котором тело выполняется заданное количество раз.

Существует две формы записи этого цикла:

Первая форма

for <счетчик1> := <значение1> to <конечное_значение> do <оператор1>;

<счетчик1> будет увеличиваться на 1.

<значение1> — это начальное значение счетчика. Это может быть переменная или число.
<конечное_значение> : как только значение <счетчик1> станет больше <конечное_значение>

Если требуется написать несколько операторов в теле цикла, используем begin и end .

И <счетчик1>, и <конечное_значение>, и <значение1> — переменные целого типа.

Чаще всего в качестве счетчика используется переменная i.

Вторая форма

for <счетчик2> := <значение2> downto <конечное_значение> do <оператор1>;

После каждой итерации значение <счетчик2> будет уменьшатся на 1.

<значение2> — это начальное значение счетчика.
<конечное_значение> : как только значение <счетчик2> станет меньше <конечное_значение>, выполнение цикла прекратится.

Два важных примечания:

  1. Цикл повторяется, пока значение значение счетчика лежит в отрезке [значение; конечное_значение].
  2. Изменять значение счетчика внутри тела нельзя ! Вот что выводит компилятор:

Решение задачи:

Program example_for; var i, N: integer; begin read(N); {предположим, что мы ввели 10} for i:= 1 to N do write(i, " "); {количество итераций - 10 - 1 + 1 = 10} end.

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

Давайте решим пару задач.

For1 . Даны целые числа K и N (N > 0). Вывести N раз число K.

Организовываем простой цикл от 1 до требуемого числа.

Program for1; var K, N, i: integer; begin read(K, N); for i:= 1 to N do write(K, " "); {Пишем К через пробел } end.

For2 . < B). Вывести в порядке возрастания все целые числа, расположенные между A и B (включая сами числа A и B), а также количество N этих чисел.

Так как A < B, то цикл должен будет выводить все числа от А до B. Чтобы сосчитать количество чисел, используем формулу: <конечное_значение> — <начальное_значение> + 1.

Program for2; var A, B, i, count: integer; begin read(A, B); for i:= A to B do write(i, " "); {выписываем числа от меньшего к большему} count:= B - A + 1; {считаем количество чисел} writeln; write("Количество чисел - ", count); end.

For9 . Даны два целых числа A и B (A < B). Найти сумму квадратов всех целых чисел от A до B включительно.

Организовываем такой же цикл, как и в предыдущей задаче, но одновременно суммируем квадраты всех чисел. Чтобы высчитать квадрат, используем функцию .

Program for9; var A, B, i, S: integer; begin read(A, B); S:= 0; {PascalABC делает это автоматически, но если у вас другой компилятор советуем обнулять переменные вручную} for i:= A to B do S:= S + Sqr(i); {складываем все квадраты} writeln; write("Сумма квадратов - ", S); end.

For13° . Дано целое число N (> 0). Найти значение выражения 1.1 – 1.2 + 1.3 – … (N слагаемых, знаки чередуются). Условный оператор не использовать.

Для того, чтобы поменять знак, каждую итерацию цикла меняем значение специальной переменной на противоположное.

Program for13; var N, A, i: integer; S: real; begin Write("N = "); readln(N); S:= 1.1; A:= 1; {Сначала положительное} for i:= 2 to N do {первую итерацию цикла мы уже произвели, поэтому начинаем отсчет с 2} begin A:= -A; {Теперь отрицательное} S:= S + A * (1 + i / 10); {Складываем} end; Writeln(S:5:1); {Отдадим под дробную часть одно знакоместо} end.

While1° . Даны положительные числа A и B (A > B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти длину незанятой части отрезка A.

Каждый раз вычитаем B из А, пока А — В >= 0.

Program while1; var A, B: integer; begin readln(A, B); while (A - B) >= 0 do A:= A - B; {Пока разница положительная, вычитаем. Необходимо предусмотреть вариант с кратностью А и B, поэтому >=} write(A); end.

While4° . Дано целое число N (> 0). Если оно является степенью числа 3, то вывести True, если не является - вывести False.

Действуем следующим образом: пока N делится нацело на три, делим N нацело. Затем, если N = 1 — число является степенью тройки; если N <> 1, тогда число — не степень тройки. Для того чтобы решить эту задачу, требуется знать, что такое , и как работают .

Program while4; var N: integer; begin readln(N); while N mod 3 = 0 do N:= N div 3; {Пока остаток от деления на три равен нулю, делим N нацело } writeln(N = 1); {логическое выражение} end.

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

Оператор является неделимым элементом программы, который дает возможность выполнять определенные алгоритмические действия. Отличием оператора, по отношению к другим элементам, является то, что под ним всегда подразумевается какое-то действие. В языке Паскаль операторы состоят из служебных слов. Операторы, используемые в программе, отделяются между собой и от других элементов программы символом (;). Все операторы языка Паскаль можно условно разбить на две группы :

  1. простые;
  2. структурированные.

Простые операторы - это операторы, не содержащие в себе других операторов. К ним относятся:

  • оператор присвоения (:=);
  • оператор процедуры;
  • оператор безусловного перехода (GOTO).

Структурированные операторы - это операторы, которые содержат в себе другие операторы. К ним относятся:

  • составной оператор;
  • операторы условий (IF, CASE);
  • операторы цикла (FOR, WHILE, REPEAT);
  • оператор присоединения (WITH).

Простые операторы

Оператор процедуры

Оператор процедуры служит для вызова процедуры.

Формат: [имя_процедуры] (список параметров вызова);

Оператор процедуры состоит из идентификатора процедуры, непосредственно за которым в скобках расположен список параметров вызова. В Паскале имеются процедуры без параметров. В этом случае, при вызове, список параметров отсутствует. Выполнение оператора процедуры приводит к активизации действий описанных в ее теле. В языке Паскаль имеется два вида процедур:

  • Стандартные, которые описаны в самом языке и являются принадлежностью языка;
  • Процедуры пользователя, которые создает пользователь.

Для вызова стандартных процедур необходимо подключение в разделе USES имени модуля (библиотеки), где описана данная процедура. Ряд процедур, находящихся в модуле SYSTEM всегда подключается к программе автоматически и их подключение в разделе USES не нужно. Стандартные процедуры языка Паскаль - READ, WRITE, REWRITE, CLOSE, RESET.

READ ([файловая_переменная], [список_ввода])

READ (x,y)

Процедуры пользователя (нестандартные) должны быть созданы перед их использованием в программе и находятся либо в разделе описания самой программы, либо в отдельные программные единицы модуля. Если процедура находится в модуле, то имя этого модуля необходимо упомянуть в приложении USES.

Оператор безусловного перехода GOTO

Формат: GOTO [метка];

GOTO - зарезервированное слово в языке Паскаль. [метка] - это произвольный идентификатор, который позволяет пометить некий оператор программы и в дальнейшем сослаться на него. В языке Паскаль допускается в качестве меток использовать целое число без знаков. Метка располагается перед помеченным оператором и отделяется от него (:). Один оператор можно помечать несколькими метками. Они так же отделяются друг от друга (:). Перед тем как использовать метку в разделе оператора ее необходимо описать в разделе LABEL (раздел описания).

Действие GOTO передает управление соответствующему помеченному оператору. При использовании меток нужно руководствоваться следующими правилами:

  • метка должна быть описана в разделе описаний и все метки должны быть использованы;
  • если в качестве меток используются целые числа, их не объявляют.

Противоречит принципам технологии структурного программирования. Современные языки программирования не имеют в своем составе такого оператора, и в его использовании нет необходимости. Кроме того в современных компьютерах используется так называемый конвейерный способ. Если в программе встречается оператор безусловного перехода, то такой оператор ломает весь конвейер, заставляя создавать его заново, что существенно замедляет вычислительный процесс.

Структурированные операторы

Операторы условия IF

Условный оператор используется в программе для реализации алгоритмической структуры - ветвления. В данной структуре вычислительный процесс может продолжаться по одному из возможных направлений. Выбор направления обычно осуществляется проверкой какого-либо условия. Существует два вида структуры ветвления: структура вилка и обход.

В языке Паскаль условный оператор IF это средство организации ветвящегося вычислительного процесса.

Формат: IF [логическое_выражение] Then [оператор_1]; Else [оператор_2];

IF, Then, Else - служебные слова. [оператор_1], [оператор_2] - обыкновенные операции языка Паскаль. Часть Else является необязательной (может отсутствовать).

Оператор IF работает следующим образом: вначале проверяется результат логического выражения. Если результат Истина(TRUE), то выполняется [оператор_1], следующий за служебным словом Then, а [оператор_2] пропускается. Если результат Ложь(FALSE), то [оператор_1] пропускается, а [оператор_2] исполняется.

Если часть Else отсутствует, то оператор IF имеет не полную форму:

IF [логическое_выражение] Then [оператор];

В этом случае, если результат Истина(TRUE), то выполняется [оператор], если Ложь(FALSE), то управление передается оператору, следующему за оператором IF.

имеются 2 числа A и B. Найти максимальное число.

Составной оператор

Составной оператор - это последовательность произвольных операций в программе, заключенная в так называемые операторные скобки (Begin-End).

Формат: Begin [операторы]; End;

Составные операторы позволяют представлять группу операторов, как один оператор.

Оператор выбора CASE

Предназначен для реализации множественных ветвлений, поскольку оператор IF может реализовать всего два направления вычислительного процесса, использовать его для реализации множественных ветвлений не всегда удобно. Множественное ветвление реализуется оператором CASE.

Формат: CASE [ключ_выбора] OF

[константа_выбора_1]:[оператор_1];

[константа_выбора_2]:[оператор_2];

[константа_выбора_N]:[оператор_N];

ELSE [оператор];

CASE, OF, ELSE, END - служебные слова. [ключ_выбора] - это параметр одного из порядковых типов. [константы_выбора] - константы того же типа, что и ключ выбора, реализующие выбор. [оператор_1(N)] - обыкновенный оператор. ELSE может отсутствовать.

Оператор выбора работает следующим образом: до работы оператора определяется значение параметра ключ выбора. Этот параметр может быть либо выражен как переменная в программе, либо другим путем. Затем параметр ключ выбора последовательно сравниваем с константой выбора. При совпадении значения ключа выбора с одной из констант выбора, выполняется оператор, следующий за этой константой, а все прочие операторы игнорируются. В случае не совпадения ключа выбора ни с одним из констант, выполняется оператор, следующий за Else. Часто Else является не обязательной и в случае несовпадения ключа выбора ни с одной из констант выбора и при отсутствии Else, управление передается оператору, следующему за оператором CASE.

В операторе CASE нет явной проверки условия, характерного для оператора IF. В тоже время в неявном виде операция сравнения выполняется. CASE вносит диссонанс в программу на языке Паскаль, поскольку данные оператор завершается служебным словом End, которому нет парного Begin.

Составить алгоритм и программу задачи, моделирующей работу светофора. При вводе символа первой буквы цветов светофора, программа должна выводить сообщение о соответствующем цвете и действиях.

Программа работает следующим образом: с клавиатуры процедурой Read вводится символ буквы цвета светофора. Если введена буква ‘з’ соответствующая зеленому цвету, то в операторе CASE введено значение в списке выбора найдет константу выбора ‘з’ и будет выведено сообщение “Зеленый цвет, движение разрешено”. При вводе символа букв ‘к’ и ‘ж’ буду выведены аналогичные сообщения. При вводе любого другого символа будет выведено сообщение “Светофор не работает”, поскольку в этом случае работает часть Else, оператора CASE.

Операторы цикла

Циклической алгоритмической структурой считается такая структура, в которой некоторые действия выполняются несколько раз. В программировании имеются два вида циклических структур: цикл с параметром и итерационный цикл.

В цикле с параметром всегда имеются так называемые параметры цикла: X, X n , X k , ∆X. Иногда цикл с параметром называют регулярным циклом. Характерной чертой является то, что число циклов и повторений можно определить до выполнения цикла.

В итерационном цикле невозможно определить число циклов до его выполнения. Он выполняется до тех пор, пока выполняется условие продолжение цикла.

В языке Паскаль имеются три оператора, реализующих циклические вычислительные структуры:

  • счетный оператор FOR. Он предназначен для реализации цикла с параметром и не может быть использован для реализации итерационного цикла;
  • оператор цикла с предусловием WHILE;
  • оператор цикла с постусловием REPEAT.

Последние два ориентированы на реализацию итерационного цикла, однако их можно использовать и для реализации цикла с параметром.

Оператор FOR

Формат: FOR [параметр_цикла] := [н_з_п_ц] To [к_з_п_ц] Do [оператор];

FOR, To, Do - служебные слова. [параметр_цикла] - параметр цикла. [н_з_п_ц] - начальное значение параметра цикла. [к_з_п_ц] - конечное значение параметра цикла. [оператор] - произвольный оператор.

Параметр цикла должен быть переменой порядкового типа. Начальное и конечное значения параметра цикла должны быть того же типа, что и параметр цикла.

Работу оператора рассмотрим на его алгоритме:

На первом шаге значение параметра цикла принимает [н_з_п_ц], затем осуществляется проверка параметр цикла меньше или равен [к_з_п_ц]. Это условие является условием продолжения цикла. Если выполнено, то цикл продолжает свою работу и выполняется [оператор], после чего параметр цикла увеличивается (уменьшается) на единицу. Затем с новым значением параметр цикла, проверяется условие продолжения цикла. Если оно выполняется, то действия повторяются. Если условие не выполняется, то цикл прекращает свою работу.

Оператор For существенно отличается от аналогичных операторов в других языках программирования. Отличия следующие:

  • телом оператора For. Оператор может не выполниться ни разу, поскольку проверка условия продолжения цикла выполняется до тела цикла;
  • шаг изменения параметра цикла постоянный и равен 1;
  • тело цикла в операторе For представлено одним оператором. В том случае, если действие тела цикла требует более одного простого оператора, то эти операторы необходимо превратить в один составной оператор посредством операторных скобок (BEGIN-END);
  • Параметр цикла может быть только переменой порядкового типа.

Пример использования оператора FOR: составить таблицу перевода рублей в доллары.

Оператор WHILE (оператор цикла с предусловием)

Формат: WHILE [условие] Do [оператор];

WHILE, Do - служебные слова. [условие] - выражение логического типа. [оператор] - обыкновенный оператор.

;

Оператор While работает следующим образом: вначале работы проверяется результат логического условия. Если результат истина, то выполняется оператор, после которого осуществляется возврат на проверку условия с новым значением параметров в логическом выражении условия. Если результат ложь, то осуществляется завершение цикла.

При работе с While надо обратить внимание на его свойства:

  • условия, использованные в While, являются условием продолжения цикла;
  • в теле цикла всегда происходит изменение значения параметра входящего в выражение условия;
  • цикл While может, не выполнится ни разу, поскольку проверка условия в продолжение цикла выполняется до тела цикла.

Оператор REPEAT (оператор цикла с постусловием)

Формат: REPEAT [тело_цикла]; UNTIL [условие];

Оператор REPEAT работает следующим образом: сначала выполняются операторы тела цикла, после чего результат проверяется логического условия. Если результат ложь, то осуществляется возврат к выполнению операторов очередного тела цикла. Если результат истина, то оператор завершает работу.

Оператор Repeat имеет следующие особенности:

  • в Repeat проверяется условие завершения цикла и если условие выполняется, то цикл прекращает работу;
  • тело цикла всегда выполняется хотя бы один раз;
  • параметр для проверки условия изменяется в теле цикла;
  • операторы тела цикла не надо заключать в операторские скобки (BEGIN-END), при этом роль операторных скобок выполняют Repeat и Until.

Вычислить y=sin(x), где xn=10, xk=100, шаг равен 10.

Операторы цикла заставляют выполнять входящие в их состав операторы

несколько раз.

В Паскале существует три вида операторов цикла: оператор цикла с параметром, оператор цикла с предусловием, оператор цикла с постусловием.

Оператор цикла с параметром

Формат оператора цикла с параметром:

for V:=E1 to E2 do S

где V - переменная порядкоавого типа, Е1, Е2 - выражения того же типа, S - оператор, называемый телом цикла. Выражения Е1 и Е2 вычисляются один раз при входе в цикл. Параметр V принимает сначала значение Е1 затем непос редственно следующее за ним (SUCC(V)) и т.д. до достижения Е2. При каждом значении V выполняется оператор S. Если в теле цикла необходимо выполнить несколько операторов, то их объединяют в один с помощью составного оператора. Если конечное значение Е2 меньше начального Е1, то оператор S не выполняется ни разу.

Оператор цикла с параметром применяется также в следующем виде:

for V:=Е1 downto E2 do S

В отличии от первого случая V изменяется от Е1 до Е2, переходя от V к pred(V).

Отметим, что если V, Е1, Е2 типа INTEGER, то в первом случае это цикл с шагом +1, а во втором с шагом -1.

Оператор цикла с предусловием

Формат оператора цикла с предусловием:

где B - логическое выражение, S - оператор. Оператор S будет выполняться пока условие B будет истинно. Выполнение оператора цикла завершится когда выражение B впервые примет значение false.

Оператор цикла с постусловием

Формат оператора цикла с постусловием:

repeat S until B

где B - логическое выражение, S - оператор. Оператор S выполняется до тех пор, пока B не станет истинным. Оператор REPEAT выполняется по крайней мере один раз, так как проверка истинности условия B осуществляется после выполнения оператора S.

Служебные слова REPEAT и UNTIL уже играют роль скобок, поэтому операторные скобки BEGIN и END являются необязательными.

Примеры программ

В качестве примера использования операторов цикла рассмотрим программу вычисления факториала.

Программа 2.1.1. Цикл с параметром (шаг +1)

PROGRAM FACTORIAL1;

VAR I,N:INTEGER;

WRITE("ВВЕДИТЕ N");

READLN(N); F:=1;

FOR I:=1 TO N DO F:=F*I;

Программа 2.1.2. Цикл с параметром (шаг -1)

PROGRAM FACTORIAL2;

VAR I,N:INTEGER;

WRITE("ВВЕДИТЕ N");

READLN(N); F:=1;

FOR I:=N DOWNTO 1 DO F:=F*I;

WRITELN ("ФАКТОРИАЛ ОТ ",N," РАВЕН ",F)

Программа 2.2. Цикл с предусловием

PROGRAM FACTORIAL3;

VAR I,N:INTEGER;

WRITE("ВВЕДИТЕ N");

READLN(N); F:=1; I:=1;

WHILE I<=N DO

WRITELN ("ФАКТОРИАЛ ОТ ",N," РАВЕН ",F)

Основа программирования - циклы, например, for. Pascal. Как и любой компьютерный язык, он также содержит такие конструкции в своём синтаксисе.

Назначение циклических операторов

Типичная задача - заставить компьютер выполнять одно и то же действие несколько раз. Вот здесь и спасают конструкции, позволяющие организовать повторение кода. Итак, цикл в программировании - это многократно исполняемое действие, организуемое с помощью средств языка.

Язык программирования Pascal включает несколько таких конструкций:

  • for - повтор с параметром;
  • while - повтор с предусловием;
  • repeat ... until - повтор с постусловием.

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

Структура

Чтобы записать конструкцию повтора с параметром, нужно набрать следующий код:

FOR {a} := {b} TO {c} DO {d}.

В примере зарезервированные слова языка для удобства написаны заглавными буквами, на практике можно использовать строчное начертание. Используемые переменные и операторы приведены в фигурных скобках. Они означают:

  • { a} - переменная любого счётного типа, чаще всего INTEGER;
  • { b}, { c} - выражения счётного типа, такого же, как и { a} ;
  • { d} - произвольный оператор/операторы языка, называемые также телом цикла.

Отрабатывая конструкцию for , Pascal рассчитывает значение { b} , присваивает { a} := { c} , после чего запускается повтор действий:

  • проверка условия { b} <= { c} , при выполнении которого цикл останавливает свою работу;
  • запуск оператора {d} ;
  • увеличение значения {a} на единицу, то есть { a} := { a} + 1 .

Поскольку количество повторений внутри тела for известно, данную конструкцию относят к детерминированным циклам.

Пример

Чтобы понять, как будет выполняться for , далее, приведён пример, кода на языке паскаль для «чайников».

  • s:= 0;
  • for a:= 1 to 5 do
  • begin
  • s:= s + a;
  • end;
  • writeln(s);

Разбираясь в написанных инструкциях, можно записать значения в каждой итерации:

  • 1-я итерация: a = 1; s = 1 ;
  • 2-я итерация: a = 2; s = 3 ;
  • 3-я итерация: a = 3; s = 6 ;
  • 4-я итерация: a = 4; s = 10 ;
  • 5-я итерация: a = 5; s = 15 .

В итоге пользователь увидит на экране число «15» - сумму чисел от 1 до 5.

Чтобы сделать первую программу более универсальной, следует заменить числа 1 и 5 переменными.

Частые ошибки

При использовании цикла for , Pascal требует внимательного отношения к значениям { a}, { b}, { c} . Если не выполнять правила написания программ, компилятор сообщит об ошибке. Таких правил пять.

  1. Счётчик (параметр цикла) { a} задаётся целым числом.
  2. Значения { b} и { c} также должны иметь целочисленный тип. Например, нужно просчитать значения угла, заданного в радианах от 0 до p. Но следующая запись кода будет неверной for a:= 0 to pi do. Решение - использовать функции округления trunc () или round (). Первая отбрасывает дробную часть вещественного числа, вторая - округляет его до ближайшего целого.
  3. Если пользователь ошибся и указал {b} < {c} , оператор {d} ни разу не отработает.
  4. После выполнения цикла счётчик { a} может иметь любое значение. Хотя это противоречит логике, но на практике { a} <> { c} . Вывод: не рекомендуется обращаться к { a} после выполнения конструкции for .
  5. В теле цикла (то есть после слова do ) не рекомендуется использовать какие-либо операторы, изменяющие значения параметра { a} . Следование данному правилу ошибки не вызовет, но будет нарушена логика программы.

Следующее правило является общепринятым и соответствует «хорошему тону» в программировании: чтобы было удобно работать с кодом, необходимо записывать операторы тела цикла не с первой колонки. Например, делая 2-3 пробела слева или используя клавишу Tab.

Данное предписание применимо не только к языку паскаль. Для «чайников» оно позволяет быстро найти и исправить ошибку в инструкциях.

Типичные задачи

Допустим, необходимо выполнить вида f(x) = 3* x + 15 , то есть получить таблицу из M значений функций в диапазоне [x 1 ; x 2 ], где x 1 и x 2 - минимальное и максимальные значения аргумента. Решать эту и подобные задачи помогает конструкция for . Pascal рекомендует записать программный код следующим способом:

  • for a:= 1 to M do
  • begin
  • x:= x1+(x2-x1)*(a-1)/(M-1);
  • f:= 3*x + 15;
  • writeln (x, ‘ ’, f);
  • end.

Поскольку шаг изменения x не задан, значение аргумента рассчитывается в ходе программы при каждой итерации с помощью формулы: x:= x1+(x2- x1)*(a-1)/(M-1).

Цикл в цикле

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

  • FOR {a} := {b} TO {c} DO
  • FOR {a1} := {b1} TO {c1} DO

Чтобы конструкция работала верно, необходимо соблюдать условие: счётчики в каждом цикле должны быть разные. Иначе внутренний цикл будет менять значение параметра внешнего цикла, что приведёт к логическим ошибкам.

Очень часто возникает необходимость выполнить один и тот же оператор (или группу операторов) несколько раз. Для этого в языке Pascal предусмотрены операторы циклов.

1. Оператор цикла с предусловием.

Форма записи: while <условие> do <оператор>;

Здесь while (пока), do {делать) - зарезервированные слова.

В качестве оператора может быть любой простой или составной оператор. Здесь <оператор> выполняется только в том случае и до тех пор, пока истинно <условие>, которое проверяется каждый раз после выполнения оператора. Если с самого начала условие имеет значение false , оператор цикла не выполнится ни разу.

Блок-схема алгоритма работы такого оператора приведена на рис. 1.

Рис. 1. Оператор цикла с предусловием

Пример

I способ

. Вычисление факториала числа п (т.е. произведения 1 2 ... п ):

Program Fact_1;

Const n=5;

Var i, fact:integer;

Begin

i:=1; Fact:=1;

while i <=n do {заголовок цикла}

begin {начало цикла}

fact:= fact*i;

i:= i + 1

end; {конец цикла}

WriteLn("факториал", n, " = ",Fact:10)

End .

2. Оператор цикла с постусловием. Блок-схема алгоритма работы Оператора приведена на рис.2.

Форма записи:

Repeat

<оператор1>; <оператор2>;

Until <условие>;

Здесь Repeat {повторять до тех пор), Until (пока не будет выполнено условие) - зарезервированные слова.

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

Пример:

II способ

. Вычисление факториала числа п (т.е. произведения 1 2 ... п ):

Program Fact_2;

Const n=5;

Var i, fact:integer;

Begin

i:=1; Fact:=1;

Repeat

begin { начало цикла }

fact:= fact*i;

i:= i + 1

end; { конец тела цикла }

Until i >n; { условие }

WriteLn(‘ Факториал ", n, " = ",Fact:10)

End .

Здесь I – это счетчик повторов, который необходимо изменять вручную в цикле.

3. Оператор цикла с параметром.

Этот цикл позволяет повторять действия заведомо известное количество раз.

Счетчик – это переменная, которая считает количество повторов цикла. В таком цикле происходит автоматическое увеличение показателя счетчика ровно на 1.

Форма записи:

FOR счетчик= нач_значение TO конечное_значение DO

BEGIN

. . . .

END ;

Если необходимо, чтобы параметр уменьшался на 1, то исполь зуют слово Downto (начальное значение больше конечного значения).

Пример:

III способ

Вычисление факториала числа п (т.е. произведения 1 2 ... п ):

Program Fact_3;

Const n=5;

Var i, fact:integer;

Begin

Fact:=1;

for i:=1 to n do

begin { начало цикла }

fact:= fact*i;

end; { конец цикла }

WriteLn (" Факториал ", n, " = ",Fact:10)

End.

В качестве оператора можно использовать любой простой или со ставной оператор.

При использовании этого оператора цикла нужно помнить следующие правила:

1) в качестве параметра можно использовать простую переменную, описанную в этом же блоке;

2) параметр должен иметь дискретный тип;

3) начальное и конечное значения должны иметь тот же тип, что и параметр;

4)в теле цикла (операторе) явное изменение значения параметра (например, оператором присваивания) может привести к бесконечному циклу;

5) нельзя в теле цикла изменить начальное и конечное значения па раметра, если они заданы переменными;

6) после завершения работы цикла значение параметра становится равным конечному значению параметра, если цикл не был прерван оператором перехода.

САМОСТОЯТЕЛЬНО

1. Напишите программу, которая выводит на экран в зонном формате числа:

7 49

5 25

3 9

1 1

2. Решить задачу тремя способами (с помощью разных видов цикла):

Через сколько лет L величина вклада достигнет желаемой суммы S (руб.), при начальном вкладе V (руб.), если ежегодный процент, гарантированный банком, составляет 10% от величины вклада.

Исполнить алгоритм при S = 100000 руб., V = 10000 руб.



error: Контент защищен !!