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.
Ручная трассировка необходима для того, чтобы убедиться в верности вычислений. Порой с помощью этого метода можно выявить ошибки, которые не попадаются на глаза при обычной проверке написанного кода.
Если провести ручные расчеты, то можно убедиться, что программа правильно работает. Это, в свою очередь, говорит о том, что алгоритм создания кода верен, последовательность действий приводит к логическому концу.