Оператор цикла repeat в turbo

Оператор цикла repeat в turbo thumbnail

В языке Турбо Паскаль имеются три различных оператора, с помощью которых можно запрограммировать повторяющиеся фрагменты программы – организовать цикл:

  • оператор цикла с предварительным условием;
  • оператор цикла с последующим условием;
  • оператор цикла с параметром.

Для всех операторов цикла характерна следующая особенность. Повторяющиеся вычисления записываются только один раз. Вход в цикл возможен только через его начало. Переменные оператора цикла должны быть определены до входа в циклическую часть. Необходимо предусмотреть выход из цикла: или по естественному его окончанию, или по оператору перехода. Если это не предусмотреть, то циклическая часть вычислений будет повторяться бесконечно. В этом случае говорят, что произошло «зацикливание» выполнения программы.

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

Оператор цикла While

Оператор цикла с предварительным условием While имеет следующий формат:

While <выражение> do <оператор>;

где

While (пока), do (делать) – зарезервированные слова;

выражение- выражение логического типа;

оператор- произвольный оператор.

Оператор цикла действует следующим образом. Предварительно, до начала цикла, (отсюда и название «Оператор цикла с предварительным условием») проверяется логическое выражение. Если выражение имеет значение True(истина), то выполняются операторы циклической части (тело цикла), после чего снова проверяется логическое выражение. Пока выражение имеет значение True(истина) выполняются операторы циклической части. Как только оно становиться ложным – False, происходит выход из цикла. Если с самого начала значение логического выражения ложно (False), то операторы циклической части не выполняются ни разу.

Блок-схема оператора цикла с предварительным условием:

Оператор цикла с предварительным условием (While)

ЗАДАЧА 1. Вычислить сумму целых чисел от 0 до 99.

Program a10; var i:integer; {количество чисел} s:integer; {сумма чисел} begin i:=1; s:=0; while i&lt99&gt do begin s:=s+i; i:=i+1; end; {после выхода из цикла i = 99} i:=i-1; {поэтому уменьшаем на 1} writeln(‘Cумма’,i:4, ‘ чисел равна:’, s:6); end.

Результаты работы программы:

Cумма 98 чисел равна: 4851

ЗАДАЧА 2. Вычислить сумму нечетных целых чисел от 0 до 99.

Program a11; var i:integer; {нечётное число} s:integer; {сумма чисел} begin i:=1; s:=0; while i&lt99&gt do begin s:=s+i; i:=i+2; end; i:=i-2; writeln(‘Сумма нечетных чисел равна:’, s:6); end.

Результаты работы программы:

Cумма нечетных чисел равна: 2401

Пример.

program example1; var ch:char; begin Write(‘Продолжить вычисления (Y/N)?’); ch:=’ ‘; while(UpCase(ch)<>’Y’) and (UpCase(ch)<>’N’)do ch:=Readkey; end.

Примечание:

  • Функция UpCase () преобразует символ в верхний регистр.
  • Функция Readkey () считывает символ с клавиатуры.

Оператор цикла с последующим условием Repeat

Формат оператора:

Repeat

операторы циклической

части программы

Until логическое выражение

Здесь Repeat (повторять), Until (до тех пор) – зарезервированные слова языка.

Блок-схема оператора цикла с последующим условием:

Блок-схема оператора цикла с последующим условием

Оператор цикла с последующим условием Repeat работает следующим образом.

Операторы циклической части повторяются, по крайней мере, один раз до тех пор, пока значение логического выражения ложно (False). Условием прекращения циклических вычислений является истинное (True) значение логического выражения.

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

ЗАДАЧА 3. Вычислить сумму нечетных целых чисел от 0 до 99 (см. Задачу 2).

Program a12; Var i:integer; {нечётное число} s:integer; {сумма чисел} Begin i:=1; s:=0; Repeat s:=s+i; i:=i+2; Until i=99; i:=i-2; writeln(‘сумма нечетных чисел’,’ равна:’, s:6); End.

Результаты работы программы:

Сумма нечетных чисел равна: 2401

ЗАДАЧА 4. Написать программу, которая выводит таблицу квадратов первых пяти целых положительных нечетных чисел

