Цикл с предусловием паскаль задачи

Цикл с предусловием паскаль задачи

Вчера мы узнали о понятии циклы в паскале в общих чертах, сегодня узнаем о каждом из циклов в паскале поподробней и увидим как они задаются. Будем разбирать цикл while с предусловием, цикл for с параметром и цикл repeat — until с постусловием.

1. Цикл с параметром в Паскале — FOR

Цикл FOR задаёт определённое условие по которому программа будет работать до его выполнения, допустим нужно нам 5 (или n) раз зациклить программу, то это легко сделать с помощью данного цикла. У цикла FOR есть характерная черта — счетчик который обычно обозначается буквой i или j.

Внешний вид цикла с параметром в паскале:

После 1-го прохода переменной i присваиваем 1, после второго присваиваем 2 и так до тех пор, пока не дойдем до n. to — это до .. в порядке возрастания, также есть downto — до .. в порядке убывания.

Блок — схема цикла с параметром:

2. Цикл с предусловием в Паскале — WHILE

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

Структура цикла с предусловием:

— логическое выражение, истинность которого проверяется вначале выполнения циклического оператора;

— любые выполняемые операторы языка.

Порядок выполнения цикла:

Пока условие истинно выполняется тело цикла. Как только условие становится ложно выполнение цикла прекращается.

Блок — схема цикла с предусловием:

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

Задача: вычислить сумму ряда 1+1.5+2+2.5+3+3.5+ .. + 30

3. Цикл с постусловием — Repeat — until.

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

Обратите внимание на то, что данный оператор цикла предполагает наличие нескольких операторов в теле цикла, то есть можно выполнять несколько действий, поэтому служебные слова Begin и End не нужны.

Последовательность операторов, входящих в тело цикла выполняется один раз, после чего проверяется соблюдение условия, записанного следом за служебным словом Until. Если условие не соблюдается, цикл завершается. В противном случае — тело цикла повторяется ещё раз, после чего снова проверяется соблюдение условия.

Блок — схема цикла с постусловием:

Формат записи, структура цикла:

Выводы:

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

2. Цикл с предусловием выполняется до тех пор, пока условие выполнения не станет ложным, и продолжается, если условие истинно.

3. Цикл с постусловием выполняется до тех пор, пока условие не станет истинно, если условие ложно, цикл продолжается.

Читайте также:  Почему компьютер не видит планшет андроид

Primary tabs

Forums:

Ранее мы уже рассмотрели цикл for (т.н. "цикл с известным числом повторений"), для которого число витков определялось правой и левой границей счетчика.

Далее мы рассмотрим цикл while, число повторов которого определяется иначе, а именно на основании проверки истинности логического выражения.

Когда используется

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

Цикл while — структура

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

В качестве условия можно использовать более сложное выражение, лишь бы возвращаемый результат имело логический тип:

Условие выхода из while

Цикл типа while в Паскале выполняется до тех пока истинно логическое выражение в заголовке данного цикла.
То есть:

  1. Если логическое выражение истинно — то делается следующий виток цикла.
  2. Если логическое выражение ложно — то цикл завершается, и программа выполняется далее (по инструкциям, которые записаны в коде ниже тела цикла).

Бесконечный циклы и как с ними бороться

Как возникают бесконечные циклы

В for счетчик цикла (который обязательно есть в таком цикле) проходит заранее известное (и конечное) число значений, которое определяется в заголовке цикла for на основании правой и левой границ.

В цикле же while проверка логического условия приводит к тому, что есть возможность (в некотором смысле "опасность") получить зависание программы за счет бесконечного числа раз повторения цикла.
Эта ситуация может возникнуть при следующих условиях (они должны выполняться одновременно):

  1. Цикл while выполнился хотя бы один первый раз.
  2. Во всех последующих итерациях (повторах) тела цикла логическое выражение по-прежнему возвращает только true и никогда false.

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

