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

Цикл с постусловием until thumbnail

Цикл с постусловием (REPEAT-UNTIL)

Цикл с постусловием в языке программирования Pascal реализуется с помощью оператора REPEAT… UNTIL.

Синтаксис

repeat {Операторы} until условие выхода из цикла;

  • Условие – это логическое выражение булевского типа (операция отношения или логическая операция)
  • Тело цикла выполняется в любом случае, затем проверяется условие.
  • Инструкции тела цикла (операторы) выполняются в том случае, если значение логического выражения равно false, в противном случае осуществляется выход из цикла
  • Оператор repeat может быть использован для проверки правильности ввода исходных данных
  • Нижняя граница тела цикла определена служебным словом until, поэтому операторные скобки begin и end могут быть опущены (однако если операторы тела цикла заключены в операторные скобки – это не является ошибкой).
  • Операторы repeat и while взаимозаменяемы. То есть, практически любую задачу можно решить как с помощью цикла с постусловием, так и с помощью цикла с предусловием. Использование того или иного цикла зависит от предпочтения программиста.

Блок-схема

do_while

Примеры задач на использование цикла с постусловием

Пример №1

  1. Постановка задачи:

Выводится на экран последовательность 20 случайных чисел из промежутка [-10,10]. Определить количество отрицательных чисел больших -5 в данной последовательности.

  1. Блок-схема

pr_r_1

  1. Кодирование

program psldv; var i,j:integer; x:real; begin randomize; {процедура инициализации генератора случайных чисел} i:=20; j:=0; repeat x:=random(20)-10; {генерируем случайное число} write(x:4:0); {выводим это число на экран} if (x > -5) and (x < 0) then inc(j); {процедурой inc увеличиваем аргумент на единицу, считаем найденные числа} dec(i); {процедурой dec уменьшаем аргумент на единицу, определяем условие выхода из цикла} until i=0; writeln; write(‘Количество отрицательных чисел больших -5 равно ‘, j); end.

  1. Тестирование

-10 8 -6 1 7 8 -1 1 -5 -5 5 -9 -4 -5 -7 -9 -10

6 9 5

Количество отрицательных чисел больших -5 равно 2

Пример №2

  1. Постановка задачи:

Определить сумму и количество цифр числа.

  1. Блок-схема

pr_r_2

  1. Кодирование

program sum; var s,a:byte; n:longint; begin write(‘n = ‘); readln(n); s := 0; a := 0; repeat s := s + n mod 10; {Суммируем цифры} a := a + 1; {определяем количество цифр} n := n div 10; {Уменьшаем разряд, определяем условие выхода из цикла} until n = 0; writeln(‘Сумма цифр числа равна ‘, s); writeln(‘Количество цифр в числе ‘, a); end.

  1. Тестирование

n = 12345

Сумма цифр числа равна 15

Количество цифр в числе 5

Пример №3

  1. · Постановка задачи:

Вычислить сумму бесконечной последовательности

pi/4=1-1/3+1/5-1/7+…+(-1)n-1/(2n-1) с точностью до 1e-7.

  1. · Блок-схема

pr_r_3

  1. Кодирование

program sum; const eps = 1e-7; {Точность вычислений} var s,q,u:real; n:longint; k:shortint; begin s := 0; n := 1; k := 1; repeat q := s; {Сохраняем начальное значение суммы} s := s + k/(2*n – 1); {Получаем очередное слагаемое} k := k * (-1); {Определение знака следующего слагаемого} n := n + 1; u := s – q; {Текущая погрешность} until abs(u) < eps; {Выходим из цикла, если погрешность станет меньше eps} writeln(‘S = ‘, s:2:8, s*4:15:8); writeln(Pi:29:8) {Для сравнения выводим встроенную константу Pi} end.

  1. Тестирование

S = 0.78539821 3.14159285

3.14159265

(Для демонстрации точности вычисления в данной задаче полученная сумма умножается на 4, что дает приблизительное значение числа “пи”. Полученное значение числа “пи” сравнивается с выводом встроенной константы Pi.

Примечание: ряд сходится медленно, так что не стоит делать точность больше или eps меньше.)

Источник

Автор admin Опубликовано 10 декабря 2011