Program a13; var x:integer; {число} y:integer; {квадрат числа} begin writeln(‘Таблица квадратов’); writeln(‘==================’); writeln(‘Число квадрат’); writeln(‘——————-‘); x:=1; repeat y:=x*x; writeln(x:4,y:6); x:=x+2; until x=11; writeln(‘——————-‘); End.

Результаты работы программы:

Таблица квадратов

==================

Число квадрат

——————

1 1

3 9

5 25

7 49

9 81

——————

Оператор цикла с параметром For

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

Блок-схема оператора цикла For

Формат оператора

For i:=m1 to m2 Do

begin

операторы циклической

части программы

end;

здесь For (для), to (до), Do (делать) – зарезервированные слова языка;

i – параметр цикла;

m1, m2 – начальное и конечное значения параметра цикла, могут задаваться выражениями, за исключением типа Real.

В операторе цикла For начальное m1 и конечное значение m2 параметра цикла i должны быть заданы. Параметр цикла i увеличивается/уменьшается автоматически.

Если i=1 и m1>m2, то циклическая часть не выполняется ни разу.

После естественного завершения работы оператора цикла (выход из цикла) значение параметра цикла i не определено.

Если параметр цикла увеличивается, то его шаг равен +1.

Если параметр цикла должен уменьшаться, то в этом случае m1 должно быть больше m2, а вместо служебного слова TO необходимо поставить DOWNTO. Шаг уменьшения равен -1.

ЗАДАЧА 5. Напечатать все буквы латинского алфавита.

Programa14; var ch:char; begin writeln(‘Латинский алфавит:’); for ch:=’A’ to ‘Z’ do write(‘ ‘,ch); end.

Результаты работы программы:

Латинский алфавит:

ABCDEFGHIJKLMNOPQRSTUVWXYZ

ЗАДАЧА 6. Написать программу, которая выводит таблицу квадратов первых десяти целых положительных чисел.

program a15. var x:integer; {число} y:integer; {квадрат числа} i:integer; {параметр цикла} begin writeln(‘Таблица квадратов’); writeln(‘=================’); writeln(‘Число квадрат’); writeln(‘—————–‘); x:=1; for i:= 1 to 10 do begin y:=x*x; writeln(x:4,y:6); x:=x+1; {лучше так!} {y:=i*i;} {writeln(i:4,y:6);} end; writeln(‘—————–‘); end.

Результат работы программы:

Таблица квадратов

==================

Число квадрат

——————

1 1

2 4

3 9

4 16

5 25

6 36

7 49

8 64

9 81

10 100

——————

Источник

Паскаль - Урок 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 Просмотров: 292957

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

Источник

Циклы

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

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

В языке 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.

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

Источник

МОУ Селятинская средняя общеобразовательная школа №2

Наро – Фоминский район Московской области

«Циклы в Turbo Pascal. Решение задач на циклы.»

Проверил: Кащей Владимир Васильевич

Выполнил: слушатель курсов «Методика преподавания

алгоритмизации и программирования в

средней школе» учитель информатики

Читайте также:  Не постоянный цикл менструаций

Высоцкая О.Е.

2011 г.

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

Цикл представляет собой последовательность операторов, которая выполняется неоднократно. В языке Turbo Pascal различают три вида операторов цикла: цикл с предусловием (while), цикл с постусловием (repeat) и цикл с параметром (for).

Следует знать:

  1. подавляющее большинство задач с циклами можно решить разными способами, используя при этом любой из трех операторов цикла;
  2. часто решения, использующие разные операторы цикла, оказываются равноценными;
  3. в некоторых случаях все же предпочтительнее использовать какой-то один из операторов;
  4. самым универсальным из всех операторов цикла считается while, поэтому в случае затруднений с выбором можно отдать предпочтение ему;
  5. цикл repeat имеет очень простой и понятный синтаксис, поэтому с него удобно начинать изучение циклов;
  6. цикл for обеспечивает удобную запись циклов с заранее известным числом повторений;
  7. при неумелом использовании циклов любого типа возможна ситуация, когда компьютер не сможет нормально закончить цикл. При работе в среде Turbo Pascal для выхода из подобной ситуации используется комбинация клавиш +.
  8. если это не помогает, есть и крайнее средство – ++. Одновременное нажатие этих трех клавиш или кнопки Reset, расположенной на системном блоке, позволяет перезагрузить компьютер, при этом данные, относящиеся к работающей программе, будут утеряны.
  9. процедура continue позволяет прервать выполнение тела любого цикла и передает управление на его заголовок, заставляя цикл немедленно перейти

