Все циклы оператора языка паскаль

Все циклы оператора языка паскаль thumbnail

При решении задач может возникнуть необходимость повторить одни и те же действия несколько или множество раз. В программировании блоки кода, которые требуется повторять не единожды, оборачиваются в специальные конструкции – циклы. У циклов выделяют заголовок и тело. Заголовок определяет, до каких пор или сколько раз тело цикла будет выполняться. Тело содержит выражения, которые выполняются, если в заголовке цикла выражение вернуло логическую истину (True, не ноль). После того как достигнута последняя инструкция тела, поток выполнения снова возвращается к заголовку цикла. Снова проверяется условие выполнения цикла. В зависимости от результата тело цикла либо повторяется, либо поток выполнения переходит к следующему выражению после всего цикла.

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

Блок схемы циклов

Цикл for

Часто цикл for называют циклом со счетчиком. Этот цикл используется, когда число повторений не связано с тем, что происходит в теле цикла. Т.е. количество повторений может быть вычислено заранее (хотя оно не вычисляется).

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

Цикл for существует в двух формах:

for счетчик:=значение to конечное_значение do тело_цикла; for счетчик:=значение downto конечное_значение do тело_цикла;

Счетчик – это переменная любого из перечисляемых типов (целого, булевого, символьного, диапазонного, перечисления). Начальные и конечные значения могут быть представлены не только значениями, но и выражениями, возвращающими совместимые с типом счетчика типы данных. Если между начальным и конечным выражением указано служебное слово to, то на каждом шаге цикла значение параметра будет увеличиваться на единицу. Если же указано downto, то значение параметра будет уменьшаться на единицу.

Количество итераций цикла for известно именно до его выполнения, но не до выполнения всей программы. Так в примере ниже, количество выполнений цикла определяется пользователем. Значение присваивается переменной, а затем используется в заголовке цикла. Но когда оно используется, циклу уже точно известно, сколько раз надо выполниться.

var i, n: integer; begin write (‘Количество знаков: ‘); readln (n); for i := 1 to n do write (‘(*) ‘); readln end.

Цикл while

Цикл while является циклом с предусловием. В заголовке цикла находится логическое выражение. Если оно возвращает true, то тело цикла выполняется, если false – то нет.

Когда тело цикла было выполнено, то ход программы снова возвращается в заголовок цикла. Условие выполнения тела снова проверяется (находится значение логического выражения). Тело цикла выполнится столько раз, сколько раз логическое выражение вернет true. Поэтому очень важно в теле цикла предусмотреть изменение переменной, фигурирующей в заголовке цикла, таким образом, чтобы когда-нибудь обязательно наступала ситуация false. Иначе произойдет так называемое зацикливание, одна из самых неприятных ошибок в программировании.

var i, n: integer; begin write (‘Количество знаков: ‘); readln (n); i := 1; while i <= n do begin write (‘(*) ‘); i := i + 1 end; readln end.

Цикл repeat

Цикл while может не выполниться ни разу, если логическое выражение в заголовке сразу вернуло false. Однако такая ситуация не всегда может быть приемлемой. Бывает, что тело цикла должно выполниться хотя бы один раз, не зависимо оттого, что вернет логическое выражение. В таком случае используется цикл repeat – цикл с постусловием.

В цикле repeat логическое выражение стоит после тела цикла. Причем, в отличие от цикла while, здесь всё наоборот: в случае true происходит выход из цикла, в случае false – его повторение.

var i, n: integer; begin write (‘Количество знаков: ‘); readln (n); i := 1; repeat write (‘(*) ‘); i := i + 1 until i > n; readln end.

В примере, даже если n будет равно 0, одна звездочка все равно будет напечатана.

Источник

Операторы цикла задают повторное выполнение определенных операторов.

Если число повторений заранее известно, то подходящей конструкцией является оператор for. В противном случае следует использовать операторы while или repeat.

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

В операторе цикла repeat выражение, которое управляет повторным выполнением последовательности операторов, содержится внутри оператора repeat.

REPEAT Внутренний оператор; UNTIL логическое выражение;

Результатом выражения должен быть результат булевского типа.

Операторы, заключенные между ключевыми словами repeat и until, выполняются последовательно до тех пор, пока результат выражения не примет значения True. Последовательность операторов выполняется по крайней мере один раз, поскольку вычисление выражения производится после каждого выполнения последовательности операторов.

Приведем примеры оператора repeat:

1)

repeat K:=I mod J; I:=J; J:=K; until J=O;

2)

repeat Write (‘введите значение (0..9):’); Readln (I); until (I >=0) and (I <=9); Операторы цикла с предварительным условием (WHILE)

