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

Информатика

..pdf
Скачиваний:
9
Добавлен:
15.11.2022
Размер:
1.24 Mб
Скачать

6. Снова вычисляется значение логического выражения 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 = 112 + 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.Дано действительное число. Вычислить

xx3 + 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 + + a21n2 .

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 + an1xn1 + ... + ai xi + ... + a1x1 + a0 =

=(...(an x + an1)x + ... + ai x + ... + a1 )x + a0 .

19.Числа Фибоначчи (fn) определяются формулами

f0 = f1 = 1; fn = fn1 + fn2 при 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