В этой программе используется цикл, решение об очередном выполнении которого принимается на основании проверки условия:

Но фактически, мы видим, что ещё до начала цикла была выполнена операция присваивания:

— а это значит, что на самом деле в цикле первый раз мы проводим сравнение (паскаль проводит):

результат которого истинен, а цикл первый раз выполнится (первое условие для "угрозы бесконечности" у нас уже есть). Что же происходит далее?
В теле цикла значение переменной $a$ никак не меняется, а значит не меняется от витка к витку и значение логического выражения:

— и потому цикл оказывается бесконечным.

Как избежать этой ситуации? Рассмотрим далее.

Как бороться с бесконечными циклами

Чтобы цикл с проверкой логического условие не был бесконечным необходимо:

  • изменять в теле цикла компоненты логического выражения (значения входящих в него переменных)

— это не даёт гарантии защиты "от бесконечности", так как ваше логическое выражение или ваш алгоритм изменения переменных могут быть построены так, что несмотря на изменение значений переменных логическое выражение все равно каждый раз будет возвращать true, но без этого вы точно получите бесконечный цикл (если он начнётся, а выражение изменяться не будет).

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

Читайте также:  Как сделать эмулятор монитора виндовс

Главное: анализируйте ваш код на предмет того, что в каком-то витке условие должно вернуть false — без этого любой while, который начал выполняться станет бесконечным.

Примеры кода (решения задач)

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

Пример №1 — цикл с неизвестным число повторений

Пользователь вводит целые числа. Пока он не введёт число большее $17$, в ответ на каждое введённое число выводите сумму этого числа и числа $8$, если же введённое число больше $17$, то цикл необходимо завершить.

Решим эту задачу:

Пример №2 — замена for на while

Цикл while — самая универсальная конструкция из всех циклов Паскаля. любой другой цикл можно заменить на него (хотя это не всегда рекомендуется делать). Рассмотрим код (запустите его):

— в этой задаче мы выводим числа от $1$ до $10$ два раза, делая одно и тоже разными циклами.
По сути в while в примере выше мы тоже используем переменную счетчик, но уже сами управляем её изменением в теле цикла, в то время как в for этого не требуется.

Для циклов с известным числом повторений рекомендуется использовать именно for, так как по его заголовку сразу видно, сколько раз выполнится тело (по крайней мере, это видно намного лучше чем, скажем, в цикле while).

Задачи для самостоятельного решения

  1. Пользователь вводит целые числа. Пока он не введёт число большее $15$, в ответ на каждое введённое число выводите сумму этого числа и числа $7$, если же введённое число больше $15$, то цикл необходимо завершить.
  2. Пользователь вводит целые числа. Пока он не введёт число большее $15$, в ответ на каждое введённое число выводите сумму этого числа и предыдущего введённого им числа, если же введённое число больше $15$, то цикл необходимо завершить.

Первое введенное пользователем число можно сложить с единицей.

Подсказка: если не получается решить данную задачу самостоятельно (сначала постарайтесь сами хотя бы минут 20-ть), то посмотрите:

Ниже мы приведём ещё пару задач на эту же тему.

  • Решите с помощью цикла while:
    Выведите на экран, все нечетные числа, делящиеся на 3 нацело, лежащие в диапазоне от 35 до 117.
  • Решите с помощью цикла while:
    Выведите на экран, все четные числа от 35 до 117 и нечетные числа, лежащие в диапазоне от 45 до 99.
    Указание: сначала можно решить задачу двумя циклами, но потом перепишите с использованием одного цикла, в теле которого составьте логическое выражение, описывающее подходящие числа (используйте логические операции).
  • Модификация одной из пред. задач: Пользователь вводит целые числа. Пока он не введёт число большее $15$, в ответ на каждое введённое число выводите сумму этого числа и двух предыдущих введённых им чисел (предыдущего и пред-предыдущего), если же введённое число больше $15$, то цикл необходимо завершить.
  • В первом витке цикла все "предыдущие" числа можно считать единицами.

    Читайте также:  Intel hd graphics настройка для игр

    Модификация одной из пред. задач: Пользователь вводит целые числа. Пока он не введёт число большее $15$, в ответ на каждое введённое число выводите сумму этого числа и пред-предыдущего введённого им числа, если это число чётное, иначе просто запрашивать новое число. Если же введённое число больше $15$, то цикл необходимо завершить.

    В первом витке цикла все "предыдущие" числа можно считать единицами.

  • Пользователь вводит целые числа, в ответ выводите символ #. Если введенное пользователем число равно 22, то завершите цикл не выводя ничего в ответ. Решите эту задачу 2-мя способами:
    • С использованием if()
    • С использованием break;
    • Как мы уже говорили, в паскале существуют 3 способа организации цикла (типа):

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

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

      Тело цикла выполняется пока условие ИСТИННО.

      Если в теле цикла действий несколько — используются операторные скобки begin … end;

      Рассмотрим пример, аналогичный рассмотренному в теме «Цикл со счетчиком», но реализуем его с помощью цикла WHILE.

      Требуется на экране вывести:

      Привет
      Привет
      Привет
      Привет

      Для реализации данного примера с помощью цикла с предусловием нам потребуется переменная n:

      Данный цикл будет выполнять команду writeln(‘Привет’) бесконечное число раз. Почему? Потому что переменная n не изменяется и всегда будет меньше 4. Поэтому необходимо в цикле добавить код, изменяющий переменную n. Например: n:=n+1.

      Теперь переменная n будет изменяться с каждым выполнением команд тела цикла (с каждой итерацией).

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

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

      Считать сумму введенных с клавиатуры чисел до тех пор, пока не будет введен ноль.

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

      Зачем два раза используем ввод числа а (readln(a);)? Первый раз вводим число а для того, чтобы войти в цикл с некоторым значением переменной a, которое будет использоваться в условии цикла WHILE. Второй раз команда readln(a) используется внутри цикла — вводим числа до тех пор, пока не введем ноль.

      Даны два отрезка А и B (A>B). Не используя операции умножения и деления, определить, сколько отрезков В уместится в отрезке А.

      Информатика в школе. Цикл WHILE

      Т.е. из рисунка видно, что нам нужно складывать длины отрезка A до тех пор, пока сумма не станет больше длины отрезка В. В этом нам поможет цикл с предусловием — цикл while.

      Рассмотрим работу программы на примере: А=5, В=21. Рассуждения запишем в таблицу:

      Информатика в школе. Цикл WHILE

      Используя алгоритм Евклида, найти НОД двух чисел.

      Рассмотрим блок-схему алгоритма Евклида:

      Запишем данной алгоритм с помощью Паскаля, опираясь на данную блок-схему. Как видим, у нас имеется цикл с предусловием (M>N). Внутри цикла еще одно условие (M>N), т.е. оператор IF… THEN.

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

      Ссылка на основную публикацию
      Характеристики процессора интел пентиум 4
      Количество ядер - 1. Благодаря технологии Hyper-Threading, количество потоков 2, что вдвое больше числа физических ядер и увеличивает производительность многопоточных...
      Сканер ricoh sp 220snw
      Компания Ricoh — далеко не новичок на рынке печатающих устройств. Это глобальная корпорация со штаб-квартирой в Токио и представительствами во...
      Сколько дают на ютубе за 1000 просмотров
      Многих пользователей YouTube, а также начинающих видеоблогеров справедливо интересует вопрос: «А сколько YouTube платит за тысячу или миллион просмотров?» Если...
      Хлебопечка мулинекс ow1101 инструкция и рецепты
      Инструкция MOULINEX OW 1101 на русском языке в формате pdf для устройства: хлебопечь. Прочитайте инструкцию для ознакомления с функциями и...
      Adblock detector