Информатика
..pdfДалее начинает выполняться оператор цикла 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