Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Урок из серии Pas ABC.doc
Скачиваний:
10
Добавлен:
17.08.2019
Размер:
694.78 Кб
Скачать

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

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

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

While <условие выполнения цикла> do

begin

<тело цикла>;

end;

Здесь:

<условие выполнения цикла> - булевское выражение;

<тело цикла> - операторы, которые будут повторяться.

На русском языке это звучит примерно так:

пока выполняется условие делай начало

<тело цикла>

конец

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

  1. Проверяется условие выполнения цикла (вычисляется булевское выражение).

  2. Если условие выполняется (значение выражения равно true), то выполняются операторы, составляющие тело цикла.

  3. Если условие не выполняется (значение выражения равно false), то происходит выход из цикла и переход к первому после while оператора.

При использовании цикла с предусловием надо помнить следующее:

  1. Начальное значение переменной цикла нужно присвоить до начала выполнения цикла.

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

  3. Переменная цикла должна изменяться при каждом новом выполнении цикла, иначе цикл будет повторяться бесконечное число раз.

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

program demowhile;

var

k: byte;

x, sum:real;

begin

k:=0; {Счетчик чисел}

sum := 0; {Сумма чисел}

while (k < 10) do {Условие выполнения цикла}

begin

k:= k+1;

write('Введите ',k , '-е число: ');

readln(x); {Ввод очередного числа с клавиатуры}

sum := sum + x;

end;

writeln('Сумма введенных чисел равна ', sum);

end.

В данном примере перед циклом обнуляются значение счетчика введенных чисел k и их суммы sum.

В начале оператора while проверяется условие k < 10.

Если условие верно, то выполняется составной оператор в теле цикла. В этом операторе вводится значение очередного числа, и на это значение увеличивается значение суммы. После этого управление в программе вновь передается оператору цикла while, опять проверяется условие k < 10.

Как только значение станет равно 10, выполнение цикла завершиться, а управление будет передано на оператор, находящийся за словом end, т. е. первый оператор за границей while.

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

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

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

Repeat

<оператор 1> ;

<оператор 2> ;

. . .

<оператор n>;

Until <условие окончания цикла>;

где Repeat (повторять), until (до тех пор).

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

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

  1. Выполняется тело цикла (операторы, заключенные между словами repeat / until).

  2. Проверяется условие выхода из цикла.

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

  4. Если условие не выполняется, то алгоритм повторяется с пункта 1.

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

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

program demorepeat;

var

x, sum:real;

begin

sum := 0; {Сумма чисел}

x:=0; {Очередное число}

repeat {Повторять}

sum := sum + x;

write('Введите очередное число: ');

readln(x);

until x=999; {Условие окончания цикла}

writeln('Сумма введенных чисел равна ', sum);

end.

Мы познакомились с циклами с условием.

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

Урок из цикла: "Язык программирования Паскаль"

Целочисленная арифметика языка Паскаль основана на использовании пяти стандартных целых типов: Byte, Word, ShortInt, Integer, LongInt.

Cо всеми целыми типами связан набор из пяти основных арифметических операций: +, -, *, div, mod.

На этом уроке вы узнаете стандартные приемы, которые используются при решении задач целочисленной арифметики, рассмотрите решение нескольких учебных задач с применением циклов.

Первые три, из перечисленных операций, имеют обычный смысл сложения, вычитания и умножения, соответственно, а последние две определяются так: A div B - частное от деления нацело, A mod B - остаток от деления нацело двух целых чисел A и B.

При этом, для неотрицательных А и В (В‡0), частное A div B показывает, сколько раз делитель - число B, содержится в делимом - числе A; в то же время, остаток A mod B показывает, сколько останется, если из делимого - числа А, вычесть все вхождения в него делителя - числа В.

Например.

15 div 6 = 2 (здесь 2 - частное. Оно показывает, сколько раз делитель - число 6, содержится в делимом - числе 15).

15 mod 6 = 3 (здесь 3 - остаток. Он показывает, сколько останется, если из числа 15, вычесть все вхождения в него числа 6).

Для целых, неотрицательных A и B, операции div и mod связаны простым соотношением: A mod B = A - (A div B)*B.

Большая часть учебных задач целочисленной арифметики построена на свойствах делимости и решается именно с применением операций div и mod.

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

А mod B = 0

- условие делимости целого A на целое B.

A mod 2 = 0

- условие чётности целого A.

A mod 10

- значение последней цифры в десятичной записи целого А (например, 1234 mod 10 = 4).

A div 10

число, десятичная запись которого получится отбрасыванием последней цифры в десятичной записи целого числа А (например, 1234 div 10 =123).

A mod p

- значение последней цифры в p-ичной записи целого А (например, при p=2, A mod 2 - последняя цифра записи А в двоичной системе счисления);

A div p

- число, p-ичная запись которого получится отбрасыванием последней цифры в p-ичной записи целого числа А (например, 510=1012; 510 div 2 =210=102; т.е. из 1012 получили 102);

Рассмотрим примеры решения типовых задач целочисленной арифметики с использованием циклов.

Пример1. Из чисел от 10 до 99 вывести те, сумма цифр которых равна n(0<n<=18).

Вопросы для обсуждения

  1. Каким действием можно выделить последнюю цифру числа?

  2. Каким действием можно выделить первую цифру числа?

Обозначим:

k- это просматриваемое число;

p1 - это первая цифра числа k;

p2 - это вторая цифра числа k;

s - это сумма цифр данного числа k.

Число k будем выводить на экран только в том случае, когда сумма p1 и p2 будет равна s.

Program Primer_1;

Var k,n,p1,p2,s : Integer;

Begin

Writeln('Введите целое число n (0<n<=18):');

Readln(n);

For k:= 10 To 99 Do {перебор всех двузначных чисел}

Begin

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

p2 := k Mod 10; {выделяем вторую цифру}

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

If s = n Then Writeln(k); {если сумма равна n, то выводим k}

end;

end.

Пример 2. Дано натуральное число n (n<=9999). Определить, является ли оно палиндромом (''перевертышем''), с учетом четырёх цифр. Например, палиндромами является числа: 2222, 6116, 0440.