Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Решение задач на ЭВМ. Программирование на языке Pascal. Учебное пособие
.pdf
do - делать;
<оператор> - тело цикла.
При этом должно выполняться условие:
n<m.
Если тело цикла состоит из нескольких операторов, то они заключаются в операторные скобки begin…end:
For I : = n to m do begin
<оператор1>;
<оператор 2>;
…….
<оператор n>;
end;
Переменная I (счётчик) увеличивается на единицу от началь-
ного значения n до конечного значения m. При каждом новом зна-
чении I исполняется оператор внутри цикла. Параметр цикла,
начальное и конечное его значения должны быть описаны как inte-
ger.
Если n= m , то цикл выполняется один раз.
Если n> m, то цикл не выполняется ни разу.
Шаг равен -1
For I : = n downto m do <оператор>;
Где: For – для;
I - параметр цикла;
n - начальное значение параметра цикла;
downto – до;
m - конечное значение параметра цикла;
do - делать;
<оператор> - тело цикла.
При этом должно выполняться условие: n> m.
При решении задач различной сложности отдельные участки
вычислений могут содержать типовые вычисления. К наиболее часто встречающимся типовым вычислениям относятся вычисление
суммы, произведения, уточнение корня уравнения, нахождение
наибольшего или наименьшего значений и др.
Рассмотрим примеры вычисления сумм, количеств и произве-
51

дений.
10
1
2
5
n
nxt
Ввод x
Начало
t=0
Конец
t = t+1/n
Вывод t
n=1..10, 1
t = 5x2 t
1 2 3
4 5 6
Пример 1.
Используя оператор for… to…do, вычислить на ПК значение
функции
, при х=0.5.
Здесь параметром цикла является аргумент n.
При вычислении конечных сумм и произведений искомый
результат формируется постепенно. При вычислении суммы сначала вычисляется S
увеличивается на второе слагаемое и получается S
= S0 + S(n1), во втором повторе цикла эта сумма
1
= S1 + S(n2), в
2
третьем повторе - на третье слагаемое S3 = S2 + S(n3) и т.д. Здесь S0 начальное значение суммы и т.к. S1 должна быть равна S (n1), то
S0 = 0.
Рис.10. Блок-схема алгоритма
52

