Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_6_Informatika.pdf
Скачиваний:
9
Добавлен:
29.03.2015
Размер:
361.3 Кб
Скачать

16

end

В данном примере переменная i имеет тип integer, а остальные переменные – тип real.

Поскольку в данном случае начальное значение счетчика меньше конечного значения, то последовательность операторов между begin и end

не будет выполнена ни разу. Рассмотрим особенности выполнения этого цикла более детально:

1)В первую очередь переменная-счетчик i принимает начальное значение, равное i=1.

2)Далее вычисляется значение логического выражения i<10, т.е.

значение счетчика сравнивается с конечным значением. Т.к. выражение

1<10 равно true, то выполнение цикла завершается. Таким образом,

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

Рекомендации по использованию циклов

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

истинным должно являться условие повторения вычислений, а в операторе repeat — условие их окончания.

Чтобы избежать ошибок, рекомендуется:

1)Не забывать о том, что если в теле циклов while и for требуется выполнить более одного оператора, нужно заключать их в блок, т.е. между ключевыми словами begin и end.

2)Убедиться, что всем переменным, встречающимся в правой части операторов присваивания в теле цикла, до этого присвоены значения, а

также проверить, возможно ли выполнение других операторов.

17

3) Проверить, изменяется ли в теле цикла хотя бы одна переменная,

входящая в условие продолжения цикла.

4) Предусматривать аварийный выход из итеративного цикла по достижении некоторого предельно допустимого количества итераций.

Процедуры передачи управления

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

1)break — завершает выполнение цикла, внутри которого записана;

2)continue — выполняет переход к следующей итерации цикла;

3)exit — выполняет выход из программы или подпрограммы,

внутри которой записана;

4) halt — немедленно завершает выполнение программы.

Рассмотрим примеры применения процедур передачи управления.

Пример 6.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, то выполняются операторы тела цикла:

18

а) Сначала выполняется оператор присваивания x:=x+1;, в

результате которого переменная x становится равной 4.

б) Затем выполняется условный оператор if. Поскольку выражение

4>=5 равно false, то процедура break не выполнится.

в) Далее выполняется оператор присваивания 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.

Пример 6.9.

x:=3;

y:=4;

for i:=1 to 5 do

begin

x:=x+1;

if x>=5 then

continue;

y:=y-2;

19

end

Рассмотрим особенности выполнения данного цикла.

1)В первую очередь переменная-счетчик i принимает начальное значение, равное i=1.

2)Далее вычисляется значение логического выражения i>5, т.е.

значение счетчика сравнивается с конечным значением. Т.к. выражение 1>5

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

а) Сначала выполняется оператор присваивания 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.

Задания к работе

20

Задания №1 и №2 выполняются на компьютере.

Задание №1. Написать на языке Турбо-Паскаль три варианта программы для решения следующей задачи с помощью операторов while, repeat и for соответственно.

1) Дано натуральное число N. Вычислить:

S 1 1 1 1 1 n 1 .

2 4 8

2n

2) Дано натуральное число N. Вычислить:

S

1

 

1

 

1

.

 

sin1 sin 2

sin1 sin 2 sin N

 

sin1

 

 

3) Дано натуральное число N. Вычислить произведение первых N

сомножителей

P 2 4 6 2N . 3 5 7 2N 1

4) Дано натуральное число N. Вычислить:

cos1

 

cos1

cos 2

 

cos1 cos 2 cos N

.

 

 

sin 2

 

sin1 sin1

 

sin1 sin 2 sin N

5)Дано действительное число. Вычислить:

xx3 x5 x7 x9 x11 x13 .

3!

5!

7!

9!

11!

13!

6) Даны натуральное n, действительное x. Вычислить:

S sin x sin sin x sin sin sinx.

n раз

7) Даны действительное число a, натуральное число n. Вычислить:

Pa a 1 a n 1 .

8)Даны действительное число a, натуральное число n. Вычислить:

Pa a n a 2n a n2 .

9)Даны действительное число a, натуральное число n. Вычислить:

S

1

 

1

 

1

 

1

.

 

 

a4

a2n 2

 

a a2

 

 

 

10) Дано действительное x. Вычислить:

x 1 x 3 x 7 x 63x 2 x 4 x 8 x 64 .

21

11) Вычислить:

1 sin 0,1 1 sin 0,2 1 sin10 .

12) Даны натуральное n, действительное x. Вычислить:

sin x sin x2 sin xn .

13) Дано натуральное n. Вычислить:

S1 2 2 3 4 n n 1 2n.

14)Дано натуральное число n. Вычислить:

 

1

 

1

 

1

 

P 1

 

1

 

 

1

 

, где n 2.

22

32

n2

 

 

 

 

 

15) Дано натуральное число n. Вычислить:

P 1

 

1

 

1

 

1

 

1

1

 

1

 

1

 

 

1

 

.

 

 

 

 

 

 

2

4

6

 

2n

16) Дано натуральное число n. Вычислить:

S1! 2!| 3! n! n 1 .

17)Дано натуральное число n. Вычислить:

n

1

 

 

 

 

.

2k 1

2

k 1

 

 

18) Вычислить по схеме Горнера:

y x10 2x9 3x8 10x 11.

Вычисление значения многочлена с использованием схемы Горнера происходит следующим образом:

a

n

xn a

n 1

xn 1 ... a

xi ...a x1 a

0

(...(a

n

x a

n 1

)x ... a

)x ... a

)x a

.

 

 

i

1

 

 

 

i

1

0

 

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

 

 

 

 

 

 

 

f0 f1

1; fn

fn 1

fn 2

 

при

n 2,3, .

 

 

 

Определить f40.

20) Дано натуральное n. Вычислить:

y1 3 5 2n 1 .

21)Дано натуральное n. Вычислить:

y 2 4 2n .

22) Вычислить:

22

y cos x cos x2 cos x3 cos xn .

23) Вычислить:

ysin1 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

На рис. 5 представлен пример выполнения данного задания в системе Турбо-Паскаль при использовании оператора while.

Рис. 5. Текст программы для примера выполнения задания №1 (цикл while)

Рассмотрим особенности данной программы.

Переменные, соответствующие счетчику цикла (переменная i),

факториалу (f) и числу N (n) объявлены в разделе описания переменных var и имеют целый тип integer.

Исполняемые операторы программы располагаются между служебными словами begin и end.

1 1 2 3 6

23

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

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

Обратите внимание на условие цикла: n>=0. Тело цикла будет выполняться, пока это условие ложно, т.е. введенное число N меньше нуля.

Как только пользователь ввел положительно число, цикл завершает свою работу.

Переменной f, соответствующей значению факториала, в качестве начального значения присваивается 1. Переменной-счетчику i также присваивается 1.

Далее начинает выполняться оператор цикла while. Обратите внимание на условие цикла: i<=n. Это условие означает, что тело цикла будет выполняться, пока значение счетчика цикла меньше или равно числу

N.

Тело цикла содержит два оператора. В первом операторе текущее значение переменной, соответствующей факториалу, умножается на текущее значение счетчика i. Второй оператор увеличивает значение счетчика i на 1.

Например, пусть пользователь ввел n=0. Тогда тело цикла не выполнится ни разу, т.к. условие 1<=0 примет значение false. Поэтому значение переменной f, соответствующей факториалу, останется равным 1,

что является верным (из курса математики известно, что 0!=1). Если же,

например, пользователь ввел n=3, то во время первой итерации цикла исходное значение переменной f, равное 1, будет умножено на 1, на второй итерации будет умножено на 2, а на третьей итерации – на три, и в итоге станет равным (что соответствует формуле вычисления факториала, приведенной выше).

24

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

После завершения цикла на экран выводится вычисленное значение факториала. Затем с помощью стандартной процедуры readln

пользователю предлагается завершить выполнение программы, нажав клавишу «Enter».

Рассмотрим особенности выполнения программы для различных значений числа N, вводимых пользователем.

Пусть введено значение N=-6. В таком случае пользователю с помощью цикла repeat будет предложено повторно ввести число N, т.к.

оно должно быть натуральным. Далее пользователь ввел значение N=5. На экран было выведено значения факториала, равное 120, как показано на рис. 6.

Рис. 6. Пользователь сначала ввел N=-6, а затем N=5

Пусть пользователь ввел значение n=0. На экран было выведено значения факториала, равное 1, как показано на рис. 7.

Рис. 7. Пользователь ввел значение n=0

На рис. 8 представлен пример выполнения данного задания в системе Турбо-Паскаль при использовании оператора repeat.

25

Рис. 8. Текст программы для примера выполнения задания №1 (цикл repeat)

