Информатика. Практикум
.pdf
2.7. Задачи с использованием двойных сумм и произведений
Задача 2.21. Разработать схему алгоритма и программу форми-
рования матрицы A размером 20 |
20 по закону |
|
|
|||||||||
|
|
|
|
i |
j |
|
|
|
|
|
|
|
|
|
|
|
|
2 sin(n |
m), если i |
j; |
|
||||
|
|
aij |
|
n 1 m 1 |
|
|
|
|
|
|
|
|
|
|
|
i |
j |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
2 sin(n |
m), если i |
j. |
|
||||
|
|
|
|
n 1 m 1 |
|
|
|
|
|
|
|
|
Пояснения: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
1 |
|
|
|
2 |
|
|
|
|
|
a21 |
|
|
sin(n |
m) |
|
sin(n |
1) |
|
|||
|
|
|
n 1 m 1 |
|
|
|
n 1 |
|
|
|
|
|
|
|
2sin(1 1) |
2sin(2 |
1), так как i |
j; |
|
||||||
|
3 |
2 |
|
|
|
|
3 |
|
|
|
|
|
a32 |
|
2sin(n |
m) |
2sin(n |
1) |
2sin(n |
2) |
|||||
|
n 1 m 1 |
|
|
|
|
n 1 |
|
|
|
|
|
|
2sin(1 |
1) |
2sin(1 |
2) |
2sin(2 |
1) |
2sin(2 |
2) |
|||||
|
|
2sin(3 |
1) |
2sin(3 |
2), так как i |
j; |
|
|||||
2 |
3 |
|
|
|
2 |
|
|
|
|
|
|
|
a23 |
2sin(n |
m) |
|
2sin(n |
1) 2sin(n |
2) 2sin(n 3) |
||||||
n 1 m 1 |
|
|
|
n 1 |
|
|
|
|
|
|
||
2sin(1 1) |
2sin(1 |
2) |
2sin(1 |
3) 2sin(2 |
1) |
2sin(2 |
2) 2sin(2 3), |
|||||
так как i
j.
Решение задачи
Схема алгоритма решения задачи представлена на рис. 2.21.
111
|
|
Обозначения схемы алгоритма |
S |
– значение двойной суммы, вычисляемое по формуле |
|
i |
j |
|
|
2sin (n |
m); |
n 1 m 1 |
|
|
P – значение двойного произведения, вычисляемое по формуле |
||
i |
j |
|
|
2sin(n |
m) . |
n 1 m 1 |
|
|
|
|
1 |
Начало |
|
|
|
12 |
2 |
A |
|
6 |
|
|
|
|||
|
E |
|
I=1,20 |
|
C |
|
N=1,I |
3 |
|
|
N=1,I |
|
13 |
B |
|
7 |
|
|
|
J=1,20 |
|
||
|
F |
|
|
D |
|
|
M=1,J |
4 |
|
|
M=1,J |
|
14 |
|
S=0 |
|
8 |
Вычисление |
|
P=1 |
|
|
|
P=P· |
|
|
S=S+ |
||
двойного |
5 |
|
|
||
·2sin(N+M) |
|
да |
+2sin(N+M) |
||
произведения |
15 |
нет |
I>J |
9 |
|
|
|
|
|||
|
F |
|
|
|
8 D |
|
16 |
|
|
|
10 |
|
E |
|
|
|
C |
|
17 |
|
|
|
11 |
|
A[I,J]=P |
|
|
|
A[I,J]=S |
18 |
B
19
A
20
Конец
Вычисление двойной суммы
Вычисление элемента А[I,J]
Рис. 2.21
112
Программа
Program Task2_21;
Var
A : Array[1..20, 1..20] of Real;
I, J, N, M : Byte; |
|
|
S, P |
: Real; |
|
Begin |
{начало раздела операторов программы} |
|
for I := 1 to 20 do |
{цикл 1-для перебора строк матрицы А} |
|
for J := 1 to 20 do {цикл 2-для перебора столбцов матрицы А} |
||
Begin |
{начало циклов 1, 2} |
|
|
P:=1; S:=0; {начальные значения для произведения и суммы} |
|
|
If I > J Then |
|
|
Begin |
{начало блока 1, если I > J} |
|
{вычисление двойной суммы} |
|
|
for N := 1 to I do |
|
|
for M := 1 to J do S:= S + 2*Sin(N+M);{суммирование} |
|
|
A[I, J] := S; |
|
|
End Else |
{конец блока 1} |
|
Begin |
{начало блока 2, если I ≤ J } |
{вычисление двойного произведения} for N := 1 to I do
|
for M := 1 to J do |
P := P * 2*Sin(N+M); |
A[I, J] := P; |
|
|
end; |
{конец блока 2} |
|
end; |
{конец цикла 2, 1} |
|
End. |
{конец программы} |
|
2.8. Задача с использованием процедур и функций для двумерного массива
Задача 2.22. Разработать схему алгоритма и программу форми-
рования матрицы А размером 20 40, элементы которой формируются по закону
|
cos(i |
j) |
1 |
|
3,4 , |
если i |
j; |
|
|
|
|||||||
10 |
|
|
|
|
|
|
||
aij |
sin(i |
j) |
|
|
k, если i |
j; |
||
k |
1 |
|
|
|
|
|
|
|
|
|
30 |
|
|
|
|
|
|
|
|
ln(i |
j) |
( k), |
если i |
j. |
||
k |
11 |
|
|
|
|
|
|
|
113
В программе создать процедуру, которая считает количество положительных и отрицательных элементов. Результаты расчета выводятся на экран.
Решение задачи
Схема алгоритма решения задачи представлена на рис. 2.22, а. Схема алгоритма процедуры подсчета положительных и отрицательных элементов Calc представлена на рис. 2.22, б.
Программа
Program Task2_22;
Uses Crt;
Type
Mas = Array [1..20, 1..40] of Real;
Var
A : Mas;
I, J, K, CP, CN : Integer;
S,P : Real;
{Процедура подсчета положительных (K1) и отрицательных (K2)
элементов массива B}
Procedure Calc(B :Mas; Var K1, K2 :Integer);
Var I, J : Integer;
Begin |
|
{начало раздела операторов процедуры Calc} |
K1 := |
0; |
K2 := 0; |
for I |
:= |
1 to 20 do |
for J := 1 to 40 do
If B[I, J] > 0 Then K1 := K1+1 {если B[I,J] положительный} {если B[I,J] отрицательный}
Else If B[I, J] < 0 Then K2 := K2 + 1;
end; |
{конец процедуры Calc} |
|
Begin |
{начало раздела операторов основной программы} |
|
ClrScr; |
|
{очистка экрана} |
for I:=1 to 20 do {цикл 1–для перебора строк матрицы А} |
||
for J:=1 to 40 do {цикл 2–для перебора столбцов матрицы А} |
||
Begin |
|
{начало цикла 1, 2} |
If I = J |
|
|
|
Then A[I, J] := Exp(3.4 * Ln(Abs(Cos(I+J)+1))) |
|
|
Else If I > J Then |
|
|
Begin |
{начало блока 1-суммирование} |
|
S := 0; |
|
|
for K := 11 to 30 do S := S + Ln(I+J)*(-K); |
|
114
A[I, J] := S;
End |
{конец блока 1} |
Else Begin {начало блока 2-произведение} |
|
|
P := 1; |
|
for K := 1 to 10 do P := P * Sin(I+J)*K; |
|
A[I, J] := P; |
|
end; {конец блока 2} |
end; |
{конец циклов 2, 1} |
Calc(A, CP, CN); |
{вызов процедуры Calc} |
{вывод результатов расчета на экран} |
|
Writeln('Положительных элементов в матрице |
= ',CP); |
|
Writeln('Отрицательных элементов в матрице |
= ',CN); |
|
Repeat Until KeyPressed;{ожидание нажатия любой клавиши} |
||
End. |
{конец основной программы} |
|
Результат работы программы
Положительных элементов в матрице = 610 Отрицательных элементов в матрице = 190
Обозначения схемы алгоритма (рис. 2.22, а)
A[I, J] – aij элемент матрицы A;
|
|
30 |
S – значение суммы выражения |
ln(i j) ( k) ; |
|
|
k |
11 |
10 |
|
|
P – значение произведения |
sin (i j)k ; |
|
k |
1 |
|
CP, CN – число положительных и число отрицательных элементов матрицы А.
Обозначения схемы алгоритма процедуры Calc (см. рис. 2.22, б)
B – массив, переданный в процедуру в качестве формального параметра;
K1, K2 – число положительных и число отрицательных элементов массива B.
115
|
|
|
1 |
Начало |
|
|
|
|
|
|
|
|
2 |
A |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
I=1,20 |
|
|
|
|
|
|
|
|
3 |
B |
|
1 |
Calc |
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
J=1,40 |
|
2 |
Начало |
|
|
|
|
нет |
4 |
|
да |
|
|
||
|
|
I=J |
|
K1=0 |
|
|
|||
|
|
|
|
5 |
|
|
|
||
|
нет |
6 |
да |
|
|
K2=0 |
|
|
|
|
|
A[I,J]=|(cos |
|
|
|
||||
|
I>J |
|
|
|
|
|
|||
|
|
|
|
3 |
|
|
|
||
12 |
P=1 |
|
7 |
S=0 |
(I+J)+1)|3.4 |
A |
|
|
|
|
|
|
|
|
|
|
|||
13 |
|
|
8 |
|
|
|
I=1, 20 |
|
|
D |
|
C |
|
4 |
|
|
|
||
|
|
|
|
|
|
|
|||
|
K=1,10 |
|
|
K=11,30 |
|
B |
|
|
|
|
Вычисление |
|
Вычисление |
|
|
|
|||
14 |
|
|
|
|
|
|
|||
|
|
|
суммы |
|
J=1,40 |
|
|
||
P=P·sin(I+ |
произведения 9 |
S=S+ln(I+ |
|
|
|
||||
|
|
|
|
|
|||||
|
+J)·K |
|
|
+J)·(-K) |
|
5 |
|
6 |
|
15 |
|
|
10 |
|
|
|
B[I,J]>0 |
да |
K1=K1+1 |
|
D |
|
|
C |
|
|
|
||
|
|
|
|
|
|
|
|
||
16 |
|
|
11 |
|
|
7 |
нет |
8 |
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|||
|
A[I, J]=P |
|
|
A[I, J]=S |
|
|
B[I,J]<0 |
да |
K2=K2+1 |
|
|
|
|
|
|
9 |
нет |
|
|
|
|
|
17 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
B |
|
|
B |
|
|
|
|
|
18 |
|
|
10 |
|
|
|
|
|
|
|
A |
|
|
A |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
|
|
11 |
|
|
|
|
|
|
|
Calc(A, |
|
Конец |
|
|
|
|
|
|
|
CP, CN) |
|
|
|
|
|
|
|
|
20 |
|
|
|
Calc |
|
|
|
|
|
Вывод |
|
|
|
|
|
|
|
|
|
|
CP, |
|
|
|
|
|
|
|
|
|
CN |
|
|
|
|
|
|
|
|
21 |
Конец |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
а |
|
|
|
|
|
б |
Рис. 2.22
116
2.9. Задача с элементами линейного программирования
Задача 2.23. Разработать схему алгоритма и программу для вычисления максимального значения функции F 3x1 4x2 5x1x2x3
при дискретных значениях аргументов: x1 = 1; 100 (1), x2 = 10; 50 (0,4), x3 = 5; 30 (0,3). Область определения функции F задана ограничениями
4x1 5x2 3x3 Q1,
5x1 x2 x1x3 Q2 ,
6x1 2x2 x3 Q3.
Значения ограничений Q1, Q2, Q3 вводятся с клавиатуры. Вычисление функции F оформить в виде подпрограммы (function). Вывести на экран максимум функции F и соответствующие ей значения переменных x1, x2, x3. Если при заданных ограничениях отсутствует область значений функции F, то вывести соответствующее сообщение.
Решение задачи
Схема алгоритма решения задачи представлена на рис. 2.23.
Обозначения схемы алгоритма
MaxF – максимальное значение функции F; ValF – значение функции F;
X1Max, X2Max, X3Max – значения переменных x1, x2, x3, при которых функция F принимает максимальное значение.
117
1 |
Начало |
|
|
|
|
|
|
|
|
|
|
2 |
Ввод |
|
|
|
|
|
Q1,Q2 |
|
|
|
|
3 |
Q3 |
|
|
|
|
|
|
|
|
|
|
|
MaxF=0 |
|
|
|
|
4 |
A |
|
|
|
|
|
|
|
|
|
|
|
X1=1,100 |
|
|
|
|
5 |
|
|
|
|
Начальное значение |
|
X2=10 |
|
|
|
|
|
|
|
|
переменной Х2 |
|
|
|
|
|
|
|
6 |
X2<50 |
нет |
|
|
|
|
|
|
|
|
|
7 |
да |
|
|
|
|
|
|
|
|
Начальное значение |
|
|
X3=5 |
|
|
|
|
|
|
|
|
переменной Х3 |
|
|
|
|
|
|
|
8 |
X3<30 |
нет |
|
|
|
|
|
|
|
|
|
9 |
да |
|
|
|
|
Val1=… |
|
|
|
Val1=4X1+5X2-3X3 |
|
|
|
|
|
||
|
Val2=… |
|
|
|
|
|
|
|
|
Val2=5X1-X2+X1·X3 |
|
|
Val3=... |
|
|
|
|
|
|
|
|
Val3=-6X1-2X2·X3 |
|
нет 10 |
|
|
|
|
|
Условие |
|
|
|
Val1<Q1 и |
|
|
|
|
|
Val2<Q2 и |
|
|
верно? |
|
|
|
|
|
|
|
|
Val3<Q3 |
|
|
да |
|
|
|
|
11 |
|
|
|
ValF=F(X1, X2, X3) |
|
|
|
|
|
||
|
ValF=... |
|
|
|
Вычисление ValF |
|
|
|
|
|
с использованием |
|
|
да |
|
|
функции F |
12 |
MaxF< |
|
|
|
|
|
ValF |
13 |
|
|
|
|
нет |
|
|
Определение |
|
|
|
MaxF=ValF |
|||
|
|
|
|
|
максимального значения |
|
|
14 X1Max=X1 |
функции F |
||
|
|
|
|||
|
|
|
X2Max=X2 |
|
|
|
|
|
X3Max=X3 |
|
|
15 |
X3=X3+0.3 |
|
|
|
Приращение |
|
|
|
|
||
|
|
|
|
переменной Х3 |
|
|
|
|
|
|
|
16 |
|
|
|
|
Приращение |
|
X2=X2+0.4 |
|
|
|
|
|
|
|
|
переменной X2 |
|
|
|
|
|
|
|
17 |
|
|
|
|
|
|
A |
|
|
|
|
18 |
да |
19 |
Вывод |
Вывод |
|
|
MaxF>0 |
|
значений |
||
|
|
|
... |
MaxF, X1Max, |
|
|
|
|
|
||
|
нет |
|
|
|
X2Max, X3Max |
20 Вывод |
|
|
|
Cообщение |
|
|
«...» |
|
|
|
«Нет значений |
|
|
|
|
|
функции» |
21 |
Конец |
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 2.23 |
|
|
118
Программа
Program Task2_23;
Uses Crt;
Var
Q1, Q2, Q3 : Real; X1, X1Max : Integer;
Val1, Val2, Val3, X2, X3 : Real;
ValF, MaxF, X2Max, X3Max : Real;
{функция вычисления значения заданной функции}
Function F(X1 :Integer; X2, X3 :Real) : Real;
Begin |
{начало раздела операторов функции F} |
F:=3*X1 + 4*X2 + 5*X1*X2*X3; |
|
End; |
{конец функции F} |
Begin |
{начало раздела операторов основной программы} |
ClrScr; |
{очистка экрана} |
Write('Введите значения ограничений Q1, Q2, Q3: '); Read(Q1, Q2, Q3); {ввод значений ограничений}
MaxF:= 0; {начальное значение максимума функции}
For X1 := 1 to 100 do
Begin {начало цикла 1 - для перебора значений Х1} X2:= 10; {начальное значение переменной Х2}
While X2 <= 50 do
Begin {начало цикла 2 - для перебора значений Х2} X3:= 5; {начальное значение переменной Х3}
While X3 <= 30 do
Begin {начало цикла 3 - для перебора значений Х3} {вычисление значений для выполнения ограничений}
Val1:= 4*X1 + 5*X2 - 3*X3;
Val2:= 5*X1 - X2 + X1*X3; Val3:= -6*X1 - 2*X2*X3;
{проверка выполнения ограничений}
If (Val1<=Q1) and (Val2<=Q2) and (Val3<=Q3) Then Begin {начало блока 1 - если ограничения выполняются}
ValF:= F(X1, X2, X3);{вычисление значения функции}
{поиск максимального значения} |
|
|
If MaxF < ValF Then |
|
|
Begin |
{начало блока 2} |
|
MaxF:= ValF; |
|
|
X1Max:= X1; |
X2Max:= X2; |
X3Max:= X3; |
end; |
{конец блока 2} |
|
end; |
{конец блока 1} |
|
X3:= X3 + 0.3; |
{приращение переменной Х3} |
|
end; |
{конец цикла 3} |
|
X2:= X2 + 0.4; |
{приращение переменной Х2} |
|
end; |
{конец цикла 2} |
|
end; |
{конец цикла 1} |
|
119
{вывод на экран результатов расчета}
If MaxF>0 Then {если возможен расчет значения функции}
Begin
Writeln('Максимальное значение функции F: ',MaxF:9:2);
Writeln('при X1 = ',X1Max:3,' X2 = ',X2Max:4:1,' X3 = ',X3Max:4:1); end
Else Writeln('При заданных ограничениях нет значений функции F.');
Repeat Until KeyPressed;{ожидание нажатия любой клавиши} End. {конец основной программы}
Результат работы программы
Введите значения ограничений |
Q1, |
Q2, Q3: 100 |
3 2.56 |
Максимальное значение функции F: |
5651.80 |
|
|
при X1 = 1 X2 = 36.8 X3 = |
29.9 |
|
|
Задача 2.24. Разработать схему алгоритма и программу для вычисления интервальной функции:
|
|
|
|
|
eax / 3 (cos(x3b) |
2)1/ 3 , если 1 x 10; |
|||
|
|
|
z |
x5 |
cos3 (ln(x)), если 10 |
x |
10,8; |
||
|
|
|
|
|
|
|
|
||
|
|
|
|
|
x3 |
ln3 (xa), если 10,8 |
x |
18,9; |
|
|
|
|
|
|
ln ln(x) , если x |
18,9, |
|
|
|
|
|
100 1 |
, если x |
14, |
|
|
|
||
где |
a |
i |
1 i2 |
|
|
|
|||
33 |
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
||
|
|
|
cos3 (i2 ), если x 14; |
|
|
|
|||
|
|
i |
1 |
|
|
|
|
|
|
b sin 3 (a) .
Значение x вводится с клавиатуры. Значение функции z выводится на экран. При вычислении значения функции z необходимо учесть область определения функции. Если функция не определена, то вывести сообщение «Функция при заданном аргументе не определена».
120
