Информатика
..pdf6. Снова вычисляется значение логического выражения i>5. Поскольку выражение 4>5 равно false, выполняются операторы тела цикла. Таким образом, значения переменных x и y становятся равными x=15 и y=0.
7.Значение счетчика увеличивается на 1, т.е. переменная i становится равной i=5.
8.Заново вычисляется значение логического выражения i>5. Поскольку выражение 5>5 равно false, выполняются
операторы тела цикла. Таким образом, значения переменных x и
yстановятся равными x=15 и y=-1.
9.Значение счетчика увеличивается на 1, т.е. переменная i становится равной i=6.
10.Вычисляется значение логического выражения i>5. Поскольку выражение 6>5 равно true, выполнение цикла завершается.
Пример 5.
for j:=4 to 3 do
z:=abs(x+y);
В данном примере переменные j, x, y, z имеют тип
integer.
Поскольку в данном случае начальное значение счетчика больше конечного значения, оператор тела цикла не будет выполнен ни разу. Рассмотрим особенности выполнения этого цикла более детально, в соответствии с блок-схемой на рис. 3:
1.В первую очередь переменная-счетчик j принимает начальное значение, равное j=4.
2.Далее вычисляется значение логического выражения j>3, т.е. значение счетчика сравнивается с конечным значением. Поскольку выражение 4>3 равно true, выполнение цикла завершается. Таким образом, операторы тела цикла не выполнились ни разу.
Пример 6.
for i:=3 downto 1 do x:=x+sqr(i);
121
В данном примере переменные i и x имеют тип integer. Рассмотрим особенности выполнения этого цикла более детально. Пусть до начала выполнения цикла переменная x при-
няла значение x=100.
1.В первую очередь переменная-счетчик i принимает начальное значение, равное i=3.
2.Далее вычисляется значение логического выражения i<1, т.е. значение счетчика сравнивается с конечным значением. Поскольку выражение 3<1 равно false, выполняется оператор тела цикла:
x:=x+sqr(i);
Таким образом, переменная x становится равной 109.
3. Значение счетчика уменьшается на 1 (а не увеличивается, как было в случае с ключевым словом to), т.е. переменная i становится равной i=2.
4. Снова вычисляется значение логического выражения i<1. Поскольку выражение 2<1 равно false, выполняется оператор тела цикла, т.е. переменная x становится равной 113.
5.Значение счетчика уменьшается на 1, т.е. переменная i становится равной i=1.
6.Снова вычисляется значение логического выражения i<1. Поскольку выражение 1<1 равно false, выполняются
операторы тела цикла, т.е. переменная x становится равной 114.
7.Значение счетчика уменьшается на 1, т.е. переменная i становится равной i=0.
8.Заново вычисляется значение логического выражения i<1. Поскольку выражение 0<1 равно true, выполнение цикла завершается.
Пример 7.
for i:=1 downto 10 do begin
a:=(b+c)/2;
d:=sqrt(a); end
122
В данном примере переменная i имеет тип integer, а остальные переменные – тип real.
Поскольку в данном случае начальное значение счетчика меньше конечного значения, последовательность операторов между begin и end не будет выполнена ни разу. Рассмотрим особенности выполнения этого цикла более детально:
1.В первую очередь переменная-счетчик i принимает начальное значение, равное i=1.
2.Далее вычисляется значение логического выражения i<10, т.е. значение счетчика сравнивается с конечным значени-
ем. Поскольку выражение 1<10 равно true, выполнение цикла завершается. Таким образом, операторы тела цикла не выполнились ни разу.
2.5. Рекомендации по использованию циклов
Часто встречающимися ошибками при программировании циклов являются использование в теле цикла переменных, которым не были присвоены начальные значения, а также неверная запись условия продолжения цикла. Нужно помнить и о том, что в операторе while истинным должно являться условие повторения вычислений, авоператореrepeat – условиеихокончания.
Чтобы избежать ошибок, рекомендуется:
1)не забывать о том, что, если в теле циклов while и for требуется выполнить более одного оператора, нужно заключать их в блок, т.е. между ключевыми словами begin и end;
2)убедиться, что всем переменным, встречающимся в правой части операторов присваивания в теле цикла, до этого присвоены значения, а также проверить, возможно ли выполнение других операторов;
3)проверить, изменяется ли в теле цикла хотя бы одна переменная, входящая в условие продолжения цикла;
4)предусматривать аварийный выход из итеративного цикла по достижении некоторого предельно допустимого количества итераций.
123
2.6.Процедуры передачи управления
ВПаскале есть несколько стандартных процедур, изменяющих последовательность выполнения операторов:
1)break – завершает выполнение цикла, внутри которого записана;
2)continue – выполняет переход к следующей итерации
цикла;
3)exit – выполняет выход из программы или подпрограммы, внутри которой записана;
4)halt – немедленно завершает выполнение программы. Рассмотрим примеры применения процедур передачи
управления.
Пример 8. x:=3; y:=4;
for i:=1 to 5 do begin
x:=x+1;
if x>=5 then break;
y:=y-2;
end
Рассмотрим особенности выполнения данного цикла.
1.В первую очередь переменная-счетчик i принимает начальное значение, равное i=1.
2.Далее вычисляется значение логического выражения i>5, т.е. значение счетчика сравнивается с конечным значением. Поскольку выражение 1>5 равно false, выполняются операторы тела цикла:
а) сначала выполняется оператор присваивания x:=x+1;,
врезультате которого переменная x становится равной 4;
б) затем выполняется условный оператор if. Поскольку выражение4>=5 равноfalse, то процедураbreak невыполнится;
124
в) далее выполняется оператор присваивания y:=y-2;, в результате которого переменная y становится равной 2;
3)значение счетчика цикла автоматически увеличивается на 1, т.е. переменная i становится равной i=2;
4)снова вычисляется значение логического выражения i>5. Поскольку выражение 2>5 равно false, выполняются операторы тела цикла:
а) сначала выполняется оператор присваивания x:=x+1;,
врезультате которого переменная x становится равной 5;
б) затем выполняется условный оператор if. Поскольку выражение 5>=5 равно true, выполнится процедура break и произойдет выход из цикла. Таким образом, оператор присваивания y:=y-2; уже выполняться не будет.
В результате выполнения последовательности операторов переменные x и y приняли следующие значения: x=5, y=2.
Далее рассмотрим аналогичный пример, но с использованием процедуры continue.
Пример 9. x:=3; y:=4;
for i:=1 to 5 do begin
x:=x+1;
if x>=5 then continue;
y:=y-2;
end
Рассмотрим особенности выполнения данного цикла.
1.В первую очередь переменная-счетчик i принимает начальное значение, равное i=1.
2.Далее вычисляется значение логического выражения i>5, т.е. значение счетчика сравнивается с конечным значением. Поскольку выражение 1>5 равно false, выполняются операторы тела цикла:
125
а) сначала выполняется оператор присваивания x:=x+1;, в результате которого переменная x становится равной 4;
б) затем выполняется условный оператор if. Поскольку выражение 4>=5 равно false, процедура continue не выполнится;
в) далее выполняется оператор присваивания y:=y-2;, в результате которого переменная y становится равной 2.
3.Значение счетчика цикла автоматически увеличивается на 1, т.е. переменная i становится равной i=2.
4.Снова вычисляется значение логического выражения i>5. Поскольку выражение 2>5 равно false, выполняются операторы тела цикла:
а) сначала выполняется оператор присваивания x:=x+1;,
врезультате которого переменная x становится равной 5;
б) затем выполняется условный оператор if. Поскольку выражение 5>=5 равно true, выполнится процедура continue и произойдет переход к следующей итерации цикла. Таким образом, оператор присваивания y:=y-2; не выполнится, а сразу произойдет автоматическое увеличение на 1 счетчика цикла i, снова вычислитсязначениелогического выраженияi>5 ит.д.
В результате выполнения последовательности операторов переменные x и y примут следующие значения: x=8, y=2.
3. Задания к работе
Задания № 1–2 выполняются на компьютере.
Задание № 1. Написать на языке Турбо-Паскаль три варианта программы для решения следующей задачи с помощью операторов while, repeat и for соответственно.
1. Дано натуральное число N. Вычислить
S = 1− 12 + 14 − 18 + + (−1)n 21n .
126
2. Дано натуральное число N. Вычислить
S = |
1 |
|
+ |
1 |
+ + |
1 |
. |
|
sin1 |
sin1+ sin 2 |
sin1+ sin 2 + + sin N |
||||||
|
|
|
|
3. Дано натуральное число N. Вычислить произведение первых N сомножителей:
P= 23 54 76 2N2N+ 1.
4.Дано натуральное число N. Вычислить
cos1 |
|
cos1 |
+ cos2 |
|
cos1+ cos2 + + cos N . |
sin1 |
|
sin1 |
+ sin 2 |
|
sin1+ sin 2 + + sin N |
5.Дано действительное число. Вычислить
x− x3 + x5 − x7 + x9 − x11 + x13 .
3! 5! 7! 9! 11! 13!
6.Даны натуральное n, действительное x. Вычислить
S = sin x + sinsin x + + sinsin sin x.
n раз
7. Даны действительное число a, натуральное число n. Вычислить
P= a(a + 1) (a + n − 1).
8.Даны действительное число a, натуральное число n. Вычислить
P= a(a − n)(a − 2n) (a − n2 ).
9.Даны действительное число a, натуральное число n. Вычислить
S = 1a + a12 + a14 + + a21n−2 .
127
10. Дано действительное x. Вычислить
(x − 1)(x − 3)(x − 7) (x − 63) (x − 2)(x − 4)(x − 8) (x − 64).
11. Вычислить
(1+ sin 0,1)(1+ sin 0,2) (1+ sin10).
12. Даны натуральное n, действительное x. Вычислить sin x + sin x2 + + sin xn .
13. Дано натуральное n. Вычислить
S= 1 2 + 2 3 4 + + n (n + 1) 2n.
14.Дано натуральное число n. Вычислить
|
|
1 |
|
|
1 |
|
|
|
1 |
|
|
||
P = 1 |
− |
|
|
1 |
− |
|
1 |
− |
|
|
|
, где n |
|
2 |
2 |
2 |
n |
2 |
|||||||||
|
|
|
|
|
3 |
|
|
|
|
|
|
15. Дано натуральное число n. Вычислить
P = 1 |
|
|
1 |
|
1 |
|
1 |
|
|
1 |
||||
1 |
− |
|
1 |
− |
|
1 |
− |
|
1 |
− |
|
|||
2 |
4 |
6 |
2n |
|||||||||||
|
|
|
|
|
|
|
|
|
|
16. Дано натуральное число n. Вычислить
S= 1!+ 2!| +3!+ + n! (n > 1).
17.Дано натуральное число n. Вычислить
n |
|
1 |
|
|
|
|
|
. |
|
( |
) |
2 |
||
= |
|
|
||
k 1 |
|
2k + 1 |
|
|
18. Вычислить по схеме Горнера
> 2.
.
y = x10 + 2x9 + 3x8 + + 10x + 11.
128
Вычисление значения многочлена с использованием схемы Горнера происходит следующим образом:
an xn + an−1xn−1 + ... + ai xi + ... + a1x1 + a0 =
=(...(an x + an−1)x + ... + ai x + ... + a1 )x + a0 .
19.Числа Фибоначчи (fn) определяются формулами
f0 = f1 = 1; fn = fn−1 + fn−2 при n = 2,3, .
Определить f40.
20. Дано натуральное n. Вычислить
y= 1 3 5 (2n − 1).
21.Дано натуральное n. Вычислить
y = 2 4 (2n).
22. Вычислить
y= cos x + cos x2 + cos x3 + + cos xn .
23.Вычислить
y= sin1+ sin1,1+ sin1,2 + + sin 2.
24.Даны натуральные числа n и k. Вычислить
k + 2k + + k (n − 1) + kn .
Пример выполнения задания № 1:
Используя операторы цикла while, repeat и for, необходимо составить три варианта программы вычисления N!
Известно, что факториал числа N – это произведение всех натуральных чисел от 1 до N включительно:
N
N ! = 1 2 ... N = ∏i .
i=1
129
Ниже приведен пример выполнения данного задания в системе Турбо-Паскаль при использовании оператора while:
Рассмотрим особенности данной программы.
Переменные, соответствующие счетчику цикла (переменная i), факториалу (f) и числу N (n), объявлены в разделе описания переменных var и имеют целый тип integer.
Исполняемые операторы программы располагаются между служебными словами begin и end.
Известно, что факториал может быть вычислен только для натурального числа, поэтому с помощью цикла repeat организован ввод числа N пользователем до тех пор, пока не будет введено натуральное число. В качестве вида цикла был выбран цикл с постусловиемrepeat, потомучтоонвыполнитсяхотябыодинраз.
Обратите внимание на условие цикла: n>=0. Тело цикла будет выполняться, пока это условие ложно, т.е. введенное число N меньше нуля. Как только пользователь ввел положительное число, цикл завершает свою работу.
Переменной f, соответствующей значению факториала, в качестве начального значения присваивается 1. Переменнойсчетчику i также присваивается 1.
130