Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Начальный курс информатики. Часть 2. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
850 Кб
Скачать

Ответ: S = 6.

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

Форма записи: repeat

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

<оператор N>

until <логическое выражение>

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

выполняется еще раз и т.д.

 

Повторение выполнения

тела цикла происходит до тех

пор, пока условие ложно. Если условие истинно, то происходит

выход из цикла (рис. 16).

 

Особенности выполнения оператора цикла с постуслови-

ем: логическое выражение, как и

в предыдущем случае, играет

роль условия, а оператор или серия операторов, находящаяся между служебными словами repeat until, составляет тело цикла. Но в отличие от оператора цикла с предусловием минимальное количество повторений тела цикла в этом случае - 1. Процесс за-

вершается, когда после очередного повторения заданной последовательности операторов логическое выражение примет (впервые) значение true

61

Оператор 1

Оператор 2

Оператор N

false

Лог. выр.

true

Рис. 16. Блок-схема цикла с постусловием

Пример 23. Определить значение переменной S после выполнения данного фрагмента программы.

Решение: пошаговое выполнение.

Ответ: S = 6.

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

Если заранее известно число повторений, то цикл можно организовать с помощью оператора, в котором управление циклом осуществляется с помощью переменной скалярного типа (параметра), которая в этом циклическом процессе принимает

62

последовательные

значения

от

заданного

начального

до

заданного конечного.

 

 

 

 

 

Форма записи:

 

 

 

 

 

for <упр. переменная>:= A to В do

<оператор>; где

 

×упр. переменная - управляющая переменная (параметр цикла);

×оператор (может быть составным) - тело цикла;

×А – начальное значение параметра;

×В – конечное значение параметра.

Начальное и конечное значения управляющей переменной могут быть представлены константами, переменными или арифметическими выражениями. Они определяются один раз в начале выполнения оператораfor и не изменяются во время

выполнения этого оператора.

 

Порядок

выполнения: оператор цикла с

параметром

предусматривает

присваивание

параметру

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

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

for <упр. переменная>: = A downto В do <оператор>.

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

Пример 24. Определить значение переменной S после выполнения данного фрагмента программы.

Решение: пошаговое выполнение.

63

Ответ: S = 6.

Пример 25. Дано натуральное число N. Вычислить значение выражения F = 1 × 2 ×3 ×4 ××N.

Решение: program Fakt; var I, F, N:integer; begin

writeln(‘Введите натуральное число N’); readln(N);

F:= 1;

{указываем фрагменты вычисления выражения с использованием различных операторов цикла представлена в табл. 21}

 

 

Таблица 21

{с предусловием}

{с постусловием}

{с параметром}

 

I:=1;

I:=1;

 

 

while I<=N do

 

 

repeat

for I:=1 to N do

 

begin

 

F:=F · I;

 

F:=F · I;

F:=F · I;

 

I:=I +1

 

I:=I+1

 

 

until I>N;

 

 

end;

 

 

 

 

 

writeln(‘F=’, F) end.

Пример 26. Дано натуральное число N. Вычислить 2N.

Решение: Известно, что 2N = 2 × 2 ×2 ××2, где количество сомножителей известно и равно n. Поэтому при организации по-

64

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

program Step1; var I, St, N:integer; begin

writeln(‘Введите натуральное число N’); readln(N);

St:= 1;

for I:=1 to N do

St:= St · 2;

writeln(‘Значение степени = ’, St) end.

Пример 27. Дано натуральное число n и вещественное a. Вычислить an.

Решение: При написании программы учтем следующее:

ì

ï1, если n = 0 a n = ïía n , если n > 0

ïï 1 , если n < 0

îa n program Step2; var i, St, n:integer; a: real;

begin

writeln(‘Введите основание степени – вещественное число’); readln(a);

writeln(‘Введите показатель степени – целое число’); readln(n);

{найдем значение степени числа a, где показатель степени - модуль числа n}. St:= 1;

for i:=1 to abs(n) do

St:= St · a;

65

{если показатель степени отрицательное число, то определяем степень числа как 1/St}

if n < 0 then St:= 1/St; writeln(‘Значение степени = ’, St) end.

Пример 28. Определите, что будет напечатано в результате работы следующего фрагмента программы:

var k, s: integer; begin

s:= 0; k:= 0;

while s < 1024 do begin s:= s + 10;

k:= k + 1; end; write(k); end.

Решение:

 

 

 

 

1)

из программы видно, что начальные значения пере-

менных k и s равны нулю;

 

 

 

2)

цикл

заканчивается,

когда

нарушается

условие

s < 1024, то есть количество шагов цикла определяется измене-

нием переменной s;

 

 

 

3)

после

окончания цикла

выводится значение перемен-

ной k;

 

 

 

 

 

4)таким образом, задача сводится к тому, чтобы определить число шагов цикла, необходимое для того, чтобы значение s стало не меньше 1024;

