в чем суть работы оператора repeat until
Цикл Repeat..Until.
Как уже было сказано, циклы с условием делятся на циклы с предусловием и на циклы с постусловием. В этой статье рассказывается об использовании цикла с постусловием Repeat. Until для написания программ на языке Pascal.
Предположим, нужно написать программу, в которой мы будем вводить с клавиатуры числа, и подсчитывать их сумму.
Цикл с постусловием Repeat..Until.
В строке №3 запишем 2 переменные: «SUM» – для хранения суммы и «A» для хранения значения введенного нами числа.
В строке №6 обнуляем сумму. Каждый раз, когда в той или иной программе следует подсчитать сумму чего-нибудь, нужно сначала обнулить эту сумму.
В строке №7 указываем первоначальное значение для переменной «A».
При вводе положительных чисел, программа будет продолжать работать. Как только мы введем отрицательное число, цикл перестанет работать, и на экран выведится сумма всех введенных с клавиатуры чисел.
Дополнение к материалу.
Конструкция Repeat. Until подобна операторным скобкам Begin. End. Поэтому перед Until не обязательно ставить точку с запятой. Т. е. в конце строки №11 можно пропустить точку с зяпятой без каких-либо последствий для программы.
Следует сказать, что для решения одних и тех же задач программирования можно использовать как циклы с предусловием, так и циклы с постусловием. Выбор того или иного варианта во многом будет зависеть от ваших личных предпочтений.
Цикл repeat until
Вы будете перенаправлены на Автор24
Цикл repeat until — это оператор повтора, предназначенный для неоднократного повтора выполнения отдельного участка программы.
Введение
Операторы циклов применяются в тех случаях, когда неизвестно точно сколько раз потребуется повторить одну и ту же вычислительную процедуру (или процедуру другого типа), а окончание этой процедуры определяется неким заранее заданным параметром или условием. Когда условие задаётся на входе в цикл, то необходимо применять оператор While, если же условие указывается в конце цикла, то используется оператор Repeat. Циклический оператор while используется следующим образом:
Работает алгоритм в такой последовательности. Пока выполняется условие (пока оно истинно), которое стоит посередине между командами, программа выполняет оператор, стоящий за командой do (то есть делать) и имеющий название тела цикла. То есть каждый раз, прежде чем начать циклическую часть программы, проверяется истинность условия. В случае его истинности, начинается работа оператора, иначе производится автоматическое завершение цикла. Оператор в составе цикла может включать в свой состав другие операторы. Тогда из необходимо разместить внутри команд begin – end. Необходимо при этом помнить, что операторные функции следует разделять символом ;.
while условность do
Приведём образец работы такого цикла. Выполним определение суммарного значения чисел от единицы до десяти, причём каждое число должно быть в третьей степени (то есть кубе). Из текста программы видим, что если b меньше или равно десяти (в строке номер семь), то выполняется тело цикла, где в каждом проходе к общей сумме прибавляется число b в кубе. В конце вычислений, когда b станет равным десяти, определяется общая сумма (в строке девять), а затем к числу b добавиться единица и оно станет равным одиннадцати. Это означает окончание цикла, так как нарушено условие работы цикла (b должно быть не более десяти).
Рисунок 1. Код Pascal. Автор24 — интернет-биржа студенческих работ
Готовые работы на аналогичную тему
Приведём ещё один пример. А именно разложим функцию ex в ряд Тейлора:
Рисунок 2. Разложение функции. Автор24 — интернет-биржа студенческих работ
Предположим, что необходимо определить её числовой вес с точностью до одной миллионной. Число, которое требуется найти, обозначается символом S. Как следует из приведённой выше формулы, первым итогом суммы ряда будет единица, а, чтобы определить значение каждого следующего элемента, надо предыдущий элемент умножить на Х и поделить на n. В самом деле:
Рисунок 3. Уравнение. Автор24 — интернет-биржа студенческих работ
Эти действия и выполняет программа, приведённая ниже:
Рисунок 4. Код Pascal. Автор24 — интернет-биржа студенческих работ
Алгоритм программы действует так. До того момента пока элементы ряда Тейлора превышают 0.000001, работает программа тела цикла и определяется искомая сумма. Когда попадается элемент, который не превышает это число, выполняется выход из цикла и получается итоговый результат. Необходимо учесть, что если условие вхождения в цикл будет всегда выполняться, то произойдёт зацикливание программы. Этот случай носит название бесконечного цикла. Например:
Рисунок 5. Код Pascal. Автор24 — интернет-биржа студенческих работ
В приведённом выше примере на дисплей будет выводиться «Hеllo!» без остановки, вернее, пока работает программа. Зацикливание происходит по причине, что единица всегда меньше ста, а именно это и есть условие вхождения в цикл.
Цикл repeat until
Рассмотрим работу оператора цикла repeat. Он обладает следующей структурой:
Как уже отмечалось выше, оператор цикла repeat имеет отличие от оператора while, состоящее в том, что в нём проверка условия выполняется в конце цикла. Если оно не выполнено, выполнение цикла продолжится, в противном случае работа цикла завершается и программа выходит из него. Или другими словами, если истинность условия подтверждена, программа выполняет очередной проход цикла, а если условие ложно, то выполняется выход из цикла. По этой причине оператор repeat обладает другим неформальным названием, оператор выхода. Кроме того, при использовании внутри тела цикла более одного оператора, для оператора repeat не ставятся команды begin – end:
Существует ещё один момент, характерный для оператора repeat – until, оператор в теле цикла хотя бы единожды, так как проверка условия завершения цикла осуществляется только в самом конце. Это означает, что каждый оператор, перед которым стоит while возможно без проблем преобразовать в форму оператора, когда в конце стоит repeat. Обратное преобразование, то есть замена цикла repeat на аналогичный, но с применением while, возможно далеко не во всех случаях. Рассмотрим пример вычисления квадратного корня из числа, которое вводится с клавиатуры компьютера. То есть надо запустить программу и ввести число. Но если мы введём отрицательное число, то всё время будет выполняться возврат к началу цикла. Выйти из цикла позволит только ввод положительного числа.
Рисунок 6. Код Pascal. Автор24 — интернет-биржа студенческих работ
Ещё пример. Необходимо выполнять ввод чисел с клавиатуры, пока их суммарное значение не станет больше определённого заранее числа М. То есть, в строке одиннадцать выполняется проверка превышения переменной sum значения М, и если есть превышение, то конец цикла и вывод итогового результата:
Рисунок 7. Код Pascal. Автор24 — интернет-биржа студенческих работ
Внешний вид цикла с параметром в паскале:
Оператор цикла с предусловием выполняет действия заранее неизвестное число раз. Выход из цикла осуществляется, если некоторое логическое выражение или его результат окажется ложным. Так как верность логического выражения проверяется в начале, тело цикла может не выполнится ни одного разу.
Структура цикла с предусловием:
— логическое выражение, истинность которого проверяется вначале выполнения циклического оператора;
— любые выполняемые операторы языка.
Порядок выполнения цикла:
Пока условие истинно выполняется тело цикла. Как только условие становится ложно выполнение цикла прекращается.
Этот оператор аналогичен оператору цикла с предусловием, но отличается от него тем, что проверка условия производится после выполнения тела (действий) цикла. Это обеспечивает его выполнение хотя бы один раз в отличие от ранее разобранных циклов.
Обратите внимание на то, что данный оператор цикла предполагает наличие нескольких операторов в теле цикла, то есть можно выполнять несколько действий, поэтому служебные слова Begin и End не нужны.
Формат записи, структура цикла:
Выводы:
1.Цикл с параметром используется переменная, называемая параметром цикла или счётчиком. Перед выполнением цикла параметру (счётчику) устанавливается начальное значение. После выполнения шага цикла значение параметра увеличивается на единицу. Цикл продолжается до тех пор пока параметр не достигнет своего конечного значения, которое указывается после to (downto).
2. Цикл с предусловием выполняется до тех пор, пока условие выполнения не станет ложным, и продолжается, если условие истинно.
3. Цикл с постусловием выполняется до тех пор, пока условие не станет истинно, если условие ложно, цикл продолжается.
Занятие 1_2. Циклы в Pascal abc.net
Цикл с предусловием (while) в Pascal abc.net
while do // заголовок цикла // тело цикла
sum := 0; x := 2; while x
Begin var (a,b):=readInteger2; assert(a>=b); var k:=0; var s:=0; while s Оператор break в цикле while
Например, в случае, когда последовательность чисел должна заканчиваться нулем, то примерный код обработки последовательности может быть таким:
Цикл с постусловием (repeat) в Pascal abc.net
repeat // заголовок цикла // тело цикла until
sum := 0; x := 2; repeat sum += x; x += 2; until x = 22;
Оператор цикла со счетчиком (for) в Pascal abc.net
for [var] i: integer := 1 to 5 do
for var i := 1 to 5 do
begin var (a, b) := readinteger2(‘Введите два целых числа. Первое должно быть меньше второго:’); assert(a 0):
Begin var n:=readInteger(‘N = ‘); assert(n>0); var x:=readReal(‘X = ‘); var sum:=0.0; var f:=-1.0; var num:=1.0; for var i:=1 to n do begin num*=x; sum+=(x+f*num)/i; f*=-1.0; end; writeln(sum) End.
Например, если необходимо как-то обработать последовательность чисел с заданным количеством элементов, то примерный код может быть таким:
begin // предварительные действия N := ReadInteger; // или Read(N); for var i := 1 to N do begin // ввод очередного элемента var b := ReadInteger; //или ReadReal, или Read(b); // обработка очередного элемента end; // вывод результатов обработки end.
Упрощенный цикл LOOP
Для того, чтобы реализовать цикл с конкретным числом итераций, не используя счетчик цикла, возможен упрощенный вариант:
Обработка цифр числа
О том, как выделять из числа отдельные его разряды Вы ознакомились в предыдущем уроке.
Теперь рассмотрим более сложный вариант с обработкой цифр числа.
begin var n := readinteger(‘Введите количество цифр N:’); var num := 0; assert(n > 0); println(‘Введите цифры:’); loop n do begin var a := readinteger; num += a; num := num * 10; end; println(num div 10); end.
Задание: Дано целое число. Найти количество его цифр и их сумму.
begin println(‘Введите целое число:’); var n := readinteger; var (newnum, sign) := (0, sign(n)); n := abs(n); while n > 0 do begin newnum += (n mod 10); newnum *= 10; n := n div 10; end; println(sign * (newnum div 10)); end.
Вложенные циклы
Пример: Дано целое число K > 0, а также K наборов ненулевых целых чисел. Признак завершения каждого набора — число 0. Для каждого набора вывести количество его элементов. Вывести также общее количество элементов во всех наборах.
begin var k:=ReadInteger(‘Введите число’); assert(k>0); var st:=»; assert(k>0); var c:=0; for var i:=1 to k do begin var count:=0; var x:=ReadInteger; while x<>0 do begin count+=1; read(x); end; st+=count.ToString+’ ‘; c+=count; end; Println(‘Кол-во элементов для каждого =’,st); println(‘Всего элементов’,c); end.
Задание: Даны целые числа K > 0, N ≥ 0, а также K наборов целых чисел по N элементов в каждом наборе. Найти количество наборов, содержащих число 2. Если таких наборов нет, то вывести 0.
Pascal: Занятие №3. Часть 1: Цикл с постусловием в Паскаль
Цикл с постусловием в Паскаль (repeat)
Проблема 1: Как избежать ввода отрицательного числа или нуля?
Решение 1: Если вводится неверное число, то нужно вернуться назад к вводу данных (цикл).
Блок-схема решения примера:
Блок-схема решения примера
Решение на Паскале:
Еще одно использование цикла Repeat рассмотрим на примере с решением.
var i,n:integer; begin write (‘количество раз’); readln(n); i:=1; repeat write(0); i:=i+1 until i>n end.
begin var n:=readInteger(‘количество знаков’); var i:=1; repeat write(0); i:=i+1 until i>n end.
В решенной задаче оператор 8-й строки — это счетчик ( i:=i+1 ), который просчитывает количество раз и одновременно является условием для выхода из цикла.
Задача 1. Написать программу решения задачи о печати чисел 3 5 7 9 11 13. Решите задачу дважды в одном файле: используя цикл Repeat и цикл loop (если вы его рассмотрели).
[Название файла: L3task1.pas ]
Узнать о работе оператора с постусловием в Паскале можно также из видеоурока:
Строковый тип данных в Паскаль
Для решения следующей задачи нам пригодится работа со строковым типом данных.
Рассмотрим как объявляются строки в Паскале:
Объявление строковой переменной:
Присваивание значения строковой переменной:
str:=’вот такая вот строка’;
var str1,str2: string; begin str1:=’Привет, ‘; writeln(‘Ваше имя?’); readln(str2); writeln(str1,str2) end.
begin var str1:=’Привет,’; var str2: string; writeln(‘Ваше имя?’); readln(str2); print(str1,str2) end.
Задача 2. Компьютер предлагает человеку ввести слово, после чего распечатывает это слово, снабдив его восклицательным знаком. Затем снова предлагает ввести слово и так до тех пор, пока человек не введет слово «Хватит». Распечатав его с восклицательным знаком, компьютер отвечает: «Хватит так хватит» и заканчивает работу.
Решите задачу дважды в одном файле: для решения использовать цикл с постусловием в Паскаль и цикл loop (если вы его рассмотрели).
[Название файла: L3task2.pas ]
Задача 3. Составьте блок-схему решенного задания.