Циклу с постусловием в pascal соответствует оператор

На занятии рассматривается цикл с постусловием в Паскаль Repeat и происходит знакомство со строковым типом данных
Основной задачей портала labs-org.ru является предоставление возможности получения навыков решения практических задач с использованием языка программирования Pascal. На основе решенных примеров и заданий по Паскалю, изложенных по мере увеличения их сложности, даже новичкам будет достаточно просто усвоить предоставленный материал.
Цикл с постусловием в Паскаль (repeat)
Пример: Ввести целое положительное число (n) и определить четное ли оно.
Проблема 1: Как избежать ввода отрицательного числа или нуля?
Решение 1: Если вводится неверное число, то нужно вернуться назад к вводу данных (цикл).
Проблема 2: Неизвестно, сколько шагов надо сделать.
Решение 2: Надо остановиться, когда n > 0, т.е. надо делать «до тех пор пока n не станет больше0».
- Один раз тело цикла надо сделать в любом случае => проверку условия цикла надо делать в конце цикла (цикл с постусловием)!.
- Цикл Repeat в Паскале используется для организации повторений (итераций) с заранее неизвестным их числом.
- Цикл повторяется до тех пор, пока не станет истинным некоторое условие.
repeat оператор1; оператор2; . . .; операторN until условие {до тех пор, пока условие не станет истинным}
Блок-схема решения примера:
Блок-схема решения примера
Решение на Паскале:
- Операторы образуют тело цикла и будут выполняться до тех пор, пока значение “условие” не станет равно true, т.е. не станет истинным.
- Условием может быть переменная или логическое выражение.
- Проверка условия осуществляется уже после первого прохождения операторов тела структуры, т.е. после первой итерации, т.о. цикл с постусловием в Паскаль обязательно выполнится хотя бы один раз, независимо от истинности условия.
Еще одно использование цикла Repeat рассмотрим на примере с решением.
Пример: Печатать «ноль» указанное количество раз
Показать решение:
1 2 3 4 5 6 7 8 9 10 | var i,n:integer; begin write (‘kolichestvo raz’); readln(n); i:=1; repeat write(0); i:=i+1 until i>n end. |
В решенной задаче оператор 8-й строки – это счетчик (i:=i+1), который просчитывает количество раз и одновременно является условием для выхода из цикла.
Задача 1. Написать программу решения задачи о печати чисел 3 5 7 9 11 13. Для решения задачи использовать цикл Repeat
Узнать о работе оператора с постусловием в Паскале можно также из видеоурока:
Строковый тип данных в Паскаль
Для решения следующей задачи нам пригодится работа со строковым типом данных.
Рассмотрим как объявляются строки в Паскале:
Объявление строковой переменной:
Присваивание значения строковой переменной:
str:=’вот такая вот строка’;
Пример использования строковых переменных в Паскале
1 2 3 4 5 6 7 | var str1,str2: string; begin str1:=’Привет, ‘; writeln(‘Ваше имя?’); readln(str2); writeln(str1,str2) end. |
Теперь снова возвращаемся к нашему циклу repeat.
Задача 2. Компьютер предлагает человеку ввести слово, после чего распечатывает это слово, снабдив его восклицательным знаком. Затем снова предлагает ввести слово и так до тех пор, пока человек не введет слово «Хватит». Распечатав его с восклицательным знаком, компьютер отвечает: «Хватит так хватит» и заканчивает работу. Для решения задачи использовать цикл с постусловием в Паскаль.
Дополнительно: Перед выводом каждого слова необходимо выводить его порядковый номер.
Источник
Работа с циклами Паскаль
Иногда в программах, написанных на Паскале, приходится многократно выполнять одно и то же действие. Процесс, в ходе которого производится множество раз одно и то же действие, именуется циклом. Цикл называют арифметическим, если наблюдателю (пользователю) заранее известно количество повторений. Ниже представим синтаксис арифметического цикла:
Оператор for в приведенном примере вызывает оператор, который находится после do, по одному разу для каждого из значений в промежутке от значения1 до значения2.
Начальное значение, конечное значение и переменная цикла должны быть порядкового типа. При использовании слова to происходит увеличение значения переменной цикла на 1 при каждой следующей итерации цикла. Если применить слово downto, то произойдет уменьшение значения переменной цикла на 1 при каждой следующей итерации цикла.
Помните: не рекомендуется внутри цикла самостоятельно менять значение управляющей переменной. В синтаксисе языка допускается записывать только один оператор после слова do. Если вы желаете выполнить в цикле несколько операторов, необходимо объединить эти операторы в составной (заключить между служебными словами begin и end), иначе велика вероятность возникновения логической ошибки в программе.
Цикл называется итерационным, если заранее неизвестно количество необходимых действий. Итерационные циклы позволяют проверить некоторое условие. В зависимости от того, каков результат выполненной проверки, либо осуществляется выход из цикла, либо повторяется выполнение тела цикла. Существует два типа итерационных цикла:
Рассмотрим каждый из этих циклов.
Цикл с предусловием Pascal
Итак, циклы с предусловием имеют синтаксис:
Оператор после ключевого слова do выполняется, пока логическое выражение (под ним понимается условие возобновления цикла) принимает значение true (истина).
Истинность этого логического будет проверяться всякий раз перед тем, как в очередной раз произойдет повторение оператора цикла. И когда логическое выражение примет значение false (ложь), то сразу производится переход к следующему за while оператору.
Оценка выражения осуществляется до выполнения оператора, т.е., если изначально это выражение принимало значениеfalsе, то оператор ни разу не выполнится. Как и в случае арифметического оператора, необходимо учитывать возможность использования только одного оператора после слова do.
Для выполнения группы операторов, используйте составной оператор. Простенький пример:
Цикл с постусловием Pascal
Итерационный цикл с постусловием имеет формат:
Судя по синтаксису между словами repeat и until операторы многократно повторяются, пока логическое выражение принимает значение false. Когда логическое выражение примет значение true – всё, выход из цикла. Поскольку выражение проверяется после выполнения операторов, то хотя бы один раз выполнятся операторы. Для визуального восприятия короткий пример:
Обратим внимание на еще одни очень важные операторы – это операторы завершения цикла. Выход из цикла для всех операторов, как правило, производится по окончании оператора цикла. Но для этих целей можно использовать оператор выхода и оператор перехода. В Турбо Паскаль (версия 7.0) имеются следующие встроенные процедуры:
continue – производит переход к началу новой итерации в цикле.
Мы знаем, что оператор безусловного перехода goto обеспечивает выход из цикла, но использовать его в этих целях не рекомендуется, поскольку для этого специально предназначены процедуры continue и break.
Источник
Оператор цикла с постусловием языка паскаль
На занятии рассматривается цикл с постусловием в Паскаль Repeat и происходит знакомство со строковым типом данных
Основной задачей портала labs-org.ru является предоставление возможности получения навыков решения практических задач с использованием языка программирования Pascal. На основе решенных примеров и заданий по Паскалю, изложенных по мере увеличения их сложности, даже новичкам будет достаточно просто усвоить предоставленный материал.
Цикл с постусловием в Паскаль (repeat)
Пример: Ввести целое положительное число (n) и определить четное ли оно.
Проблема 1: Как избежать ввода отрицательного числа или нуля?
Решение 1: Если вводится неверное число, то нужно вернуться назад к вводу данных (цикл).
Проблема 2: Неизвестно, сколько шагов надо сделать.
Решение 2: Надо остановиться, когда n > 0, т.е. надо делать «до тех пор пока n не станет больше0».
Блок-схема решения примера:
Блок-схема решения примера
Решение на Паскале:
Еще одно использование цикла Repeat рассмотрим на примере с решением.
Пример: Печатать «ноль» указанное количество раз
1 2 3 4 5 6 7 8 9 10 | var i,n:integer; begin write (‘kolichestvo raz’); readln(n); i:=1; repeat write(0); i:=i+1 until i>n end. |
В решенной задаче оператор 8-й строки – это счетчик (i:=i+1), который просчитывает количество раз и одновременно является условием для выхода из цикла.
Задача 1. Написать программу решения задачи о печати чисел 3 5 7 9 11 13. Для решения задачи использовать цикл Repeat
Узнать о работе оператора с постусловием в Паскале можно также из видеоурока:
Строковый тип данных в Паскаль
Для решения следующей задачи нам пригодится работа со строковым типом данных.
Рассмотрим как объявляются строки в Паскале:
Объявление строковой переменной:
Присваивание значения строковой переменной:
Пример использования строковых переменных в Паскале
1 2 3 4 5 6 7 | var str1,str2: string; begin str1:=’Привет, ‘; writeln(‘Ваше имя?’); readln(str2); writeln(str1,str2) end. |
Теперь снова возвращаемся к нашему циклу repeat.
Задача 2. Компьютер предлагает человеку ввести слово, после чего распечатывает это слово, снабдив его восклицательным знаком. Затем снова предлагает ввести слово и так до тех пор, пока человек не введет слово «Хватит». Распечатав его с восклицательным знаком, компьютер отвечает: «Хватит так хватит» и заканчивает работу. Для решения задачи использовать цикл с постусловием в Паскаль.
Дополнительно: Перед выводом каждого слова необходимо выводить его порядковый номер.
“Программы без ошибок можно написать
двумя способами, но работает – третий”
Алан Джей Перлис
Сегодня будем говорить об операторе Repeat.
В переводе Repeat значит повторение. Давайте рассмотрим общую структуру этого цикла.
где
repeat – зарезервированное слово (повторение);
until – зарезервированное слово (до тех пор пока);
выражение – условие, управляющее повторениями, должно быть логического типа;
оператор – любые операторы языка Pascal
Принцип действия данного цикла схож с циклом while, но есть некоторые отличия:
В принципе, ничего сложного. Поэтому приступим к разбору задачи с циклом Repeat:
Вычислить факториал целого положительного числа N.
Я надеюсь, что все знакомы с понятием факториал числа. Нет? Тогда вам стоит подучить математику, а затем вернуться сюда и продолжить)) Для ленивых, которые не хотят идти учить математику, напомню в двух словах. Факториа́л числа n – произведение всех натуральных чисел от 1 до n включительно. Обозначается факториал восклицательным знаком (!). Если простым языком то, например, 5! = 1*1*2*3*4*5. А факториал трех 3! = 1*1*2*3. Я думаю принцип понятен, нам нужно перемножить последовательно все члены ряда.
В общем как мы будем решать эту архи сложную задачу при помощи цикла с постусловием? Для начала разберемся с переменными. По условию нам дана переменная N, значит она будет присутствовать в нашей программе. Далее нам нужно ввести некоторую переменную (возьмем F), в которой будет подсчитываться значение факториала. Изначально данная переменная будет равна 1 (потому что самый маленький факториал, учитывая возможное число N будет равен 1). Если посмотреть внимательно чуть выше, там где я расписал факториал пяти, то можно заметить одну особенность – каждый раз мы умножаем на число, которое на единицу больше предыдущего. Какой вывод из этого можно сделать? Правильно, нам нужна некоторая переменная – счетчик (обычно берут i), которая будет с каждой новой итерацией (повторением) цикла увеличиваться на единицу. Изначально данная переменная будет равна 0. Все, больше переменных нам не нужно.
Осталось правильно составить цикл Repeat. Еще разок взгляните на это 5! = 1*1*2*3*4*5. Для начала нам нужно организовать это умножение 1*1. Первая единица – это наша переменная F. Второй множитель это наша переменная i, которая у нас пока равна нулю. Значит перво-наперво в теле цикла Repeat нам нужно прописать строчку i:=i+1;, которая будет каждый раз увеличивать значение множителя на единицу. Хорошо, два первых множителя у нас есть, теперь сделаем так чтобы результат этого умножения сохранился в нашей переменной F. Для этого в блоке операторов цикла Repeat допишем строчку F:=F*i;. Готово, теперь у нас множитель каждый раз будет повышаться на единицу и умножаться на результат предыдущего произведения. Осталось составить условие для выхода из цикла. Цикл прекратит свое выполнение тогда, когда условие станет истинным. Какое бы нам условие написать? Да вот какое – i=N, т.е. пока у нас переменная i меньше заданного с клавиатуры числа N, цикл Repeat будет повторяться. Как только переменная i станет равна N произойдет выход из цикла.
Ну а дальше стандарт – вывод переменной F, содержащей результат на экран и завершение программы. Посмотрим на то, что у нас получилось в итоге:
program factorial;
var
F,N,I:integer;
begin
F:=1;
I:=0;
writeln(‘N = ‘);
readln(N);
На сегодня это все. Жду вас на следующих занятиях.
Источник
Источник
Здравствуйте, дорогие читатели! Вот мы с вами и подошли к изучению циклов. Циклы в Паскаль. Что это такое? Как этим пользоваться? Для чего они нужны? Именно на эти вопросы я сегодня и отвечу.
Если вы читали этот урок, то знаете, что существует три вида алгоритмов: линейный, разветвляющийся и циклический. Мы с вами уже знаем, как реализовывать линейные и разветвляющиеся алгоритмы на Паскале. Приступим к изучению последнего типа алгоритмов.
В языке Pascal, как и в большинстве языков программирования, существует три типа циклических конструкций.
Любой цикл состоит из тела и заголовка. Тело цикла – это набор повторяющихся операторов, а условие – это логическое выражение, в зависимости от результата которого и происходит повторное выполнение цикла.
Возьмем одну задачу, которую будем решать, используя различные виды циклов.
Задача 1. Вывести все числа от 1 до числа, введенного с клавиатуры.
While, или цикл с предусловием
Как вы, наверное, уже поняли из названия, while – это цикл, в котором условие стоит перед телом. Причем тело цикла выполняется тогда и только тогда, когда условие true; как только условие становится false, выполнение цикла прекращается.
While имеет формат:
while < условие> do <оператор 1>; {Пока … делай ….}
Данный цикл подходит только для одного оператора, если же вы хотите использовать несколько операторов в своем коде, вам следует заключить их в операторные скобки – begin и end;.
Решение задачи.
program example_while; var i, N: integer; { объявляем переменные } begin i := 1; { Присваиваем i значение 1 } readln(N); { Считываем последнее число } while i <= N do {Как только i станет больше N, цикл прекратится (можно было бы написать просто <, но пришлось бы добавлять 1 к N) } begin {Открываем операторные скобки} write(i, ‘ ‘); {Выводим i} Inc(i); {увеличиваем i на один.} end; { закрываем скобки } end.
Repeat, или цикл с постусловием
Repeat – полная противоположность while. Repeat – это цикл, в котором условие стоит после тела. Причем оно выполняется тогда и только тогда, когда результат условия false; как только логическое выражение становится true, выполнение цикла прекращается.
Repeat имеет формат:
repeat { повторяй … }
<оператор 1>;
< оператор 2>;
…
until {до…} <условие>
Begin и end не требуются.
Решение задачи.
program example_repeat; var i, N: integer;{ объявляем переменные } begin i := 1; { Присваиваем i значение 1 } readln(N); { Считываем последнее число } repeat {после repeat не требуется begin и end } write(i, ‘ ‘); {Выводим i} Inc(i); {увеличиваем i на один.} until i = N + 1; {Например, i = 11, а N = 10. Цикл прекратится, так условие стало true.} end.
For, или цикл с параметром
For – это цикл, в котором тело выполняется заданное количество раз.
Существует две формы записи этого цикла:
Первая форма
for <счетчик1> := <значение1> to <конечное_значение> do <оператор1>;
После каждой итерации значение <счетчик1> будет увеличиваться на 1.
<значение1> – это начальное значение счетчика. Это может быть переменная или число.
<конечное_значение> : как только значение <счетчик1> станет больше <конечное_значение>, выполнение цикла прекратится.
Если требуется написать несколько операторов в теле цикла, используем begin и end.
И <счетчик1>, и <конечное_значение>, и <значение1> – переменные целого типа.
Чаще всего в качестве счетчика используется переменная i.
Вторая форма
for <счетчик2> := <значение2> downto <конечное_значение> do <оператор1>;
После каждой итерации значение <счетчик2> будет уменьшатся на 1.
<значение2> – это начальное значение счетчика.
<конечное_значение> : как только значение <счетчик2> станет меньше <конечное_значение>, выполнение цикла прекратится.
Два важных примечания:
- Цикл повторяется, пока значение значение счетчика лежит в отрезке [значение ; конечное_значение].
- Изменять значение счетчика внутри тела нельзя! Вот что выводит компилятор:
Решение задачи:
program example_for; var i, N: integer; begin read(N); {предположим, что мы ввели 10} for i := 1 to N do write(i, ‘ ‘); {количество итераций – 10 – 1 + 1 = 10} end.
Согласитесь, данный код проще и лаконичнее, чем все предыдущие. И цикл for – не совсем обычный цикл, в нем нет логического условия. Поэтому цикл с параметром в программировании называют синтаксическим сахаром. Синтаксический сахар – это дополнения синтаксиса языка программирования, которые не добавляют новых возможностей, а делают использование языка более удобным для человека.
Давайте решим пару задач.
For1. Даны целые числа K и N (N > 0). Вывести N раз число K.
Организовываем простой цикл от 1 до требуемого числа.
program for1; var K, N, i: integer; begin read(K, N); for i := 1 to N do write(K, ‘ ‘); {Пишем К через пробел } end.
For2. Даны два целых числа A и B (A < B). Вывести в порядке возрастания все целые числа, расположенные между A и B (включая сами числа A и B), а также количество N этих чисел.
Так как A < B, то цикл должен будет выводить все числа от А до B. Чтобы сосчитать количество чисел, используем формулу: <конечное_значение> – <начальное_значение> + 1.
program for2; var A, B, i, count: integer; begin read(A, B); for i := A to B do write(i, ‘ ‘); {выписываем числа от меньшего к большему} count := B – A + 1; {считаем количество чисел} writeln; write( ‘Количество чисел – ‘, count); end.
For9. Даны два целых числа A и B (A < B). Найти сумму квадратов всех целых чисел от A до B включительно.
Организовываем такой же цикл, как и в предыдущей задаче, но одновременно суммируем квадраты всех чисел. Чтобы высчитать квадрат, используем функцию Sqr.
program for9; var A, B, i, S: integer; begin read(A, B); S := 0; {PascalABC делает это автоматически, но если у вас другой компилятор советуем обнулять переменные вручную} for i := A to B do S := S + Sqr(i); {складываем все квадраты} writeln; write( ‘Сумма квадратов – ‘, S); end.
For13°. Дано целое число N (> 0). Найти значение выражения 1.1 – 1.2 + 1.3 – … (N слагаемых, знаки чередуются). Условный оператор не использовать.
Для того, чтобы поменять знак, каждую итерацию цикла меняем значение специальной переменной на противоположное.
program for13; var N, A, i: integer; S: real; begin Write(‘N = ‘); readln(N); S := 1.1; A := 1; {Сначала положительное} for i := 2 to N do {первую итерацию цикла мы уже произвели, поэтому начинаем отсчет с 2} begin A := -A; {Теперь отрицательное} S := S + A * (1 + i / 10); {Складываем} end; Writeln(S:5:1); {Отдадим под дробную часть одно знакоместо} end.
While1°. Даны положительные числа A и B (A > B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти длину незанятой части отрезка A.
Каждый раз вычитаем B из А, пока А – В >= 0.
program while1; var A, B: integer; begin readln(A, B); while (A – B) >= 0 do A := A – B; {Пока разница положительная, вычитаем. Необходимо предусмотреть вариант с кратностью А и B, поэтому >=} write(A); end.
While4°. Дано целое число N (> 0). Если оно является степенью числа 3, то вывести True, если не является – вывести False.
Действуем следующим образом: пока N делится нацело на три, делим N нацело. Затем, если N = 1 – число является степенью тройки; если N <> 1, тогда число – не степень тройки. Для того чтобы решить эту задачу, требуется знать, что такое div и mod, и как работают логические выражения.
program while4; var N: integer; begin readln(N); while N mod 3 = 0 do N := N div 3; {Пока остаток от деления на три равен нулю, делим N нацело } writeln(N = 1); {логическое выражение} end.
На сегодня все! Не забывайте почаще заходить на наш сайт и кликать по кнопочкам, которые расположены перед комментариями.
Источник