Урок из серии: «Программирование на Visual Basic.NET для школьников»

Существует несколько разновидностей циклов с неизвестным числом повторений.

На прошлом уроке мы рассмотрели цикл с предусловием Do While.

На этом уроке познакомимся с ещё одной разновидностью цикла с условием – циклом с постусловием, научимся его использовать.

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

Алгоритм выполнения оператора:

  1. Выполняется тело цикла.
  2. Изменяется значение переменной цикла.
  3. Проверяется условие окончания цикла.
  4. Если условие истинно (True), поисходит выход из цикла.
  5. Если условие ложно(False), то действия повторяются с пункта 1.

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

Цикл с постусловием реализуется с помощью конструкции Do . . . Loop Until.

Общий вид оператора:

Do <тело цикла> Loop Until <условие выхода>

Преждевременный выход из цикла программист может организовать при помощи конструкции Exit Do.

Проект «Проверка номера»

Смоделируйте ситуацию проверки правильности набора номера телефона в городе N. Будем считать, что телефон набран верно, если количество набранных цифр соответствует длине телефонного номера для данного города.

Технология выполнения

  1. Создайте интерфейс по образцу.
  2. Установите для текстового поля значение свойства MaxLength равным 9 (максимальное количество цифр, которое позволяется ввести в поле), выберите для надписи label2 значение свойства BorderStyle равным Fixed3D.
  3. В окне редактора кода после строки

    «Код, автоматически созданный конструктором форм Windows»

    введите строку кода: Const nmax = 6 ‘Константа, определяющая длину набора в данном городе

  4. Наберите программный код процедуры Button1_Click:

    Dim n As Integer ‘Введенный номер Dim k As Byte ‘Счетчик цифр n = Val(TextBox1.Text) k = 0 Do k = k + 1 n = n 10 Loop Until n = 0 If k = nmax Then Label2.Text = “Соединение возможно” : Beep() ElseIf k < nmax Then Label2.Text = “Неправильно набран номер: не хватает цифр” Else Label2.Text = “Неправильно набран номер: слишком много цифр” End If

  5. Запустите программу несколько раз для проверки всех возможных ситуаций.
  6. сохраните программу.

Проект «Простые множители»

Требуется создать программу разложения произвольного целого числа на простые множители. Предлагается следующий алгоритм: сначала число делится на 2 до тех пор, пока не станет нечетным. Затем оно делится последовательно на 3, 5, 7, пока результат леления не станет равным 1.

Технология выполнения

  1. Создайте интерфейс по образцу.
  2. С помощью окна Свойства задайте следующие значения свойств:
    ОбъектСвойствоЗначение
    Form1Text«Простые множители»
    Label1TextTextAlign«Введите число:»

    MiddleCenter

    TextBox1TextMax

    Length

    TextAlign

    пусто

    10

    Center

    ButtonText

    TextAlign

    «Разложить»

    MiddleCenter

    Label2Text

    TextAlign

    BorderStyle

    пусто

    MiddleCenter

    Fixed3D

    Для текстового поля TextBox1 свойство MaxLength задает максимальную длину числа при вводе данных с клавиатуры.

  3. Наберите текст программы

    ‘ Разложение на простые множители Dim n, n1 As Integer ‘Исходное число и его дубликат Dim del As Byte ‘Простой делитель Dim str As String ‘Строка для вывода n = Val(TextBox1.Text) del = 2 n1 = n Str = “” Do If n Mod del = 0 Then n = n del ‘В строку добавляется новый множитель str = str & CStr(del) ‘Выводится “*” после всех множителей, кроме последнего If n <> 1 Then str = str & “*” Else ‘После “2” все простые множители нечетны If del = 2 Then del = 3 Else del = del + 2 End If Loop Until n = 1 Label2.Text = n1 & “=” & str

  4. Сохраните программу.
  5. Доработайте программу таким образом, чтобы она подсчитывала количество множителей.
  6. Введите проверку на равенство подсчитанного количества множителей единице. Если равенство выполняется, выведите сообщение, что введенное число является простым
  7. Сохраните доработанную программу.

До встречи на следующем уроке.

Источник

