Лекция Паскаль 7 – Виды операторов цикла, Поиск суммы и произведение последовательности чисел


Тема: Циклы.

Цель: Познакомиться с видами операторов цикла для организации многократных вычислений и как с их помощью найти сумму и произведение последовательности чисел, значение максимума или минимума.

1. Алгоритмическая конструкция повторения и ее разновидности: определенные и неопределенные циклы, циклы с предусловием и постусловием.Операторы циклов в языке программирования.

Запись последовательности команд не всегда может быть эффективным способом решения поставленной задачи. Очень часто в программирование нужно выполнить несколько раз одну и ту же последовательность команд. Например, нужно на форме вывести числа от 1 до 10. Один из способов — написать десять строк программного кода. Однако такой способ является худшим. Для вывода, конечно же, нужно использовать цикл.

Цикл — это специальная конструкция языка, которая позволяет запрограммировать многократное выполнение определенного блока команд.

В Delphi существует три типа циклов:

Цикл с параметром (цикл с переменной, значение которой увеличивается (уменьшается) заданное количество раз).

Цикл с предусловием (условие проверяется перед операторами цикла; если условие не выполняется, то цикл завершается).

Цикл с постусловием (цикл выполняется минимум один раз, но возможно и большее количество, после каждого выполнения операторов цикла проверяется условие выхода из цикла).

Цикл с параметром.

Цикл с параметром позволяет выполнить набор команд фиксированное количество раз, то есть, число итераций должно быть известным до начала выполнения цикла. Особенностью данного цикла является то, что вводится специальная переменная — счетчик, последовательно проходит указанный диапазон значений. Значение этой переменной может быть использовано в блоке кода, который содержится в цикле. Эта переменная должна быть локальной, то есть, быть описанной в модуле процедуры или функции, в которой написано цикл, и не может изменяться с помощью операторов присваивания внутри цикла.

Читать  Лекция Паскаль 9 – Стандартные графические процедуры, класс TCanvas

Общий вид конструкции цикла с параметром:

For счетчик = начальное_значение [To / DownTo] кинцеве_значення Do

{Действия}

Счетчик — объявленная ранее переменная перечисляемого типа (в большинстве случаев — целое число).

Начальное значение и конечное значение — границы диапазона, который последовательно проходит переменная — счетчик. Значения соответственно того же типа данных, и переменная

— счетчик.

В зависимости от соотношения начального и конечного значения используется или ключевое слово То (применяется тогда, когда конечное значение больше начального — цикл идет по росту), или ключевое слово DownTo

(Применяется тогда, когда конечное значение меньше предыдущего — цикл идет по убыванию).

В качестве действия обычно указывается некоторая команда или набор команд. Если команд несколько, то их нужно помещать в операторные скобки begin … end;

Пример 1. Вывести на форме фрагмент таблицы умножения для числа, которое вводится пользователем.

Решение. На форме разместим компоненты LabeledEdit (для ввода числового значения из интервала от 1 до 9), Memo (для вывода таблицы умножения для введенного числа), Button (для запуска программы на выполнение).

Программный код:

Обращаем внимание на одну ошибку, которая довольно-таки часто встречается.

Связана она с использованием значением переменной — счетчика после завершения цикла.  После завершения цикла значение переменной — счетчика не определено! Поэтому,если Вы намерены использовать и в дальнейшем значение переменной, ей необходимо присвоить новое значение явным образом.

Цикл с предусловием.

Цикл While ( «пока») — цикл, в котором условие находится перед телом цикла, а сам цикл выполняется до тех пор, пока условие истинно (пока условие не станет ложным).

Общий вид: While {условие} Do

Читать  Язык программирования Паскаль – Структура Паскаль - программы

{Действия}

В качестве условия задается логическое выражение. Те операции, которые будут выполняться в цикле, называются телом цикла.

Особенностью цикла с предусловием является та, что он может не выполниться ни разу — в том случае, когда указанное условие сразу будет ошибочной. При этом цикл может также стать «вечным» — если условие никогда не примет значение False. Именно поэтому необходимо следить за тем, чтобы всегда были заданы условия для завершения работы цикла.

Пример 2. Вывести на форме фрагмент таблицы умножения для числа, которое вводится пользователем. Для решения задачи воспользоваться циклом с предусловием While.

Решение. Поскольку условие задачи эквивалентна примера 1, то изменится только фрагмент кода, который соответствует обработчике события OnClick кнопки Button.

Программный код:

 

Цикл с постусловием.

Цикл с постусловием Repeat ( «повтор») работает точно так же, как и цикл с предусловием While, только с одним отличием — условие цикла размещается после тылу цикла, а не перед ним.

Общий вид: Repeat

{Действия}

Until {условие выхода из цикла};

Есть несколько моментов, на которые нужно обратить внимание. Во-первых, задается условие выхода из цикла, а в цикле While — условие продолжения цикла. Во-вторых, при наличии нескольких команд, которые размещены в теле цикла, помещать в операторные скобки Begin … End; не нужно — зарезервированные слова Repeat … Until сами составляют аналогичный блок.

Цикл с постусловием, в отличие от цикла с предусловием, всегда выполняется хотя бы один раз! Но, как и в цикле While, при неправильно написанной условии он может стать «вечным».

Пример 3. Вывести на форме фрагмент таблицы умножения для числа, которое вводится пользователем. Для решения задачи воспользоваться циклом с постусловием Repeat … Until.