Оператор цикла while содержит в себе выражение, которое управляет повторным выполнением оператора (который может быть составным оператором).

WHILE выражение DO BEGIN Внутренний оператор; END;

Выражение, с помощью которого производится управление повторением оператора, должно иметь булевский тип. Вычисление его производится до того, как внутренний оператор будет выполнен. Внутренний оператор выполняется повторно до тех пор, пока выражение принимает значение True. Если выражение с самого начала принимает значение False, то оператор, содержащийся внутри оператора цикла while, не выполняется ни разу.

Читайте также:  Документальные циклы на канале звезда

Примерами оператора цикла while могут служить:

а)

while Data[I] <> X do I:=I + 1;

б)

while I > 0 do begin if Odd(I) then Z:=Z * X; I:=I div 2; X:=Sqr(X); end;

в)

while not Eof(InFile) do begin Readln (InFile, Line); Process (Line); end;

Операторы цикла с параметром (FOR)

Оператор цикла for вызывает повторяющееся выполнение оператора (который может быть составным оператором), пока управляющей переменной присваивается возрастающая последовательность значений.

FOR управляющая переменная:=исходное значение TO конечное значение DO оператор

Если управляющая переменная пробегает значения от большего значения к меньшему, то форма записи имеет вид:

FOR управляющая переменная:=исходное значение DOWNTO конечное значение DO оператор

В качестве управляющей переменной должен использоваться идентификатор переменной, который обозначает переменную, объявленную локальной в блоке, в котором содержится оператор for. Управляющая переменная должна иметь порядковый тип. Начальное и конечное значения должны иметь тип, совместимый по присваиванию с этим порядковым типом.

Когда начинает выполняться оператор for, начальное и конечное значения определяются один раз, и эти значения сохраняются на протяжении всего выполнения оператора for.

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

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

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

Если принять во внимание эти ограничения, то оператор

for V:=E1 to E2 do Body;

эквивалентен оператору

begin Temp1:=E1; Temp2:=E2; if Temp1 <=Temp2 then begin V:=Temp1; Body; while V <> Temp2 do begin V:=Succ(V); Body; end; end; end;

где Temp1 и Temp2 – вспомогательные переменные, тип которых совпадает с основным типом переменной V и которые не встречаются в другом месте программы.

Приведем примеры оператора цикла for:

1)

for I:=2 to 63 do if Data[ I ] > Max then Max:=Data[ I ];

2)

for I:=1 to 10 do for J:=1 to 10 do begin X:=0; for K:=1 to 10 do X:=X + Mat1[I, K] * Mat2[K, J]; Mat [I, J]:=X; end;

Источник

Циклы

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

Если вы читали этот урок, то знаете, что существует три вида алгоритмов: линейный, разветвляющийся и циклический. Мы с вами уже знаем, как реализовывать линейные и разветвляющиеся алгоритмы на Паскале. Приступим к изучению последнего типа алгоритмов.

В языке 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. Изменять значение счетчика внутри тела нельзя! Вот что выводит компилятор:

for

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

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. Даны два целых числа A и B (A < 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 включительно.

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

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, тогда число – не степень тройки. Для того чтобы решить эту задачу, требуется знать, что такое div и mod, и как работают логические выражения.

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

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

Источник

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

  • оператор цикла с предварительным условием;
  • оператор цикла с последующим условием;
  • оператор цикла с параметром.
Читайте также:  Миф остановка цикла for

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

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

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

Оператор цикла с предварительным условием While имеет следующий формат:

While <выражение> do <оператор>;

где

While (пока), do (делать) – зарезервированные слова;

выражение- выражение логического типа;

оператор- произвольный оператор.

Оператор цикла действует следующим образом. Предварительно, до начала цикла, (отсюда и название «Оператор цикла с предварительным условием») проверяется логическое выражение. Если выражение имеет значение True(истина), то выполняются операторы циклической части (тело цикла), после чего снова проверяется логическое выражение. Пока выражение имеет значение True(истина) выполняются операторы циклической части. Как только оно становиться ложным – False, происходит выход из цикла. Если с самого начала значение логического выражения ложно (False), то операторы циклической части не выполняются ни разу.

Блок-схема оператора цикла с предварительным условием:

Оператор цикла с предварительным условием (While)

ЗАДАЧА 1. Вычислить сумму целых чисел от 0 до 99.

Program a10; var i:integer; {количество чисел} s:integer; {сумма чисел} begin i:=1; s:=0; while i&lt99&gt do begin s:=s+i; i:=i+1; end; {после выхода из цикла i = 99} i:=i-1; {поэтому уменьшаем на 1} writeln(‘Cумма’,i:4, ‘ чисел равна:’, s:6); end.

Результаты работы программы:

Cумма 98 чисел равна: 4851

ЗАДАЧА 2. Вычислить сумму нечетных целых чисел от 0 до 99.

Program a11; var i:integer; {нечётное число} s:integer; {сумма чисел} begin i:=1; s:=0; while i&lt99&gt do begin s:=s+i; i:=i+2; end; i:=i-2; writeln(‘Сумма нечетных чисел равна:’, s:6); end.

Результаты работы программы:

Cумма нечетных чисел равна: 2401

Пример.

program example1; var ch:char; begin Write(‘Продолжить вычисления (Y/N)?’); ch:=’ ‘; while(UpCase(ch)<>’Y’) and (UpCase(ch)<>’N’)do ch:=Readkey; end.

Примечание:

  • Функция UpCase () преобразует символ в верхний регистр.
  • Функция Readkey () считывает символ с клавиатуры.

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

Формат оператора:

Repeat

операторы циклической

части программы

Until логическое выражение

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

Блок-схема оператора цикла с последующим условием:

Блок-схема оператора цикла с последующим условием

Оператор цикла с последующим условием Repeat работает следующим образом.

Операторы циклической части повторяются, по крайней мере, один раз до тех пор, пока значение логического выражения ложно (False). Условием прекращения циклических вычислений является истинное (True) значение логического выражения.

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

ЗАДАЧА 3. Вычислить сумму нечетных целых чисел от 0 до 99 (см. Задачу 2).

Program a12; Var i:integer; {нечётное число} s:integer; {сумма чисел} Begin i:=1; s:=0; Repeat s:=s+i; i:=i+2; Until i=99; i:=i-2; writeln(‘сумма нечетных чисел’,’ равна:’, s:6); End.

Результаты работы программы:

Сумма нечетных чисел равна: 2401

ЗАДАЧА 4. Написать программу, которая выводит таблицу квадратов первых пяти целых положительных нечетных чисел

Program a13; var x:integer; {число} y:integer; {квадрат числа} begin writeln(‘Таблица квадратов’); writeln(‘==================’); writeln(‘Число квадрат’); writeln(‘——————-‘); x:=1; repeat y:=x*x; writeln(x:4,y:6); x:=x+2; until x=11; writeln(‘——————-‘); End.

Результаты работы программы:

Таблица квадратов

==================

Число квадрат

——————

1 1

3 9

5 25

7 49

9 81

——————

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

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

Блок-схема оператора цикла For

Формат оператора

For i:=m1 to m2 Do

begin

операторы циклической

части программы

end;

здесь For (для), to (до), Do (делать) – зарезервированные слова языка;

i – параметр цикла;

m1, m2 – начальное и конечное значения параметра цикла, могут задаваться выражениями, за исключением типа Real.

В операторе цикла For начальное m1 и конечное значение m2 параметра цикла i должны быть заданы. Параметр цикла i увеличивается/уменьшается автоматически.

Если i=1 и m1>m2, то циклическая часть не выполняется ни разу.

После естественного завершения работы оператора цикла (выход из цикла) значение параметра цикла i не определено.

Если параметр цикла увеличивается, то его шаг равен +1.

Если параметр цикла должен уменьшаться, то в этом случае m1 должно быть больше m2, а вместо служебного слова TO необходимо поставить DOWNTO. Шаг уменьшения равен -1.

ЗАДАЧА 5. Напечатать все буквы латинского алфавита.

Programa14; var ch:char; begin writeln(‘Латинский алфавит:’); for ch:=’A’ to ‘Z’ do write(‘ ‘,ch); end.

Результаты работы программы:

Латинский алфавит:

ABCDEFGHIJKLMNOPQRSTUVWXYZ

ЗАДАЧА 6. Написать программу, которая выводит таблицу квадратов первых десяти целых положительных чисел.

program a15. var x:integer; {число} y:integer; {квадрат числа} i:integer; {параметр цикла} begin writeln(‘Таблица квадратов’); writeln(‘=================’); writeln(‘Число квадрат’); writeln(‘—————–‘); x:=1; for i:= 1 to 10 do begin y:=x*x; writeln(x:4,y:6); x:=x+1; {лучше так!} {y:=i*i;} {writeln(i:4,y:6);} end; writeln(‘—————–‘); end.

Результат работы программы:

Таблица квадратов

==================

Число квадрат

——————

1 1

2 4

3 9

4 16

5 25

6 36

7 49

8 64

9 81

10 100

——————

Источник