На занятии рассматривается цикл с постусловием в Паскаль Repeat и происходит знакомство со строковым типом данных

Основной задачей портала labs-org.ru является предоставление возможности получения навыков решения практических задач с использованием языка программирования Pascal. На основе решенных примеров и заданий по Паскалю, изложенных по мере увеличения их сложности, даже новичкам будет достаточно просто усвоить предоставленный материал.

Цикл с постусловием в Паскаль (repeat)

Пример: Ввести целое положительное число (n) и определить четное ли оно.

Проблема 1: Как избежать ввода отрицательного числа или нуля?

Решение 1: Если вводится неверное число, то нужно вернуться назад к вводу данных (цикл).

Проблема 2: Неизвестно, сколько шагов надо сделать.

Решение 2: Надо остановиться, когда n > 0, т.е. надо делать «до тех пор пока n не станет больше0».

  • Один раз тело цикла надо сделать в любом случае => проверку условия цикла надо делать в конце цикла (цикл с постусловием)!.
  • Цикл Repeat в Паскале используется для организации повторений (итераций) с заранее неизвестным их числом.
  • Цикл повторяется до тех пор, пока не станет истинным некоторое условие.

repeat оператор1; оператор2; . . .; операторN until условие {до тех пор, пока условие не станет истинным}

Блок-схема решения примера:

Блок-схема решения примера

Блок-схема решения примера

Решение на Паскале:

Цикл repeat пример на паскале

  • Операторы образуют тело цикла и будут выполняться до тех пор, пока значение “условие” не станет равно true, т.е. не станет истинным.
  • Условием может быть переменная или логическое выражение.
  • Проверка условия осуществляется уже после первого прохождения операторов тела структуры, т.е. после первой итерации, т.о. цикл с постусловием в Паскаль обязательно выполнится хотя бы один раз, независимо от истинности условия.

Еще одно использование цикла Repeat рассмотрим на примере с решением.

Пример: Печатать «ноль» указанное количество раз

Показать решение:

1 2 3 4 5 6 7 8 9 10var 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 7var str1,str2: string; begin str1:=’Привет, ‘; writeln(‘Ваше имя?’); readln(str2); writeln(str1,str2) end.

Теперь снова возвращаемся к нашему циклу repeat.

Задача 2. Компьютер предлагает человеку ввести слово, после чего распечатывает это слово, снабдив его восклицательным знаком. Затем снова предлагает ввести слово и так до тех пор, пока человек не введет слово «Хватит». Распечатав его с восклицательным знаком, компьютер отвечает: «Хватит так хватит» и заканчивает работу. Для решения задачи использовать цикл с постусловием в Паскаль.

Дополнительно: Перед выводом каждого слова необходимо выводить его порядковый номер.

Источник

Циклы

Здравствуйте, дорогие читатели! Вот мы с вами и подошли к изучению циклов. Циклы в Паскаль. Что это такое? Как этим пользоваться? Для чего они нужны? Именно на эти вопросы я сегодня и отвечу.

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

В языке 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> станет меньше <конечное_значение>, выполнение цикла прекратится.

Два важных примечания:

  1. Цикл повторяется, пока значение значение счетчика лежит в отрезке [значение ; конечное_значение].
  2. Изменять значение счетчика внутри тела нельзя! Вот что выводит компилятор:

for

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

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.

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

Источник

Паскаль - Урок 6: Циклы while, for, repeat

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

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

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

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

for i:= 1 to n do // присваиваем i сначала одному, потом двум, трем, …, n

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

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

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

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

Структура цикла с предусловием: WHILE DO begin end;

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

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

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

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

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

Паскаль - Урок 6: Циклы while, for, repeat

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

Пример:

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

program example-while;

var sum:real; n:real; BEGIN sum:=0; n:=1; while n

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

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

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

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

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

Формат записи, структура цикла: REPEAT UNTIL ; Program test2; Var b:Real; Begin b:=100; Repeat b:=b/2; Until b

Выводы:

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

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

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

Предыдущий урок

Дата: 2012-01-06 19:31:43 Просмотров: 294220

Теги: Паскаль Pascal циклы уроки

Источник

Читайте также:  Читать цикл книг колесо времени