1.1 Алгоритмическая конструкция «Цикл»
Зачастую в задаче нужно повторять одни и те же действия много раз. Рассмотрим следующий пример: вывести на экран квадраты чисел от `1` до `100`.
Очевидно, что для решения этой задачи нам придётся `100` раз выполнять команду вывода соответствующего числа на экран. Писать `100` операторов вывода как-то не хочется (слишком трудоёмко), поэтому будем знакомиться с алгоритмической конструкцией, которая называется «цикл».
Циклом
называется повторение фрагмента алгоритма несколько раз с возвратом в более раннюю точку исполнения алгоритма. Повторяемый при этом фрагмент алгоритма называется телом цикла.
Очевидно, что если возврат в более раннюю точку алгоритма происходит абсолютно всегда, то алгоритм никогда не доходит до своего завершения (выполняется бесконечно долго). Для предотвращения бесконечного повторения нужно поставить точку ветвления: в одной из веток будет возврат, а в другой — выход из цикла и дальнейшее продвижение по алгоритму.
#4. Циклы For, While, repeat на PascalABC.net
В зависимости от положения точки ветвления выделяются циклы с предусловием (точка ветвления располагается перед телом цикла) и с постусловием (точка ветвления располагается после тела цикла).
1.2. Оператор while
В языке программирования есть несколько операторов цикла, реализующих как конструкцию с предусловием, так и конструкцию с постусловием. Познакомимся с ними.
Первый оператор цикла называется While и реализует алгоритмическую конструкцию с предусловием. В общем виде он записывается следующим образом:
while условие do оператор
Слова while и do являются служебными зарезервированными словами языка. Под условием (аналогично оператору if ) понимается выражение, результат вычисления которого имеет тип boolean . Работает этот оператор следующим образом. Сначала вычисляется условие. Если в результате получилось true , то мы заходим в цикл, то есть выполняем тело цикла и возвращаемся вновь к вычислению условия.
Если же получилось false , то происходит переход к следующему оператору в программы, и входа в цикл не будет. Фактически оператор while является многократным применением оператора if с пустой веткой else . Аналогично оператору if , тело цикла должно состоять из `1` оператора. Если нужно исполнить несколько, то следует использовать операторные скобки ( begin end ).
Возможна ситуация, когда цикл будет выполняться бесконечное количество раз (зациклится). Например, while 2*2=4 do… Что написать после do, совершенно не важно, важно, что оно будет выполняться, пока 2*2=4 , а это всегда так, и никогда не изменится. Значит, чтобы избегать зацикливания, параметры условия должны быть переменными, например while x*x=4 do … Хотя это тоже не гарантирует отсутствие зацикливания. Поэтому при написании программ нужно всегда внимательно следить за тем, какие условия мы пишем в операторе цикла, чтобы не случилось ситуации зацикливания.
Также обратите внимание, что поскольку условие проверяется до входа в цикл, возможна ситуация, что при первой же проверке получится значение false и, соответственно, в цикл мы вообще не зайдём.
Паскаль с нуля [ч6]. Циклы. While, repeat-until, for.
1.3. Примеры задач
Рассмотрим несколько примеров задач на оператор цикла.
Дано целое число, не меньшее `2`. Выведите его наименьший натуральный делитель, отличный от `1`.
Для решения этой задачи нам необходимо перебирать натуральные числа, начиная с двух и проверять каждое из них, не является ли оно делителем исходного числа. Процесс завершается, когда делитель найден. Очевидно, что процесс завершится всегда, поскольку в худшем случае число разделится само на себя. Приведём код программы.
var i,n:integer;
begin
while n mod i <> 0 do
end;
end.
В первый день спортсмен пробежал `x` километров, а затем он каждый день увеличивал пробег на `10%` от предыдущего значения. По данному числу `y` определите номер дня, на который пробег спортсмена составит не менее `y` километров. Программа получает на вход действительные числа `x` и `y`. Программа должна вывести одно натуральное число.
В этой задаче нам нужно реализовать постепенное увеличение пробега. То есть, на каждом шаге цикла мы будем сохранять значение пробега в соответствующий день в одной переменной, а номер этого дня – в другой. Завершение, когда значение первой переменной станет не меньшим чем `y`. Приведём код программы. Все переменные, отвечающие за километры, имеют тип real (из условия).
var x,y:real; i:integer;
begin
Источник: zftsh.online
Пример программы с использованием оператора repeat
Примером действия оператора repeat может служить программа DemoRepeat, которая вводит и суммирует любое количество целочисленных значений. Если введено значение 999, то на экран выводится результат суммирования.
Writeln(‘Сумма введенных чисел= ‘,Sum);
В данном примере в разделе описания переменных описана переменная Х целочисленного типа integer и Sum вещественного типа real.
В начале выполнения программы обнуляется значение суммы чисел. Затем зарезервированным словом repeat объявляется цикл, после чего следуют операторы тела цикла, которые выводят на экран запрос ‘Значение Х= ‘, считывают введенное с клавиатуры значение X.
Оператор if проверяет его на неравенство числу 999 и, если оно не равно 999, увеличивает значение суммы Sum на значение числа X. В конце цикла оператор until X = 999 проверяет условие окончания цикла. Если значение выражения Х = 999 истинно, то цикл завершится, а управление в программе будет передано на оператор, находящийся за словом until, т. е. первый оператор за границей цикла repeat. Это вызов процедуры Writeln, которая выведет сообщение ‘Сумма введенных чисел равна’ и напечатает значение переменной Sum.
Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:
Источник: studopedia.ru
Написание программы на Паскале с использованием
Цель работы: формирование знаний и умений по работе с операторами языка. Приобретение навыков написания программ с использованием операторов повтора.
Краткие теоретические сведения
Операторы повтора
Если в программе возникает необходимость неоднократно выполнить некоторые операторы, то используются операторы повтора (цикла). В языке Паскаль различают три вида операторов цикла: while, repeat, for. Они используются для организации циклов различных типов. Выражение, управляющее повторениями, должно иметь булевский тип.
Если число повторений оператора (составного оператора) заранее неизвестно, а задано лишь условие его повторения (или окончания), используются операторы while, repeat. Оператор for используется, если число повторений заранее известно.
Оператор повтора for
В случаях, когда число повторений может быть заранее известно, для организации циклической обработки информации применяется оператор повтора for. Часто этот оператор повтора называют оператором цикла с параметром, так как число повторений задается переменной, называемой параметром цикла, или управляющей переменной. Оператор повтора for состоит из заголовка и тела цикла.
Он может быть представлен в двух форматах:
где Sl и S2 — выражения, определяющие соответственно начальное и конечное значения параметра цикла;
for. do — заголовок цикла;
Тело цикла может быть простым или составным оператором. Оператор for обеспечивает выполнение тела цикла до тех пор, пока не будут перебраны все значения параметра цикла от начального до конечного.
• диапазон изменения значений управляющей переменной (параметра цикла) и одновременно число повторений оператора, содержащегося в теле цикла;
• направление изменения значения параметра цикла (возрастание — to или убывание— downto).
Пример использования оператора for:
for I:= 1 to 100 do Read(M[I]);
for I:= 100 downto 1 do Write(M[I]);
При первом обращении к оператору for вначале вычисляются выражения S1, S2 и осуществляется присваивание := S1.
После этого циклически повторяются следующие действия:
3. Значение управляющей переменной изменяется на +1 (в случае to) или –1 (в случае downto).
Шаг изменения управляющей переменной — единица.
Ограничения использования параметра цикла в операторе for. На использование управляющей переменной (параметра цикла) в цикле for налагаются следующие ограничения:
1. В качестве параметра должна использоваться простая переменная, описанная в текущем блоке.
2. Управляющая переменная должна иметь дискретный тип.
3. Начальные и конечные значения диапазона должны иметь тип, совместимый с типом управляющей переменной. При этом допустим любой скалярный тип, кроме вещественного.
4. В теле цикла запрещается явное изменение значения управляющей переменной (например, оператором присваивания).
5. После завершения оператора значение управляющей переменной становится неопределенным, если только выполнение оператора не было прервано оператором
Примеры программ с использованием оператора for
Программа DemoFor1 выводит на экран таблицу перевода из градусов по шкале Цельсия(С) в градусы по Фаренгейту(Р) для значений от 15°С до 30°С с шагом 1 градус. Перевод осуществляется по формуле: F = С*1.8+32.
for I:= 15 to 30 do
Writeln(‘no Цельсию= ‘,I,’ по Фаренгейту= ‘, F:5:2)
В блоке описания переменных описаны параметр цикла I типа integer и переменная F — температура по Фаренгейту типа real. Переменная I, помимо функций управляющей переменной, является переменной, хранящей целочисленные значения температуры по шкале Цельсия. В начале выполнения программы на экран выводится надпись ‘ Температура ‘, а затем оператором повтора выводится таблица соотношения температуры в шкалах Цельсия и Фаренгейта. Печать таблицы выполняется оператором Writeln(‘По Цельсию= ‘,I,’ по Фаренгейту= ‘, F: 5:2).
Цикл выполняется следующим образом.
При первом обращении к оператору for вычисляются значения начального (15) конечного (30) параметров цикла, и управляющей переменной I присваивается начальное значение 15.
Затем циклически выполняется следующее:
1. Проверяется условие I
2. Если оно соблюдается, то выполняется составной оператор в теле цикла, т.е. рассчитывается значение выражения I* 1.8+32, затем оно присваивается переменной F, и на экран выводится сообщение: ‘По Цельсию= ‘, I, ‘ по Фаренгейту= ‘, F:5:2.
Если условие I не соблюдается, т. е. как только I станет > 30, оператор тела цикла не выполняется, а управление в программе передается за пределы оператора for, в нашем примере на оператор end. Программа завершает работу.
3. Значение параметра цикла I увеличивается на единицу, и управление передается в заголовок цикла for для проверки условия.
Далее цикл повторяется, начиная с пункта 1.
Вторым примером оператора цикла for может служить программа DemoFor2, которая печатает на экране символы американскою стандартного кода обмена информацией (ASCII) в порядке убывания кода.
Writeln(‘код символа = ‘,А, ‘ символ == ‘,Chr(A));
В данной программе применяется цикл for с убыванием значения управляющей переменной А (используется указание downto — убывание).
Оператор повтора Repeat
Оператор повтора repeat имеет две особенности:
1. Условие проверяется после очередного выполнения операторов тела цикла (очередной итерации) и таким образом гарантируется хотя бы однократное выполнение цикла.
2. Критерием прекращения цикла является равенство выражения константе True.
За это цикл repeat часто называют циклом с постусловием, или циклом «ДО», так как он прекращает выполняться, как только значение выражения условия, записанного после слова until, равно True (истина).
Оператор повтора repeat состоит из заголовка repeat, тела и условия окончания until.
Операторы, заключенные между словами repeat и until, являются телом цикла. Вначале выполняется тело цикла, затем проверяется условие выхода из цикла. Именно поэтому цикл, организованный с помощью оператора repeat, в любом случае выполнится хотя бы один раз. Если результат булевского выражения равен False, то тело цикла активизируется еще раз; если результат True, происходит выход из цикла.
При программировании операторов тела цикла следует обеспечить влияние, по крайней мере, одного из операторов тела цикла на значение условия, иначе цикл будет выполняться бесконечно.
Пример программы с использованием оператора repeat
Примером действия оператора repeat может служить программа DemoRepeat, которая вводит и суммирует любое количество целочисленных значений. Если введено значение 999, то на экран выводится результат суммирования.
Writeln(‘Сумма введенных чисел= ‘,Sum);
В данном примере в разделе описания переменных описана переменная Х целочисленного типа integer и Sum вещественного типа real.
В начале выполнения программы обнуляется значение суммы чисел. Затем зарезервированным словом repeat объявляется цикл, после чего следуют операторы тела цикла, которые выводят на экран запрос ‘Значение Х= ‘, считывают введенное с клавиатуры значение X.
Оператор if проверяет его на неравенство числу 999 и, если оно не равно 999, увеличивает значение суммы Sum на значение числа X. В конце цикла оператор until X = 999 проверяет условие окончания цикла. Если значение выражения Х = 999 истинно, то цикл завершится, а управление в программе будет передано на оператор, находящийся за словом until, т. е. первый оператор за границей цикла repeat. Это вызов процедуры Writeln, которая выведет сообщение ‘Сумма введенных чисел равна’ и напечатает значение переменной Sum.
Пример программы с использованием операторов присваивания, повтора и выбора
Operation, Ans: char;
case Operation of
Until (Ans=’N’) or (Ans=’n’);
В разделе описания переменных описаны переменные — операнды X, Y и результат арифметических операций Rezult вещественного типа, а также переменная Operation символьного типа, в которой хранится значение знака арифметической операции, и Ans- переменная символьного типа, которой присваивается значение «Y» или «N».
Процесс выполнения арифметических операций калькулятором организован с помощью оператора repeat и продолжается до тех пор, пока переменной Ans не будет присвоено значение ‘N’ или ‘п’.
В теле цикла сначала запрашиваются и считываются с клавиатуры значения операндов X и Y, затем запрашивается и считывается знак арифметической операции. Оператор выбора case по значению переменной Operation (селектор) выбирает знак операции и в зависимости от его значения выполняет арифметическую операцию. Например, если значение переменной Operation равно значению константы выбора ‘-‘, то выполняется оператор присваивания Rezult:= Х-Y и т. д. Если значение переменной Operation не равно ни одному значению константы выбора, то управление передается на оператор, стоящий за словом else, и на экран выводится сообщение ‘Ошибка ввода’. После этого на экран выводится запрос ‘Продолжить (Y/N)’ и с клавиатуры считывается значение переменной символьного типа Ans. Если значение выражения (Ans=’N’) or (Ans=’n’) будет False, то цикл повторится вновь, иначе цикл будет завершен и управление в программе будет передано на оператор end.
Порядок выполнения работы
1. Изучить теоретические сведения по теме: “Написание программы на Паскале с использованием операторов повтора (For, Repeat)”.
2. Получить индивидуальное задание у преподавателя и разработать программу в соответствии с поставленной задачей.
3. Показать работающую программу преподавателю.
4. Ответить на контрольные вопросы.
Контрольные вопросы
1. Операторы повтора. Общая характеристика.
2. Оператор повтора for. Форматы записи, описание работы цикла, ограничения использования параметра цикла.
3. Примеры использования оператора for. Различие to и downto.
4. Оператор повтора Repeat. Формат записи, особенности использования.
5. Примеры программ с использованием оператора repeat.
Лабораторная работа № 9
Источник: infopedia.su