к следующему выполнению.

Циклы с параметром

Если число требуемых повторений заранее известно, то используется оператор, называемый оператором цикла с параметром или циклом со счетчиком.

*цикл по от до

** действие

* конец цикла

Оператор цикла с параметром имеет два варианта записи:

1) вариант с увеличением счетчика

for := to do

2) вариант с уменьшением счетчика

for := downto do

Счетчик – параметр цикла, простая переменная целого типа; – операторы или оператор. Цикл повторяется до тех пор пока значение параметра лежит в интервале между начальным и конечным значениями. В первом варианте при каждом повторении цикла значение параметра увеличивается на 1, во втором – уменьшается на 1.

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

1. Проверяется условие: параметр цикла

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

3. Значение параметра изменяется (увеличивается на 1 или уменьшается на 1).

Если в теле цикла располагается более одного оператора, то они заключаются в операторные скобки begin … end;

Следует знать:

  1. оператор For используется для организации циклов с фиксированным, заранее известным числом повторений;
  2. количество повторений цикла определяется начальным и конечным значениями переменной-счетчика. Оператор For обеспечивает выполнение тела цикла до тех пор, пока не будут перебраны все значения параметра цикла: от начального до конечного;
  3. переменная счетчик должна быть порядкового типа: чаще integer, реже – char, boolean. Использование вещественного типа недопустимо;
  4. начальное и конечное значения параметра цикла могут быть константами, переменными, выражениями и должны принадлежать к одному и тому же типу данных. Начальное и конечное значение параметра цикла нельзя изменять во время выполнения цикла;
  5. параметр цикла For может изменяться (увеличиваться или уменьшаться) каждый раз при выполнении тела цикла только на единицу. Если нужен другой шаг, предпочтительнее использовать циклы с предусловием или с постусловием.

Задача 1. Вывести на экран натуральные числа от 1 до 9 в обратном порядке.

Program z1;

Var i:integer;

Begin

For i:=9 downto 1 do

Writeln(i);

End.

Задача 2.

Вычисление р = n! (n факториал).

program z2;

var p, i, n: integer;

begin

write (‘введите целое n = ‘);

readln (n);

p: = 1;

for i: = 1 to n do

p: = p * i;

write (n, ‘! = ‘,p);

readln

end.

Задача 3.

Составить программу вычисления значения выражения y=1+1/2+1/3+… +1/20.

{В данном случае целесообразно организовать цикл с параметром, изменяющимся от 1 до 20, то есть шаг изменения параметра равен +1. Обозначим: у – очередное значение суммы дробей; n – параметр цикла. Учитывая это, составим программу: }

program z3;

uses crt;

var n: integer;

y: real;

begin

clrscr;

{Задаем начальное значение, равное нулю.}

y:=0;

{Организовываем цикл с параметром от 1 до 20.}

for n:=1 to 20 do

begin

{Находим очередную сумму.}

y:=y+1/n;

{Выводим на экран очередную сумму.}

writeln(‘y=’,y);

end.;

end.

Задача 4.