Данная программа во многом схожа с рассмотренной выше, в которой был использован оператор while. Главное отличие заключается в том, что тело цикла выполняется, пока условие принимает значение false, т.е. пока значение переменной-счетчика i не стало больше введенного числа n.

На рис. 9 представлен пример выполнения данного задания в системе Турбо-Паскаль при использовании оператора for.

Рис. 9. Текст программы для примера выполнения задания №1 (цикл for)

Данная программа во многом схожа с рассмотренной выше, в которой был использован оператор while. Главное отличие заключается в том, что значение переменной-счетчика i автоматически увеличивается на 1,

поэтому оператор присваивания i:=i+1, который был необходим в случае использования операторов while и repeat, в случае использования оператора for не нужен.

Задание №2. Составить в двух вариантах (с использованием операторов while и repeat соответственно) программу вычисления

26

значений функции F(x) на отрезке [a; b] с шагом h. Результат представить в виде таблицы, первый столбец которой – значения аргумента, второй – соответствующие значения функции:

1)F x x sin x

2)F x sin 2 x

3)F x 2cos x 1

4)F x tgx

5)F x ctgx 1

6)F x sin x cos x

7)F x x sin x

8)F x sin 1 2

x

9)F x x cos 1 2

x

10)F x 2sin 2 x 1

11)F x x cos2 x

12)F x sin x tgx

13)F x cos x ctgx

14)F x 2tg x 1

2

15) F x tg x 2cos x

2

16)F x 1 sin x 1 2 4

17)F x 2cos x 0,5

18)F x x2 sin 2 x 1

19)F x 1 ctg x 4

24

20)F x sin 2 x cos 2x

21)F x 7sin2 x 1 cos x

2

27

22)F x cos 2x

23)F x tg2x 3

24)F x sin x 0,5cos x

Пример выполнения задания №2.

Рассмотрим пример выполнения данного задания для функции

F x ctg x 1 sin x в случае использования оператора while.

3 2

На рис. 10 представлен пример выполнения данного задания в системе Турбо-Паскаль.

Рис. 10. Текст программы для примера выполнения задания №2

Рассмотрим особенности данной программы.

Переменные, соответствующие аргументу функции (переменная x),

значению функции (f), границам отрезка (a и b) и шагу (h) объявлены в разделе описания переменных var и имеют вещественный тип real.

Исполняемые операторы программы располагаются между служебными словами begin и end.

C помощью процедур write выводятся подсказки пользователю о том, что необходимо ввести значения границ отрезка (a и b) и шага h. C

помощью процедуры readln пользователю предлагается ввести значения соответствующих переменных.

Переменной x в качестве начального значения присваивается граница отрезка a.

28

Далее начинает выполняться оператор цикла while. Обратите внимание на условие цикла: x<=b. Это условие означает, что тело цикла будет выполняться, пока значение аргумента меньше или равно значению границы отрезка b.

Тело цикла содержит три оператора. В первом операторе вычисляется значение функции и присваивается переменной f. Второй оператор выводит на экран текущие значения переменных x и f. Третий оператор увеличивает значение переменной x на величину шага h.

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

пользователю предлагается завершить выполнение программы, нажав клавишу «Enter».

Рассмотрим особенности выполнения программы для различных значений, вводимых пользователем.

Пусть пользователь ввел значения a=5, b=10, h=0.5. На экран были выведены значения x и f(x), как показано на рис. 11.

Рис. 11. Пользователь ввел значения a=5, b=10, h=0.5

Пусть пользователь ввел значения a=1, b=4, h=0.25. На экран были выведены значения x и f(x), как показано на рис. 12.

29

Рис. 12. Пользователь ввел значения a=1, b=4, h=0.25

При выполнении своего варианта задания усовершенствуйте программу следующим образом:

1) Следует учесть тот факт, что в программах на Турбо-Паскаль необходимо избегать проверки вещественных величин на равенство. Это связано с погрешностью представления вещественных значений в памяти.

Вместо этого лучше сравнивать модуль разности чисел с некоторым малым числом. Для соблюдения этого требования измените условие цикла.

Подсказка, как это сделать, приведена в предыдущем методическом пособии. В качестве точности можно использовать 1e-6.

2)Сделайте проверку, с помощью которой можно было бы исключить возможность деления на ноль.