Читать  Основные понятия и элементы языка Паскаль – Справка Pascal

Решение. Поскольку условие задачи эквивалентна примера 1 и примера 2, то изменится только фрагмент кода, который соответствует обработчике события OnClick кнопки Button.

Программный код:

 

2. Решение задач, в которых используются расчеты по итерационными формулами.

Достаточно часто в задачах программирования для целого числа необходимо получить доступ к его цифр. Это может потребоваться для преобразования числа из одной системы счисления в другую, для отыскания наименьшей и наибольшей цифр данного числа тому подобное.

Задача 1. Данное четырехзначный целое положительное число. Необходимо получить сумму цифр, составляющих это число.

Решение. На вопрос, какая цифра содержится в разряде единиц, десятков, сотен, Вы легко ответите, посмотрев на число. Составим алгоритм преобразования — разбивка четырехзначный числа на цифры по разрядам.

Для примера возьмем число 1234.

Прогнозируемая ответ к задаче: 1234 -> 1 + 2 + 3 + 4 = 10 Попробуем выполнить эти действия последовательно.

Выделим разряд единиц: 1234 mod 10 = 4

Уменьшим число в 10 раз (чтобы разряд десятков перемитився на последнее место в записи числа): 1234 div 10 = 123

Выделим разряд десятков: 123 mod 10 = 3

Уменьшим число в 10 раз (чтобы разряд сотен перемитився на последнее место в записи числа): 123 div 10 = 12

Выделим разряд сотен: 12 mod 10 = 2

Уменьшим число в 10 раз (чтобы разряд тысяч перемитився на последнее место в записи числа): 12 div 10 = 1

Выделим разряд тысяч: 1 mod 10 = 1

Теперь можно найти суммы чисел, образовались в результате выполнения операции «остаток от деления нацело» (mod): 1 + 2 + 3 + 4 = 10

Проанализировав созданный нами алгоритм, видим, что наблюдается определенная цикличность в последовательности действий.

Читать  Краткий курс программирования в среде Delphi

Форма для решения задачи имеет вид:

Программный код имеет вид:

Замечания. Использование цикла For для решения подобных задач целесообразно лишь в случае, когда заранее известно количество цифр в числе (как в нашем случае). Если же количество цифр заранее неизвестна, то гораздо удобнее пользоваться циклом While.

Задача 2. Данное произвольное целое положительное число. Необходимо получить сумму цифр, составляющих это число.

Форма для решения задачи имеет вид:

Программный код имеет вид:

3. вложенные циклы.

Многократная повторяющаяся часть алгоритма или программы, которая находится в теле другого цикла, называется вложенным циклом.

Иными словами, для каждого значения переменной — счетчика внешнего цикла счетчик вложенного цикла успевает «пробежать» все свои значения.

Никаких специальных конструкций для вложенных циклов не существует. Все работает так, как и в случае использования обычных циклов. Применяются вложенные циклы в основном для обработки таблиц (двумерных массивов).

Простейший пример использования вложенного цикла — вывод НЕ фрагмента, а всей таблицы умножения.

Задача 3. Вывести таблицу умножения.

Решение. Необходимо создать цикл, который последовательно предоставляет значений от 1 до 9, формируя столбик результатов произведений. А чтобы вывести таблицу (умножив число от 1 до 10), нужен еще один такой же цикл.

Форма для решения задачи имеет вид:

Программный код имеет вид:

 

 

4. Прерывание и продолжение цикла.

Выполнение фиксированного количества итераций не всегда приводит к нужному результату. Иногда в процессе выполнения могут возникнуть ситуации, при которых логично было бы прервать цикл, не пройдя его до конца, то есть, отменив все последующие итерации. Такая возможность существует — для этого необходимо воспользоваться командой Break. Эта команда завершает цикл, который выполняется в данный момент, и продолжает выполнение дальнейших команд программы. При этом текущая итерация до конца не выполняется — прерывание происходит именно в той строке, на котором записана команда Break.

Читать  Понятие о языке программирования Turbo Pascal, главное окно Turbo

Если цикл, выполнение которого прерывается командой Break, вложенный в другой цикл, то «внешний» цикл будет продолжать свое выполнение, то есть, команда Break останавливает только один цикл, а не все имеющиеся.

Команда Break — это выход из цикла.Иногда нужно просто пропустить текущую итерацию и перейти к следующей. Вручную это можно сделать, заметив все команды в блок условного оператора, однако такой способ не совсем удобен. Именно поэтому существует команда продолжения цикла, она называется Continue. эта команда заставляет цикл тут же перейти к следующей итерации, не продлевая выполнения текущей.

5. Теоретические вопросы для самоконтроля.

1. Укажите причины использования циклов.

2. В чем отличие цикла For, который использует опцию To и DownTo?

3. Сколько раз выполнится цикл For i = 2 To 8 Do?

4. Сколько раз выполнится For i = 10 To 4 Do?

5. В чем отличие циклов While и Repeat … Until?

6. Какой цикл может не выполниться ни раз?

7. Какой цикл обязательно исполнится хотя бы один раз?

8. Объясните на примерах использования операций div и mod.

9. Опишите алгоритм перевода целого положительного числа с десятичной системы в двоичную.

10. В чем особенность использования циклов For и While при переводе числа в двоичной системы счисления?

11. Что такое вложенные циклы?

12. Каким оператором осуществляется прерывания цикла? В каких случаях такое прерывание необходимо?

[Всего голосов: 3    Средний: 5/5]