10
1
5
1ik
kit )sin(
program Loop1;
var x, t: real;
n: integer;
begin
writeln ('введите x');
readln (x);
t:=0; {обнуление суммы}
for n:=1 to 10 do t:=t+ 1/n; {накопление суммы}
t:=5* sqr(x)*t;
writeln ('t=', t); {вывод результата}
readln
end.
При вычислении произведения сначала вычисляется
Р1 = Р
значение произведения и т.к. Р
Поскольку 5х
0
P(n
), затем Р
1
2
можно вынести за знак суммы, в тело цикла
= Р1 P(n2) и т.д. Здесь Р0 - начальное
2
должно быть равно P(n1), то Р0 = 1.
1
это произведение включать не следует. Тем самым сокращается
время исполнения программы.
Блок-схема алгоритма решения задачи (рис. 10) и соответ-
ствующая ей программа будут иметь вид:
Пример 2.
Вычислить на ПК значение функции
Блок – схема алгоритма решения этой задачи представлена на
рисунке 11.
53

Рис. 11. Блок-схема алгоритма (Пример 2)
Начало
t=1
Конец
s = 0
Вывод t
i=1..10, 1
t = t*s
1
2 3 7
s = s+sin(i
k=1..10, 1
4
5
program Loop2;
var s, t: real;
i, k: integer;
begin
t:=1; {инициализация произведения}
for i:=1 to 10 do {цикл произведения}
begin
s:=0; {обнуление суммы}
for k:= 1 to 10 do s:=s+sin(i*k);
{цикл суммы}
t:=t*s;
end;
writeln ('t=', t); {вывод результата}
end.
Текст программы:
54

Пример 3.
Program zadacha;
{нахождение пар чисел}
var
K, a, b : integer;
begin
r : = 0;
for a :=1 to 100 do
for b :=1 to 100 do begin
if a + b = a * b then begin
k := k+1;
writeln (`числа` , a, b)
end
end;
if k= 0 then writeln (` таких чисел нет`)
else (` k=`, k)
end.
Подсчет количества в цикле: к: = к+1.
Первоначальное значение к: = 0.
Среди чисел 1 < N < 100 найти все пары чисел, для которых их
сумма равнялась бы их произведению.
Текст программы:
Пример 4.
Определить, сколько из N заданных точек принадлежат графику y = | x |.
Текст программы:
55

Program zadacha;
var
k, i, n : integer;
x, y : real;
begin
writeln (`введите количество точек N=` );
readln (n) ;
k : = 0;
for i :=1 to n do begin
writeln (`введите координаты` , I, ` -ой точки
x и y`);
readln (x, y);
if y= abs (x) then k: = k+1
end;
if k=0 then writeln (`таких точек нет`)
else writeln (`k=`, k)
end.
Оператор цикла с постусловием
Оператор цикла с постусловием используется, если число
повторений заранее неизвестно, а определяется по ходу реализации
циклического процесса. Формат оператора цикла с постусловием:
Repeat
<оператор 1>;
<оператор 2>;
…………………
<оператор N>
Until <условие>;
где Repeat – повторять;
<оператор 1>;
……………
<оператор N> - последовательность операторов внутри цикла
(тело цикла);
Until - до;
<условие> -логическое выражение.
Этот процесс завершается тогда, когда после выполнения за-
56

данной последовательности операторов логическое выражение
.1,sin
1,cos
хприx
xприx
y
<условие> станет True (истинно).
Оператор for v: = E1 to E2 do S;
Эквивалентен if E2 >=E1 then begin
v: = E1;
repeat
S;
V:=succ (v)
Until v>E2;
Оператор цикла с предусловием.
Формат оператора:
While <условие > do < оператор>;
где While - пока;
<условие > - логическое выражение;
do - делать;
< оператор> - оператор внутри цикла (тело цикла).
Оператор выполняется до тех пор, пока <условие> имеет
значение истина, прекращает выполняться, если <условие> при-
нимает значение ложь.
Оператор for v: = E1 to E2 do S;
Эквивалентен
v: = E1;
while v<= E2 do begin
S;
V:= succ (v)
end.
Пример.
Используя операторы while…do и repeat… until, вычислить значения
функции
, в диапазоне изменения x от 0
до 3 с шагом 0,5.
57

При решении данной задачи можно использовать алгоритмы цикли-
ческой структуры "до" и "пока". Параметром данного цикла является х,
причем при каждом повторном вычислении его значение следует увеличивать на величину шага. По условию задачи начальным значением х
является 0. Для объявления х удобно использовать типизированную
константу. В этом случае, во-первых, тип объявляется с одновременным
заданием начального значения, во-вторых, допускается изменение
значения такой константы в процессе вычислений.
Рассмотрим разные варианты решения этой задачи.
1 вариант.
Для вычисления y будем использовать алгоритмическую
структуру – цикл "до" (Рис. 12).
2 вариант.
Для вычисления y будем использовать алгоритмическую
структуру – цикл – "пока" (Рис. 13).
3 вариант.
Для вычисления y при 0х1 будем использовать алгоритмиче-
скую структуру цикл «до», а при вычислении функции в диапазоне
1<x3 –цикл «пока» (Рис. 14).
58

1 вариант
нет
Ввод x=0
Начало
x = x + 0.5
Конец
Вывод y
x > 1
y =cosx
y = sinx
3 1 4
5
6
x > 3
нет 7 Да
да
2
Рис. 12. Блок-схема структуры «до»
Текст программы (вариант 1):
program Loop1;
var y:real;
const x:real=0;
begin
repeat
if x>1 then y:=sin(x)
else y:=cos(x);
writeln('x=',x:6:2, 'y=',y:6:2);
x:=x+0.5;
until x>3;
end.
59

2 вариант
Ввод x=0
Начало
Конец
Вывод y
x > 1
y =cosx
y = sinx
1
5
7
x 3
2
program Loop2;
var y:real;
const x:real=0;
begin
while x<=3 do
begin
if x>1 then y:=sin(x)
else y:=cos(x);
writeln('x=',x:6:2,
'y=',y:6:2);
x:=x+0.5;
end;
end.
Рис. 13. Блок-схема структуры «пока».
Текст программы
(вариант 2):
60
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