3)С помощью цикла организуйте проверку, чтоб значение h, вводимое пользователем, был отлично от нуля. Т.е., пользователь должен вводить значение h до тех пор, пока оно не станет отличным от нуля.

Вопросы для самоконтроля

1)В каком случае алгоритм называется циклическим?

2)Что называется циклом?

3)Для чего используются операторы цикла в языке Турбо-Паскаль?

4)Что называется итерацией?

5)В чем заключается отличие цикла с предусловием от цикла с постусловием?

30

6)Что называется параметром цикла? В каком случае параметр цикла называется счетчиком?

7)Для чего предназначен оператор break?

8)Для чего предназначен оператор continue?

9)Дана последовательность операторов программы, записанной на языке Турбо-Паскаль:

x:=20;

while x>10 do

x:=x-3;

Переменная x имеет тип integer.

Какое значение примет переменная x выполнения данной последовательности операторов?

10) Дана последовательность операторов программы, записанной на языке Турбо-Паскаль:

a:=4;

b:=-3;

while (a>0) or not(b>=1) do

begin

a:=a-3;

b:=b+1;

y:=2*a+3*abs(b);

end

Переменные a, b и y имеют тип integer.

Какое значение примут переменные a, b и y после выполнения данной последовательности операторов?

11) Дана последовательность операторов программы, записанной на языке Турбо-Паскаль:

x:=10;

y:=1;

while x>0 do

31

x:=x-4;

y:=y+2*x;

Переменные x и y имеют тип integer.

Какое значение примут переменные x и y после выполнения данной последовательности операторов?

12) Дана последовательность операторов программы, записанной на языке Турбо-Паскаль:

x:=9;

y:=-1;

repeat

y:=y+3;

x:=x-2;

until (x<=1) and (y>5);

Переменные x и y имеют тип integer.

Какое значение примут переменные x и y после выполнения данной последовательности операторов?

13) Дана последовательность операторов программы, записанной на языке Турбо-Паскаль:

x:=-7;

y:=2;

for i:=2 to 1 do

begin

x:=x+5;

y:=y+x;

end;

Переменные i, x и y имеют тип integer.

Какое значение примут переменные x и y после выполнения данной последовательности операторов?

14) Дана последовательность операторов программы, записанной на языке Турбо-Паскаль:

32

x:=1;

y:=3;

for i:=1 to 3 do

begin

x:=x+y+i;

y:=y-2*x+3*i;

end;

Переменные i, x и y имеют тип integer.

Какое значение примут переменные x и y после выполнения данной последовательности операторов?

15) Дана последовательность операторов программы, записанной на языке Турбо-Паскаль:

x:=0;

y:=1;

for i:=2 downto 1 do

x:=x-5*i;

y:=3*x-2*y;

Переменные i, x и y имеют тип integer.

Какое значение примут переменные x и y после выполнения данной последовательности операторов?

16) Дана последовательность операторов программы, записанной на языке Турбо-Паскаль:

z:=100;

for i:=1 downto 6 do

z:=z-25;

Переменные i и z имеют тип integer.

Какое значение примут переменные i и z после выполнения данной последовательности операторов?

17) Дана последовательность операторов программы, записанной на языке Турбо-Паскаль:

33

x:=0;

y:=5;

for i:=2 to 7 do

begin

x:=x+2;

if x>4 then

break;

y:=y+x-1;

end

Переменные x и y имеют тип integer.

Какое значение примут переменные x и y после выполнения данной последовательности операторов?

18) Дана последовательность операторов программы, записанной на языке Турбо-Паскаль:

x:=0;

y:=5;

for i:=2 to 7 do

begin

x:=x+2;

if x>4 then

continue;

y:=y+x-1;

end

Переменные x и y имеют тип integer.

Какое значение примут переменные x и y после выполнения данной последовательности операторов?

Список литературы

1) Программирование на языке высокого уровня Паскаль. Лекция 2:

Управляющие операторы языка. [Электронный ресурс] – Режим доступа:

34

http://www.intuit.ru/studies/courses/628/484/lecture/6260. (Дата обращения: 22.08.2013).

2) Семакин И.Г., Шестаков А.П. Лекции по программированию:

Учебное пособие. Изд. 2-е, доп. – Пермь: Изд-во Перм. ун-та, 1998. – 279 с. 3) Культин Н.Б. Основы программирования в Delphi 7. – СПб.: БХВ-

Петербург, 2003. – 608 с.: ил.

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