Turbo Pascal. While... do – цикл с предусловием

Turbo Pascal хоть и не является всемирно любимым приложением для программирования, но создатели, делающие первые шаги в написании ПО, начинают знакомство именно с этой средой. Она дает понятие о разветвлениях, операторах, функциях и процедурах, а также многих других вещах. К примеру, при изучении программист столкнется с циклами в Turbo Pascal: While, For и Repeat.

Понятие цикла и его разновидности

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

  • с параметром (For … to… do);
  • с предусловием (While … do);
  • с постусловием (Repeat … until).

Первый вид используется, когда заранее известно, сколько шагов в решении задачи. Однако существует ряд заданий, когда нет информации о том, сколько раз будут повторяться те или иные действия. В таком случае в Pascal While цикл становится незаменимым, как, в принципе, и Repeat.

Структура цикла

В чем заключается суть работы в Pascal While, For и Repeat циклов? У таких конструкций выделяют заголовок и тело. В первой составляющей указываются переменные, которые будут «работать», задаются условия на проверку истинности, период, до которого тело будет выполняться. Во второй составляющей прописываются выражения, которые должны использоваться в случае выполнения условия, т. е. True, а не False.

Когда итерация выполняется на последней строке кода, тогда она возвращается к заголовку, где проверяется условие. В случае истины операции повторяются, а в случае невыполнения условия, программа «выходит» из цикла и выполняет дальнейшие операции.

Следующим образом выглядит цикл While. Pascal ABC и подобные программы требуют написания такого кода:

  • While Условие do;
  • Begin;
  • Тело цикла;
  • End.

В случае если в теле цикла будет выполняться 1 оператор (1 действие), тогда «скобки» begin… end можно опустить.

Блок-схема цикла

В Turbo Pascal While имеет следующие особенности:

  • внутри конструкции можно использовать сложные условия;
  • после слова do не должно быть точки с запятой (это считается ошибкой в Turbo Pascal и Pascal ABC);
  • переменная, константа или выражение, служащее при получении ответа False выходом их подпрограммы, должны быть обязательно логического типа, т. е. Boolean.

Следующим образом выглядит блок-схема данной разновидности цикла. Она показывает очередность выполнения действий.

Алгоритм работы цикла

В простейших средах программирования, в т. ч. и в Pascal ABC, While цикл действует по следующему принципу:

  • заданные итерации, т. е. повторения, будут проходить столько раз, пока условие будет истинным (True);
  • как только условие не выполняется и дает ответ False (или иначе «Ложь»), оператор выходит из цикла;
  • как только это произошло, программа «пошла» в конструкции, стоящие после цикла.

Это является существенным отличием While от Repeat, т. е. цикла с предусловием от постусловия.

Очень важно предусмотреть в теле цикла конечное изменение заданной переменной в заголовке While. В любом случае должна когда-нибудь наступить ситуация, дающая значение False. Иначе произойдет зацикливание, и тогда придется воспользоваться дополнительными мерами для выхода из компилятора. Такие ошибки считаются грубыми и непростительными.

Как выйти из программы во время зацикливания?

Зачастую происходит ситуация, когда оператор While Pascal выдает зацикливание в написанном программном коде. Что это означает? Итерация повторяется бесконечное число раз, поскольку условие всегда истинно. Например, вот фрагмент программы:

  • While 2>1 do;
  • Write(1).

В таком случае, чтобы прервать выполнение задачи, достаточно нажать CTRL + F2.

Есть еще 2 способа контролировать подобное поведение программы. К примеру, если вписать в код Continue, которое передаст управление на начало цикличной конструкции (здесь условие выхода из цикла контролируется, т. е выполнение текущей итерации будет прервано). Тогда управление передается в цикле While в предшествующую проверку.

Оператор Break способен прервать выполнение всего цикла и передать управление следующей итерации. Здесь выход из конструкции контролироваться не будет. На изображении показаны примеры использования данных операторов.

Решение задач

Рассмотрим в действии цикл While. Pascal задачи предлагает решить самые разнообразные. Остановимся пока на простейших, чтобы понять принцип работы. Решены задания в программе Pascal ABC. Но будут представлены и изображения классической среды Turbo Pascal для сравнения.

Задание 1: дана функция Y=5-X^2/2. Составить таблицу значений с шагом sh=0,5 на промежутке [-5;5].

Алгоритм действий:

  • задать для переменной Х начальное значение равное -5 (т. е. начало промежутка);
  • вычислять значение Y, пока переменная x не достигнет конца указанного отрезка;
  • вывести на экран значения функции и абсциссы (Х);
  • увеличить Х на заданный шаг.

Вот так выглядит код в программе Pascal ABC.

Как выглядит код в программе Turbo Pascal. Изображение ниже наглядно показывает это.

Задание 2: дан массив А, состоящий из целых положительных и отрицательных чисел. В нем содержится 10 элементов. Необходимо сформировать матрицу В, в которой будут отображены положительные элементы массива А, имеющие четный индекс. Отобразить на экране сумму квадратов в числе из новой матрицы.

Алгоритм действий:

  • Необходимо написать подпрограмму, которая будет «работать» только с элементами массива А, имеющими четный индекс. В цикле значение переменной, отвечающей за четность индекса, будет увеличиваться на 2.
  • Если число с четным индексом из матрицы А соответствует условию х>0, тогда счетчик элементов массива увеличивается на 1. Нынешнее значение переменной-счетчика будет являться индексом копируемого числа в массиве В.
  • Изначально переменной summa, отвечающей за нахождение суммы квадратов положительных чисел, присваивается 0. Затем будет выполняться операция: к предыдущей сумме прибавляется новое значение квадрата.
  • Не стоит пугаться, если не все положительные числа перешли из одной матрицы в другую. Нужно быть внимательными. Многие начинающие программисты в панике переписывают код. Следует тщательно изучить условие: положительные числа, находящиеся на четных «местах», т. е. имеющие индексы, кратные 2.

Ручная трассировка необходима для того, чтобы убедиться в верности вычислений. Порой с помощью этого метода можно выявить ошибки, которые не попадаются на глаза при обычной проверке написанного кода.

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

Комментарии