Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 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; просмотров: 348; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.220 (0.006 с.) |