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

Информатика

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

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

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

Например, пусть пользователь ввел n = 0. Тогда тело цикла не выполнится ни разу, так как условие 1<=0 примет значение false, поэтому значение переменной f, соответствующей факториалу, останется равным 1, что является верным (из курса математики известно, что 0!=1). Если же, например, пользователь ввел n = 3, то во время первой итерации цикла исходное значение переменной f, равное 1, будет умножено на 1, на второй итерации будет умножено на 2, а на третьей итерации – на три и в итоге станет равным 1 1 2 3 = 6 (что соответствует формуле вычисления факториала, приведенной выше).

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

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

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

Пусть введено значение N = –6. В таком случае пользователю с помощью цикла repeat будет предложено повторно ввести число N, так как оно должно быть натуральным. Далее пользователь ввел значение N = 5. На экран было выведено значение факториала, равное 120:

131

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

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

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

132

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

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

Задание № 2. Составить в двух вариантах (с использованием операторов while и repeat соответственно) программу вычисления значений функции F(x) на отрезке [a; b] с шагом h. Результат представить в виде таблицы, первый столбец которой

– значения аргумента, второй – соответствующие значения функции:

1)F (x) = x sin x ;

2)F (x) = sin2 x ;

3)F (x) = 2cos x 1 ;

4)F (x) = tgx ;

5)F (x) = ctgx + 1;

133

6) F (x) = sin x cos x ; 7) F (x) = xsin x ;

8) F (x) = sin 1 + 2 ;

x

9) F (x) = x cos 1 + 2 ;

x

10)

F (x) = 2sin2 x + 1;

11)

F (x) = x cos2 x ;

12)F (x) = sin x + tgx ;

13)F (x) = cos x + ctgx ;

14)F (x) = 2tg 2x + 1;

15)F (x) = tg 2x + 2cos x ;

16)F (x) = 12 sin 4x + 1 ;

17) F (x) = 2cos x + 0,5 ;

18)F (x) = x2 sin2 x + 1;

19)F (x) = 12 ctg 4x + 4 ;

20)F (x) = sin2 x cos 2x ;

21)F (x) = 7sin2 x 12 cos x ;

22)F (x) = − cos2x ;

23)F (x) = tg2x 3 ;

24)F (x) = sin x + 0,5cos x.

134

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

Приведем пример выполнения данного задания для функции F (x) = ctg 3x + 12 sin x вслучаеиспользованияоператораwhile.

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

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

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

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

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

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

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

135

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

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

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

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

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

136

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

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

Вкачестве точности можно использовать 1e-6.

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

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

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

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

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

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

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

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

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

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

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

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

x:=20;

while x>10 do

x:=x-3;

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

137

Какое значение примет переменная 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 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 после выполнения данной последовательности операторов?

138

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. Дана последовательность операторов программы, записанной на языке Турбо-Паскаль:

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 после выполнения данной последовательности операторов?

139

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

z:=100;

for i:=1 downto 6 do

z:=z-25;

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

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

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

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 после выполнения данной последовательности операторов?

140