Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Операторы циклов в Паскале. Структурные команды перехода.
Оператор цикла Б программировании постоянно возникают задачи, требующие для своего реше- ния многократного повторения одной и той же последовательности действий или однообразной обработки однородных объемов информации (массивов). Напри- мер, когда требуется определить сумму всех элементов массива, найти его элемент с максимальным значением, вычислить квадраты всех элементов и так далее. В Паскале имеется несколько операторов, позволяющих организовать подобную работу наглядно и эффективно. Операторы, предназначенные для многократного (циклического) выполнения заданной последовательности команд, называются операторами цикла. Они всегда имеют заголовок цикла, определяющий число повто- рений, и тело цикла — повторяемое действие. Оператор цикла записывается так: for переменная-счетчик:= выражение-1 to выражение-2 do повторяемое-действие; Переменная-счетчик должна быть объявлена перед логическим блоком, в котором этот оператор расположен, то есть если оператор цикла используется внутри под- программы, то в качестве счетчика должна выступать локальная переменная. ЗАМЕЧАНИЕ Это сделано с целью максимально оптимизировать быстродействие оператора цикла, ориентированного на многократные интенсивные вычисления. Переменные-счетчики представляют собой, как правило, быстрые регистры процессора, а не обычные ячейки оперативной памяти. Первоначально, перед первым выполнением тела цикла, счетчик получает значе- ние, равное результату вычисления, выражен ия-1. Переменная-счетчик должна обя- зательно относиться к одному из перечислимых типов. Выражение-2 определяет конечное значение, по достижении которого счетчиком тело цикла будет выпол- нено в последний раз. После очередного выполнения тела цикла счетчик принимает значение, следующее за текущим (точнее, это будет значение, равное SuccQ от текущего). Затем выпол- няется проверка, не превышено ли конечное значение выражения-2 (значения и начального, и конечного выражений вычисляются только один раз перед первым выполнением тела цикла). Если оно превышено, то работа оператора цикла закан- чивается. В противном случае тело цикла выполняется еще раз. Рассмотрим пример подпрограммы, вычисляющей факториал числа N. Для этого
требуется последовательно перемножить все числа от 1 до N. Наиболее компактно такие вычисления реализуются с помощью оператора цикла. function Factorialf N: integer ]: integer; var i, R: integer; begin if N <= 0 then begin Операторы 75 Result:= 0; Exit end; R:= 1; for i:= 1 to N do R:= R * i; Result:= R; end; Счетчик i будет последовательно принимать значения от 1 до значения параметра N, а s переменной R будет храниться промежуточное значение результата. Обратите внимание на условный оператор, который проверяет корректность значения параметра (оно должно быть положительным числом). Если значение параметра N меньше или равно нулю, то значение факториала принимается равным нулю без вычисле- ний, после чего происходит выход из подпрограммы с помощью процедуры Exit. В Паскале имеется еще одна форма записи оператора цикла. Она предназначена для использования в случаях, когда счетчик должен последовательно принимать не возрастающие, а убывающие значения. for счетчик:= выражение-1 downto выражение-2 do тело-цикла; Значение счетчика в этом случае будет не увеличиваться, а уменьшаться (как при вызове процедуры PredQ). Соответственно, необходимо, чтобы значение выраже- ния-2 было меньше значения выражения-1. Тип счетчика — не обязательно целое число. Это может быть, в частности, перечислимый тип. type TLoop = (MinVal, AveVal, MaxVal); var L: TLoop; Begin for L:= MinVal to MaxVal do Условный оператор цикла Оператор for удобно применять, когда заранее известно, сколько раз требуется выполнить тело цикла (например, при обработке всех элементов массива). Но в большом количестве задач цикл приходится выполнять неизвестное число раз. Это происходит, если вычисление значения функции заканчивается по достижении заданной точности, если выполнение операторов зависит от информации, введен- ной пользователем, если надо найти в массиве элемент с конкретным значением и так далее. В таких случаях правильнее использовать условный оператор цикла: while условие do тело-цикла; Тело цикла будет выполняться, пока истинно условие (логическое выражение, воз вращающее значение типа Boolean). В отличие от оператора for условие окончания
цикла каждый раз вычисляется заново. Это позволяет гибко управлять числом повто- рений цикла. 76 Урок 1. Язык Delphi [Object Pascal] и его использование ВНИМАНИЕ Если перед выполнением оператора while значение условия рав- но False, тело цикла не будет выполнено ни разу. Допустим, надо написать программу, которая вычисляет факториал вводимого с клавиатуры числа, но делает это не один раз, а многократно — до тех пор, пока человек не введет число 0, служащее условным признаком завершения работы про- граммы. Используя ранее подготовленную подпрограмму Factorial, такую программу можно записать следующим образом: program Projectl; {SAPPTYPE CONSOLE} uses sysutils; / / здесь следует // описание подпрограммы Factorial var N: integer; begin N:= 1,- while N o 0 do begin ReadLn(N); WriteLnf Factorial (N)),- end; end. При выполнении тела цикла вводится начальное значение для вычисления факто- риала и печатается результат вызова функции Factorial(). Цикл повторяется до тех пор, пока введенное значение не окажется равным нулю, после чего работа про- граммы завершится. Первый оператор присваивания N :- \ нужен, чтобы войти в условный цикл (так как начальное значение переменной N не определено). ПОДСКАЗКА Надо внимательно следить за вычислением условия завершения. Если в случае с оператором for число повторений цикла известно компилятору заранее, то в случае с оператором while контроль завершения цикла полностью возлагается на программиста. Иногда оператор while может повторять тело цикла бесконечное число раз, что приводит к зацикливанию и ≪зависанию≫ программы.
|
||||||
Последнее изменение этой страницы: 2017-02-21; просмотров: 295; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.143.228.40 (0.016 с.) |