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

Решение задач на ЭВМ. Программирование на языке Pascal. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]