Из чисел от 10 до 99 вывести те, сумма цифр которых равна S(0

{Обозначим: k – это просматриваемое число; p1 – это первая цифра числа k, р2 – это вторая цифра числа k; s – это сумма цифр данного числа k. Число k будем выписывать только в том случае, когда сумма p1 и р2 будет равна s.}

program z4;

uses crt;

var k,n,p1,p2,s:integer;

begin

clrscr; writeln(‘ целое число n=’); {Задаем целое число.}

readln(n);

for k:=10 to 99 do {Организовываем цикл с параметром от 10 до 99.}

begin

p1:=k div 10; {Выделяем первую цифру.}

р2:=к mod 10; {Выделяем вторую цифру.}

s:=p1+p2; {Находим сумму цифр.}

if s=n then writeln(‘k= ‘,k);{Если сумма цифр равна заданному числу N, то выводим К.}

end;

end.

Задача 5.

Дано натуральное число n (1000

{Обозначим: n – вводимое число; m – дубликат числа n; а – перевертыш числа n; i – переменная цикла для создания перевертыша.}

program z5;

uses crt;

var n, m, a, i: integer;

begin

clrscr;

{Введем четырехзначное целое число.}

writeln(‘N{Запоминаем введенное целое число и задаем начальное значение перевертыша.}

m:=n;а:=0;

{Организуем цикл с параметром от 1 до 4.}

for i:=l to 4 do

{Находим перевертыш числа N}

begin

а:=а*10+ m mod 10; m:= m div 10;

end;

{Если A=N, то данное число является перевертышем.}

if a=n then writeln(‘DA!’)

else writeln(‘NO’);

readln;

end.

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

Если число повторений заранее неизвестно, а задано лишь условие его повторения (или окончания), то используются операторы while и repeat. Оператор While часто называют оператором цикла с предусловием. Так как проверка условия выполнения цикла производится в самом начале оператора.

*цикл пока

**

* конец цикла

Общий вид: While do

;

Тело цикла – простой или составной оператор или операторы. Если операторов в теле цикла несколько, то тело цикла заключается в операторные скобки begin…end. Ключевые слова While и do означают соответственно “пока” и “выполнять”. Когда программа в процессе выполнения впервые достигает оператора while, осуществляется проверка истинности условия. Если условие истинно, то выполняется тело цикла (оператор). После этого происходит возврат к началу фрагмента while do, где проверка условия осуществляется вновь. Цикл будет выполняться до тех пор, пока логическое выражение будет истинным. Как только логическое выражение станет ложным, управление передается следующему за циклом оператору. Если при первом выполнении цикла значение логического оператора будет “ложь”, то цикл не станет выполняться, а управление сразу же передается следующему за while оператору.

Следует знать:

  1. число повторений операторов цикла while определяется в ходе работы программы и, как правило неизвестно;
  2. после слова while записывается условие продолжения выполнения инструкций цикла;
  3. условие – это выражение логического типа: простое выражение отношения или сложное выражение отношения, которое может принимать одно из двух значений: true или false;
  4. для успешного завершения цикла while в его теле обязательно должны присутствовать инструкции, оказывающие влияние на условие выпонения инструкций цикла.

Задача 1. Найти сумму 10 произвольных чисел.

Program z1;

Const

N=10;

Var k, x, s: integer;

Begin

k:=0; s:=0; {k- количество введенных чисел}

while k

begin

k:=k+1;

write(‘Введите число’);

readln(x);

s:=s+x;

end;

writeln(‘Сумма чисел равна’, s);

end.

Задача 2.

Дано натуральное число n. Посчитать количество цифр в числе. {Подсчет количества цифр начнем с последней цифры числа. Увеличим счетчик цифр на единицу. Число уменьшим в 10 раз (тем самым мы избавляемся от последней цифры числа). Далее с получившимся числом проделаем ту же последовательность действий и т. д., пока число не станет равным нулю. Примечание: в теле цикла обязательно должен быть оператор, влияющий на соблюдение условия, в противном случае произойдет зацикливание.}

program z2;

uses crt;

var m, n: longint;

k: integer; {счетчик цифр}

begin

clrscr;

{Вводим целое число.}

writeln(‘Введите N=’); readln(n);

{Запоминаем его и счетчику цифр присваиваем начальное значение.}

Читайте также:  Время стирки в стиральной машине сколько длится цикл

m:=n;k:=0;

{Пока m0 делать цикл.}

while m 0 do

begin

{“Уменьшаем” число на последнюю цифру, т. е. в 10 раз.}

k:=k+1; m:= m div 10; {Inc(k) }

end;

{Вывод количества цифр.}

writeln(‘B числе ‘,n,’- ‘,k, ‘ цифр!’);

readln;

end.

Задача 3.

Вычислить наибольший общий делитель двух натуральных чисел А и В.

program z3;

var a, b: integer;

begin

write (‘введите два натуральных числа’);

readln (a, b);

while ab do

if a>b then a: = a – b

else b: = b – a;

write (‘НОД = ‘, a);

readln;

end.

Задача 4.

Составление таблицы значений функции у = sin х отрезке [0;3.14] с шагом 0,1.

program z4;

var х, у: real;

begin

х: = 0;

writeln (‘x’ : 10,’sinx’ : 10);

while x begin

y: = sin(x);

writeln (x : 10,’ ‘ ,y : 7 : 5);

x: = x + 0.1

end;

readln

end.

Задача 5.

Приближенное вычисление суммы бесконечно убывающего ряда 1+x/1!+x2/2!+x3/3!+ …

Program z5;

var

Eps:real; { Заданное число “эпсилон” }

X: real; { Основание степени в числителе дроби }

S: real; { В этой переменной будем накапливать сумму }

Y; real; { Для хранения очередного слагаемого }

i: integer; { Счетчик числа шагов }

begin

write(‘Введите X и Epsilon:’);

readln(X, Eps);

Y:=l; { Первое слагаемое }

S:=Y; { Положим в сумматор первое слагаемое }

i:=0; { Обнулим счетчик шагов }

while abs(Y)>=Eps do { Пока добавленное слагаемое не меньше “эпсилон”, считаем сумму. Если “эпсилон” сразу не меньше 1, цикл не выполнится ни разу! }

begin { Началось тело цикла }

i:=i+l; { Вычислили номер текущего шага }

Y:=Y*X/i; { Посчитали новое слагаемое }

S:=S+Y { Увеличили сумму на текущее слагаемое }

end; { Тело цикла завершилось. После этой строки компьютер перейдет на оператор while для сравнения переменной “эпсилон” с только что добавленным слагаемым }

{ Теперь выведем результат на экран }

Writeln(‘Сумма чисел=’, S:6:4); readln

end.

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

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

*цикл с постусловием

**

* конец цикла, если

Общий вид: Repeat

. . . . .

until

Вначале выполняется тело цикла, затем проверяется условие выхода из цикла. В любом случае этот цикл выполняется хотя бы один раз. Если условие не выполняется, т.е. результатом выражения является False, то цикл активизируется еще раз. Если условие выполнено, то происходит выход из цикла. Использования операторных скобок, в случае, если тело цикла состоит из нескольких операторов, не требуется.

Следует знать:

  1. число повторений операторов цикла repeat определяется в ходе работы программы и, как правило неизвестно;
  2. инструкции цикла repeat будут выполняться, пока условие, стоящее после until, будет оставаться ложным;
  3. после слова until записывается условие завершения цикла;
  4. условие – это выражение логического типа: простое выражение отношения или сложное выражение отношения, которое может принимать одно из двух значений: true или false;
  5. для успешного завершения цикла repeat в его теле обязательно должны быть инструкции, выполнение которых влияет на условие завершения цикла, иначе цикл будет выполняться бесконечно – программа зациклится. Другими словами, переменная, которая участвует в условии выхода из цикла, обязательно должна изменяться в теле цикла.

Задача 1. Составить программу, которая вводит и суммирует целые числа. Если введено значение 999, то на экран выводится результат суммирования.

Program z1;

Var x, s:integer;

Begin

S:=0;

Repeat

Write(‘Ввести число’);

Readln(x);

If x999 then s:=s+x;

Until x=999;

Writeln(‘Сумма введенных чисел’, s); End.

Задача 2.

Использование цикла repeat для подсчета суммы вводимых чисел до первого отрицательного числа

Program z2;

var

sum, a: real; {sum – для накопления суммы, a – для очередного числа}

begin

sum:=0; {Обнуляем сумму}

a:=0;

repeat

sum:=sum+a; {Добавляем введенное число к сумме}

write(‘Введите число’); {Ввод очередного числа}

readln(a)

until a Проверяем введенное число на отрицательность}

{При выходе из цикла выполняется этот оператор:}

writeln (”,sum:5:3);

readln

end.

Задача 3.

Составить программу планирования закупки товара в магазине на сумму, не превышающую заданную величину.

{Обозначим через x, k – соответствующую цену и количество товара, через p – заданную предельную сумму, через s – общую стоимость покупки. Начальное значение общей стоимости покупки (s) равно нулю. Значение предельной суммы считывается с клавиатуры. Необходимо повторять запрос цены и количества выбранного товара, вычислять его стоимость, суммировать ее с общей стоимостью и выводить результат на экран до тех пор, пока она не превысит предельную сумму р. В этом случае на экран нужно вывести сообщение о превышении: }

program z3;

uses crt;

var c, k, p, s: integer;

begin

clrscr;

{Вводим наличие денежных средств.}

writeln(‘Пред. сумма – ‘);

readln(p);

{Начальное значение стоимости покупки равно нулю.}

s:=0;

repeat

{Вводим цену товара и его количество.}

writeln(‘цена тов. и его кол ‘);

readln (с, k);

{Находим стоимость приобретенных товаров.}

s:=s+c*k;

{Выводим на экран стоимость приобретенных товаров.}

writeln(‘Стоимость покупки = ‘, s);

{Повторяем до тех пор, пока стоимость товара не превысит наличия денежных средств.}

until s>p

writeln(‘Суммарная стоимость покупки превысила предельную сумму’);

readln;

end.

Задача 4.

Написать программу нахождения наибольшего общего делителя (НОД) двух натуральных чисел.

program z4;

uses crt;

var x, y: integer;

begin

clrscr;

{Вводим два целых неотрицательных числа.}

writeln(‘x:=,y: = ‘);readln(x,y);

repeat

if x>y then x:=x mod у else y:=y mod x;

{До тех пор, пока одно из чисел не станет равно нулю.}

until (x=0) Or (y=0);

{Вывод НОД – без условного оператора, так как одно из чисел равно нулю.}

writeln(‘HOД=’,x+y));

readln;

end.

Вложенные циклы

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

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

Задача 1.

Даны натуральные числа n и k. Составить программу вычисления выражения lk+2k+…+nk.

{Для вычисления указанной суммы целесообразно организовать цикл с параметром i, в котором, во-первых, вычислялось бы очередное значение y=ik и, во-вторых, осуществлялось бы накопление суммы прибавлением полученного слагаемого к сумме всех предшествующих (s= s+y).}

program z1;

uses crt;

var n, к, y, i, s, m: integer;

begin

clrscr;

writeln (‘n= k=’); readln(n, k);

s:=0;

for i:=l to n do

begin

у:=1;

for m:=l to к do

begin

{

Нахождение степени k числа i.}

y: = y*i;

end;

{Нахождение промежуточной суммы.}

s:=s+y;

end;

writeln(‘ Ответ: ‘,s);

readln;

end.

Задача 2.

Вычислить сумму 11+22+…+nn.

program z2;

uses crt;

var n, к, y, i, s, m: integer;

begin

clrscr;

writeln (‘n= k=’); readln(n, k);

s:=0;

for i:=l to n do

begin

у:=1;

for m:=l to i do

begin

{Нахождение степени k числа i.}

y: = y*i;

end;

{Нахождение промежуточной суммы.}

s:=s+y;

end;

writeln(‘ Ответ: ‘,s);

readln;

end.

Задача 3.

Написать программу, которая находит и выводит на печать все четырехзначные abcd, числа а, b, с, d – различные цифры, для которых выполняется: ab-cd=a+b+c+d.

{Задачу можно решать несколькими способами. Одним из возможных способов является перебор всех четырехзначных чисел и проверка для каждого из них выполнения условий. Попробуем сократить перебор, для этого преобразуем второе условие:

10а+b-(10c+d)=a+b+c+d;

9(a-c)=2(c+d);

(a-c)/(c+d)=2/9

Проанализировав первое условие, получаем, что а=с+2, d=9-c, следовательно 0program z3;

uses crt;

var a,b,c,d: integer;

begin

clrscr;

for c:=0 to 7 do

begin

a:=c+2; d;=9-c;

for b:=0 to 9 do

begin

if (bc)and(ba)and(bd)

then

write(a,b,c,d);

writeln

end;

end;

readln;

end.Задача 4.

Если мы сложим все цифры какого-либо числа, затем все цифры найденной суммы и будем повторять много раз, мы, наконец, получим однозначное число (цифру), называемое цифровым корнем данного числа. Например, цифровой корень числа 34697 равен 2 (3+4+6+9+7=29; 2+9=11; 1 + 1=2). Составим программу для нахождения цифрового корня натурального числа.

program z4;

uses crt;

var n, k, s: longint;

begin

clrscr;

writeln(‘ число=’); readln(n);

s:=n;

{Пока сумма является двузначным числом.}

while s>9 do

begin

k:=s;s:=0;

{Вычисляем сумму цифр числа.}

repeat

S:=s+k mod 10; k:=k div 10;

until k=0;

end;

writeln(‘ цифр. корень числа ‘,n, ‘ равен ‘,s);

readln;

end.

<