Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Условный оператор повторения
Исторически, в Паскале имеется еще одна форма условного оператора цикла, от- личающаяся от формы записи оператора while. Это отличие состоит, во-первых, в том, что проверка условия выполняется не в начале цикла, а в его конце (что гаран- тирует как минимум однократное выполнение тела цикла), а во-вторых, в том, что завершение цикла происходит, когда условное выражение равно не False, a True (эта особенность часто вызывает ошибки у начинающих программистов). Операторы 77 Repeat тело-циклa until условие; ВНИМАНИЕ В отличие от всех остальных операторов Паскаля при использова- нии оператора repeat тело цикла, состоящее из нескольких команд, заключать в логические скобки begin/end не требуется. Компилятор определяет границы тела цикла по ключевым словам repeat/until. С помощью данного оператора можно переписать программу вычисления факто- риала так: begin repeat ReadLn(N); WriteLnf Factorial (N)); until N = 0,- end. Условие завершения цикла изменилось на противоположное — теперь для его окон- чания требуется, чтобы значение выражения N = 0 стало равно True (то есть, чтобы значение переменной N стало равным нулю), а лишний оператор инициализации переменной N не нужен. Команда прерывания цикла Условный оператор цикла позволяет остановить выполнение тела цикла, только когда все операторы, входящие в него, выполнены и достигнута проверка условия окончания. Такой подход иногда неудобен, особенно если тело цикла представляет собой длинную последовательность операторов и необходимость завершения цикла выясняется в середине этой последовательности. Для немедленного завершения текущего оператора цикла можно использовать подпрограмму Break без парамет- ров (это подпрограмма, играющая роль оператора). Полезна данная команда и при использовании оператора for, например, когда в массиве с известными границами найдено нужное значение и дальнейшие вычисления выполнять не надо. Например, если в строке S требуется найти номер первого пробела, можно приме- нить следующие операторы: • N:= 0; for i:= 1 to Length(S) do if S[i] = ' ' then begin N:= i; Break; end; if N > 0 then 78 Урок 1. Язык Delphi (Objecl Pascal) и его использование В переменной N хранится номер подходящего символа (первоначально — 0). Б цикле выполняется проверка каждого символа строки, при обнаружении пробела проис-
ходит запоминание номера символа и прерывание выполнения тела цикла. Затем значение переменной N сравнивается с нулем, чтобы определить, был ли найден нужный символ. S ЗАМЕЧАНИЕ В системе Delphi 7 имеется стандартная функция Роз[), которая, получая в качестве параметров подстроку и проверяемую строку, возвращает номер вхождения подстроки в строку или ноль, если совпадения не найдено: Ров (' ', S) Команда ____________продолжения цикла В Паскале имеется команда, по своему действию противоположная команде пре- рывания цикла. Она позволяет немедленно продолжить выполнение цикла, про- пустив все оставшиеся операторы в теле цикла. Эта команда (подпрограмма без параметров, играющая роль оператора) записывается так: Continue,- С ее помощью предыдущий пример можно записать следующим образом: N:= 0; for i:= 1 to Length(S] do Begin if S[i] <> ' ' then Continue; N:= i; Break; end; if N > 0 then... При очередном выполнении тела цикла сначала произойдет проверка текущего символа на равенство пробелу, и если это не пробел, то выполнится команда про- должения цикла — все последующие операторы будут пропущены, а счетчик примет новое значение. Вложенные циклы При решении некоторых задач возникает потребность в организации вложенных циклов. Например, при анализе двумерного массива требуется выполнять цикл как по первому, так и по второму измерениям. В таких случаях используют вложен- ные циклы. Процедуры Break и Conti nue всегда воздействуют только иа ближайший оператор цикла, поэтому прекратить выполнение всех циклов с их помощью невоз- можно. Например, требуется написать программу, которая печатает все целые числа, сумма квадратов которых равна заданному числу. Проще всего сделать это с помощью двух вложенных циклов, которые последовательно перебирают все возможные Операторы 79 значения, а в теле внутреннего цикла проверяется, не равна ли сумма квадратов значений счетчиков заданной величине. program Projectl; {$APPTYPE CONSOLE} uses sysutils; var i,j,N: integer; Begin ReadLn(N|,- for i:= 1 to N dlv 2 do for j:= 1 to N div 2 do if i*i + j*j = N then WriteLn(i, ', ', j I; end. В каждом из циклов рассматривается диапазон значении от 3 до половины вели-
чины введенного числа (потому что сумма квадратов половин числа заведомо больше или равна этому числу). Можно найти дополнительные способы улучшить этот код, в частности, вынести вычисление произведения i*i из тела вложенного цикла, потому что это произведение не имеет смысла многократно вычислять во вложенном цикле, где оно всегда будет иметь одно и то же значение, а операция умножения для процессора достаточно дорогая (медленная).__
|
||||||
Последнее изменение этой страницы: 2017-02-21; просмотров: 248; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.119.160.85 (0.009 с.) |