КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Отличия операторов repeat и whileОтличий три: · Компьютер выходит из цикла оператора repeat тогда, когда условие истинно, а из цикла оператора while - когда условие ложно. · while может ни разу не выполнить оператор, стоящий после do. repeat же хотя бы раз операторы, стоящие между repeat и until, выполнит. Так, фрагмент k:=8; repeat k:=1 until 3>2; WriteLn(k) напечатает 1. А фрагмент k:=8; while 2>3 do k:=1; WriteLn(k) напечатает 8. · При компиляции оператор while дает несколько более эффективную программу, чем оператор repeat.
Часто эти отличия для начинающих малосущественны, поэтому выбирайте оператор по вкусу. Мне, например, надоели паскалевские begin и end, поэтому я охотнее пользуюсь оператором repeat. Оператор цикла for Выполняя программу печати чисел 3 5 7 9, оператор repeat выполнил цикл 4 раза. То же самое сделал и оператор while. Однако, обычно, когда мы пишем операторы repeat и while, нам совсем неважно знать, сколько раз они выполнят цикл. Тем не менее, существует много задач, для решения которых цикл нужно выполнить именно определенное количество раз. В этом случае удобно использовать оператор цикла for. Задача: 200 раз напечатать слово ФУТБОЛ. Попробуем сначала решить задачу при помощи оператора goto. Начнем с такого фрагмента: metka: WriteLn('ФУТБОЛ'); Но здесь цикл будет повторяться бесконечно, а нам нужно только 200 раз. Мы уже видели, что для выхода из цикла оператор goto нужно включить в состав оператора if. Кроме этого нужна переменная, меняющая свое значение от одного выполнения цикла к следующему. Придумаем этой величине какое-нибудь имя, скажем i. Проще всего задачу решает такой фрагмент: i:=1; END. Здесь i вначале равно 1, но к каждому следующему выполнению цикла оно увеличивается на 1. В первый раз выполняя оператор if, компьютер проверяет условие 2<=200 и найдя его истинным, выполняет оператор goto metka. Во второй раз проверяется условие 3<=200 и т.д. В 199-й раз компьютер проверяет условие 200<=200 и найдя его истинным, выполняет оператор goto metka. В 200-й раз компьютер проверяет условие 201<=200 и найдя его ложным, выходит из цикла. В нашем фрагменте "полезную" работу выполняет только одна строка из четырех - WriteLn('ФУТБОЛ'). Остальные три строки заняты тем, что обеспечивают выполнение "полезной" строки ровно 200 раз. Нам пришлось организовать специальную переменную, значение которой в каждый момент выполнения программы говорит о том, в какой раз выполняется цикл. Переменная с таким свойством называется счетчиком циклов. А теперь запишем программу полностью, правда, несколько усложнив ее, так чтобы логика ее выполнения полностью соответствовала логике выполнения программы с оператором for, которую я привожу параллельно и поясняю немедленно.
Слово forчитается "фо", переводится "для". Слово to читается "ту", переводится "до". Слово doчитается "ду", переводится "делай". Конструкция for i:=1 to 200 do по-русски читается так: Для i, изменяющегося от 1 до 200, делай оператор, стоящий после слова do. Смысл повторения здесь такой же, как и в операторе while. Оператор, стоящий после do, тоже, конечно, может быть составным. Синтаксис оператора for: FOR имя := выражение1 TO выражение2 DO оператор Пример записи: for j:=a+b to2*s dok:=k+1. Пояснения к синтаксической схеме: имя - это имя произвольной переменной порядкового типа (см. 5.7 и 12.8), в частности целочисленной, называемой переменной цикла, выражение1 ивыражение2 - произвольные выражения порядкового типа, в частности - целого. Работа оператора for: Прежде всего вычисляется выражение1, и переменной цикла (пусть это будет i) присваивается его значение. Затем вычисляется выражение2 и сравнивается с i. Если i > выражения2, то оператор for завершает свою работу, так ничего и не сделав. В противном случае выполняется оператор, стоящий после do. После выполнения этого оператора значение i увеличивается на 1 и снова сравнивается с выражением2. Если i > выражения2, то оператор for завершает свою работу, иначе снова выполняется оператор, стоящий после do, снова i увеличивается на 1 и т.д. В нашем примере переменная i кроме того, что обеспечивает нам выход из цикла, никакой "полезной" работы не выполняет. Усложним же немного задачу. Пусть компьютер печатает такую информацию: 10 ФУТБОЛ 11 ФУТБОЛ 12 ФУТБОЛ . . . . . 200 ФУТБОЛ Вот программа: VAR i : Integer; Здесь после do стоит уже составной оператор. Можно ли удобно использовать оператор for для печати такой информации?: 100 ФУТБОЛ 99 ФУТБОЛ 98 ФУТБОЛ . . . . . 40 ФУТБОЛ Вполне, так как оператор for позволяет не только увеличивать, но и уменьшать переменную цикла. Однако, для этого нельзя писать for i:=100 to 40, а нужно писать for i:=100 downto 40. Читается downto - "'даунту", переводится буквально "вниз до". Соответственно, для выхода из цикла должно быть истинным не условие i > выражения2, а условие i < выражения2. Вот объединенный синтаксис оператора for: FOR имя := выражение1 TO DOWNTO выражение2 DO оператор
Вертикальная черта между двумя элементами конструкции «TOиDOWNTO» говорит о том, что в конструкции должен присутствовать один из этих элементов. Задание 42: Напечатать с помощью оператора for: Прямой счет: -5 -4 -3 -2 -1 0 1 2 3 4 5 Обратный счет: 5 4 3 2 1 0 -1 -2 -3 -4 -5 Конец счета
|