5)с каждым шагом цикла значениеs увеличивается на 10, а значение k – на единицу, так что фактически k – это счётчик шагов цикла;

6)поскольку s увеличивается на 10, конечное значение s должно быть кратно 10, то есть это 1030 > 1024;

66

7)для достижения этого значения переменнуюs нужно 103 раза увеличить на 10, поэтому цикл выполнится 103 раза;

8)так как k – это счётчик шагов цикла, конечное значение k будет равно 103.

Ответ: 103.

Пример 29. Определите, что будет напечатано в результате работы следующего фрагмента программы:

var k, s: integer; begin

k:=5; s:=2;

while k < 120 do begin

s:=s+k; k:=k+2; end; write(s); end.

Решение:

1) начальные значения переменных k и s равны соответственно 5 и 2;

2) цикл заканчивается, когда нарушается условие k < 120, то есть количество шагов цикла определяется изменением переменной k;

3)после окончания цикла выводится значение переменной s;

4)с каждым шагом цикла значениеs увеличивается на

k, а затем значение k – на 2, так что к начальному значению s добавляется сумма членов арифметической прогрессии с начальным значением a1 = 5 и разностью d = 2;

5) поскольку начальное значение k равно 5 и с каждым шагом оно увеличивается на2, переменная k принимает последовательно нечётные значения: 5, 7, 9, …;

67

6)цикл заканчивается, когда значение k становится не меньше 120; поскольку k всегда нечётное, конечное значение k равно 121;

7)поскольку значение k увеличивается после того, как увеличивается значение s, значение 121 уже не входит в сумму, то есть последний элемент последовательности an=121-2 = 119:

s= 2 + a1 + a2 + ... + an = 2 + 5 + 7 + 9 +... +119 ;

8)количество n членов последовательности, которые входят в сумму, можно вычислить: чтобы из 5 получить 119 нужно 57 раз добавить шаг 2, поэтому общее число элементов последовательности равно n = 58 (на один больше);

9)теперь используем формулу для вычисления суммы членов арифметической прогрессии:

Sn = 5 + 7 + 9 + ... +119 = 5 +119 ×58 = 62 ×58 = 3596 2

10) к этой сумме нужно добавить начальное значение переменной s, равное 2:

s = 2 + 3596 = 3598 .

Ответ: 3598.

Пример 30. Дано натуральное n. Вывести цифры, входящие в запись числа и определить их количество.

Решение: Для выделения цифр из числа воспользуемся операцией получения остатка от деления– mod и операцией целочисленного деления div.

Program CIFR1; var n, kol, c:integer; begin

writeln(‘Введите натуральное число n’); readln(n); kol:= 0;

while n<>0 do begin

{получение очередной цифры} c:=n mod 10;

writeln(c); kol:= kol + 1;

68

{«отбрасывание» выделенной цифры} n:= n div 10

end;

writeln(‘Количество цифр в числе - ’, kol) end.

Вопросы и задания

1.Определить значение переменной S после выполнения следующих операторов:

a) S:= 0; I:= 0;

while I < 5 do I:=I+1; S:=S+1/I b) S:= 0; I:= 1;

while I >1 5 do begin S:=S+1/I; I:=I-1 end; c) S:= 0; I:=1;

repeat S:=S+1/I; I:=I-1 until I <=1; d) S:=1; N:=1;

for I:=2 to N do S:=S+1/I;

2.Определить значение переменной S после выполнения следующего фрагмента программы:

a) S:=1; i:=1;

b) S:=0; i:=7;

while i < 5 do

while i > 1 do

begin

begin

S := S + i· (i+1);

S := S + i div 2;

i := i + 1;

i := i - 1;

end;

end;

3. Определить значение переменной P после выполнения следующего фрагмента программы:

P:=1; i:=3; while i <= 9 do begin

P := P · (i div 3); i := i + 1;

end;

69

4. Определить значение переменнойs после выполнения следующего фрагмента программы:

a) n := 1;

b) n := 4;

s := 0;

s := 0;

while n <= 101 do

while n <= 8 do

begin

begin

s := s + 7;

s := s + 15;

n := n + 1

n := n + 1

end;

end;

5. Определить значение переменнойn после выполнения следующего фрагмента программы:

n := 0;

s := 512;

while s >= 0 do begin

s := s - 20; n := n + 1 end;

6. Определить значение переменнойs после выполнения следующего фрагмента программы:

n := 14; s := 0;

while n <= 18 do begin

s := s + 25; n := n + 1 end;

7. Определить, что будет напечатано в результате работы фрагмента программы:

a)

b)

c)

var k, s: integer;

var k, s: integer;

var k, s: integer;

begin

begin

begin

s:= 0;

s:= 0;

s:= 1;

k:=0;

k:= 1;

k:= 0;

 

 

 

70

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]