Информатика. Практикум
.pdf
| |
5 |
| |
3.00 |
| |
3.50 |
| |
51.88 |
| |
| |
6 |
| |
3.00 |
| |
4.00 |
| |
73.00 |
| |
| |
7 |
| |
5.00 |
| |
3.00 |
| |
52.00 |
| |
| |
8 |
| |
5.00 |
| |
3.50 |
| |
67.87 |
| |
| |
9 |
| |
5.00 |
| |
4.00 |
| |
89.00 |
| |
| |
------------------------------ |
|
|
|
|
|
|
| |
|
Задача 2.4. Разработать схему алгоритма и программу табуляции |
|||||||
функции |
z log3 (x y) |
|
x y с ограниченной областью опреде- |
|||||
ления, где x = 1; 200 (1) и y = 40; 100 (2). Если функцию z вычислить нельзя в силу области ее определения, то принять z = cos(x + y). Вывести в файл а.а все значения z, для которых выполняется условие
z 10;
x 31 y.
Решение задачи
Схема алгоритма решения задачи представлена на рис. 2.4.
Программа
Program Task2_4;
Var
Z : Real;
X, Y : Byte;
f : Text;
Begin {начало раздела операторов программы}
Assign(f, 'a.a'); Rewrite(f); {создание файла a.a} for X := 1 to 200 do
Begin {начало цикла 1 – для перебора значений Х} Y := 40; {начальное значение Y}
While Y <= 100 do
Begin {начало цикла 2 – для перебора значений Y}
If (X - Y) >= 0 Then Z := Ln(X+Y)/Ln(3) + Sqrt(X-Y) Else Z := Cos(X+Y);
{если условие выполняется, то вывод в файл}
If (Z > 10) |
and (X > 31*Sqrt(Y)) Then |
|
|
Writeln(f, 'X = ',X,' Y = ',Y,' Z = ',Z:6:2); |
|
Y := Y + 2; |
{приращение переменной Y} |
|
End; |
|
{конец цикла 2} |
71
End; |
{конец цикла 1} |
||||
Close(f); |
{закрытие файла а.а} |
||||
End. |
{конец программы} |
||||
|
1 |
Начало |
|
|
|
|
2 |
Создание |
|
|
|
|
|
файла a.a |
|
|
|
|
3 |
|
A |
|
|
|
|
|
|
|
|
|
|
X=1,200 |
|
|
|
|
4 |
|
|
|
|
|
|
Y=40 |
|
|
|
|
5 |
Y<100 |
нет |
|
|
|
|
|
|
||
|
|
|
да |
|
|
нет 6 |
X-Y>0 |
да |
|
||
8 |
|
7 |
|
||
|
|
|
|
||
|
|
|
|
|
|
Z=cos(X+Y) |
|
|
Z |
|
|
|
|
log3(X |
Y) |
||
|
|
|
|
X |
Y |
да |
9 |
Z |
10 и |
|
|
10 Вывод |
|
X |
31 Y |
|
|
|
|
нет |
|
|
|
в файл |
|
|
|
|
|
a.a |
|
|
|
|
|
X, Y, Z |
|
|
|
|
|
|
11 |
|
|
|
|
|
|
Y=Y+2 |
|
|
|
|
12 |
|
|
|
|
|
|
|
A |
|
|
|
13 |
|
|
|
|
|
|
Закрытие |
|
|
|
|
|
файла a.a |
|
|
|
|
14 |
Конец |
|
|
|
|
|
|
|
||
Рис. 2.4
72
Обозначение схемы алгоритма
X[I] – xi элемент массива X.
Результат работы программы
Файл а.а содержит:
X = 197 |
Y = 40 |
Z = |
17.51 |
||||
X = 198 |
Y = 40 |
Z = |
17.55 |
||||
X |
= |
199 |
Y |
= |
40 |
Z = |
17.59 |
X |
= |
200 |
Y |
= |
40 |
Z = |
17.64 |
Задача 2.5. Разработать схему алгоритма и программу вычисления значения функции y lg(sin 5x)3 для x = 40,1; 50,2; 70,8, нахо-
дящихся в файле а.а. Вывести на экран значения х и y. Если функция y не имеет значения в силу области определения х, вывести сообщение «Значение y не определено».
Решение задачи
Схема алгоритма решения задачи представлена на рис. 2.5.
Программа
Program Task2_5;
Var
I : Integer;
F : Text;
X: Array [1..3] of Real;
Y: Real;
Begin |
{начало раздела операторов программы} |
|
Assign(F, 'a.a'); Reset(F); {открытие файла a.a} |
||
for I:=1 to 3 do |
|
|
Begin |
{начало цикла} |
|
Read(F, X[I]); |
{чтение значения X[I] из файла} |
|
If Sin(5*X[I])>0 Then {если Х принадлежит области определения} |
||
Begin |
|
|
|
Y := Sin(5*X[I])*Sin(5*X[I])*Sin(5*X[I]); |
|
|
Y:=Ln(Y)/Ln(10); |
{вычисление Y} |
|
Writeln('При X = ',X[I]:3:1,' Y = ',Y:5:2);{вывод Y на экран} |
|
End Else Writeln('При X = ',X[I]:3:1,' значение Y не определено');
73
End; {конец цикла 1}
Close(F); {закрытие файла a.a}
Readln; {ожидание нажатия клавиши Enter}
End. {конец программы}
Результат работы программы
При X = 40.1 значение Y не определено При X = 50.2 значение Y не определено При X = 70.8 Y = -0.22
2.3. Задачи с использованием массивов различной размерности
Задача 2.6. Разработать схему алгоритма и программу вычисления выражения S = max{ai} + min{aj}, где i = 2, 4, 6, …, 100 – четные индексы элементов массива А, j = 1, 3, 5, …, 99 – нечетные индексы элементов массива А. Элементы массива А формируется по закону ak = cos(k2 + 2k + 30). Результат вычисления вывести на экран.
Решение задачи
Схема алгоритма решения задачи представлена на рис. 2.6.
Обозначения схемы алгоритма
A[K] – ak элемент массива А;
Max – значение максимального элемента среди четных элементов массива A;
Min – значение минимального элемента среди нечетных элементов массива A.
74
|
|
|
1 |
|
|
|
|
|
|
Начало |
|
|
|
|
2 |
|
|
|
|
|
|
Открытие |
|
|
|
|
|
файла а.а |
|
|
|
|
3 |
A |
|
|
|
|
|
|
|
|
|
|
|
I=1,3 |
|
|
|
|
4 |
Ввод из |
|
|
|
|
|
файла |
|
|
|
|
|
a.a |
|
|
|
|
|
X[I] |
|
|
|
нет |
5 |
sin(5X[I]) |
да |
|
|
|
|||
Вывод сообщения |
8 |
Вывод |
|
>0 |
6 |
|
|
Y= |
|||
|
|
|
|||
«Значение Y не |
|
Х[I] |
|
|
lg(sin5X[I])3 |
определено» |
|
«...» |
|
|
|
|
|
|
|
|
7 |
|
|
|
|
|
Вывод |
|
|
|
|
|
X[I], Y |
9
A
10
Закрытие файла а.а
11
Конец
Рис. 2.5
75
|
|
1 |
Начало |
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
Min=… |
Min=cos(12+1·2+30) |
|
|
|
|
Max=... |
Max = cos(22+2·2+30) |
|
|
|
3 |
A |
|
|
|
|
|
|
|
|
|
|
|
K=1,100 |
|
|
|
|
4 |
A[K]=cos(K2 |
|
|
|
|
|
|
|
|
|
|
|
+2·K+30) |
|
|
|
да |
5 |
нет |
|
|
|
|
К |
|
||
|
|
|
нечетно? |
|
|
8 Min> |
да |
6 |
6 Max< |
да |
|
|
|||||
A[K] |
9 |
|
|
A[K] |
7 |
нет |
Min=A[K] |
нет |
Max=A[K] |
||
|
|||||
|
|
||||
10
A
11
S=
Max+Min
12
Вывод
S
13
Конец
Рис. 2.6
Программа
Program Task2_6;
Uses Crt;
Var
Min, Max, S : Real;
K : Integer;
A : Array[1..100] of Real;
76
Begin |
{начало раздела операторов программы} |
ClrScr; |
{очистка экрана} |
Min:=cos(1+2+30); |
{начальное значение переменной минимума} |
Max:=cos(2*2+2*2+30);{начальное значение переменной максимума} for K := 1 to 100 do
begin |
{начало цикла} |
A[K]:=cos(K*K + 2*K + 30); {вычисление элемента A[K]} |
|
If odd(K) Then |
{проверка на нечетность} |
If Min>A[K] then Min:=A[K] {если нечетный элемент} |
|
|
Else If Max<A[K] then Max:=A[K]; {если четный элемент} |
end; |
{конец цикла} |
S:=Max + Min; {сумма максимального и минимального элементов}
Writeln('Сумма максимального и минимального элементов массива = ', S:8:5); {вывод S на экран}
Readln; |
{ожидание нажатия клавиши Enter} |
End. |
{конец программы} |
|
Результат работы программы |
Сумма максимального и минимального элементов массива = -0.00303
Задача 2.7. Разработать схему алгоритма и программу для нахождения максимального элемента каждой строки матрицы А. Элементы матрицы формируются по закону aij = сos(i + j), i = 1; 10, j = 1; 30. Максимальный элемент вычислять с использованием подпрограммы (function). Максимальные значения выводить с точностью до пяти знаков после десятичной точки.
Решение задачи
Схема алгоритма решения задачи представлена на рис. 2.7.
Обозначения схемы алгоритма
A[I, J] – аij элемент матрицы А;
B[J] – bj элемент одномерного массива B, который формируется из строки матрицы А;
MaxB(B) – вызов функции MaxB вычисления максимального элемента одномерного массива B;
Max – значение максимального элемента массива B, равное возвращаемому значению функции MaxB.
77
1
Начало
2 A I=1,10
3
B
J=1,30
4
A[I, J]= cos(I+J)
5 B[J]=A[I, J]
B
6
MaxB(B)
7
Вывод
I, Max
8
A
9
Конец
Рис. 2.7
Программа
Program Task2_7;
Type
TypeB = array[1..30] of Real; {описание типа массива TypeB}
Var
A : Array[1..10, 1..30] of Real;
B : TypeB;
I, J : Integer;
Max : Real;
{функция нахождения максимального элемента массива B1}
Function MaxB(B1 : TypeB) : Real;
78
var |
|
I : Integer; |
|
Max : Real; |
|
begin |
{начало раздела операторов функции MaxB} |
Max := B1[1]; {начальное значение переменной максимума} for I := 2 to 30 do
If Max < B1[I] then Max := B1[I]; MaxB := Max;
end; {конец функции MaxB }
Begin {начало раздела операторов основной программы} for I := 1 to 10 do
begin {начало цикла 1-для перебора строк массива A} for J := 1 to 30 do
begin {начало цикла 2-для перебора столбцов массива B} A[I, J] := cos(I * J);{вычисление элемента массива A} B[J] := A[I, J]; {создание массива B из строки массива A}
end; |
{конец цикла 2} |
Max := MaxB(B); |
{вызов функции MaxB} |
{вывод на экран} |
|
Writeln('Максимальный элемент ',I,'-й строки = ',Max:8:5); |
|
end; |
{конец цикла 1} |
end. |
{конец основной программы} |
Результат работы программы
Максимальный элемент 1-й строки = 0.99120 Максимальный элемент 2-й строки = 0.99984 Максимальный элемент 3-й строки = 0.99339 Максимальный элемент 4-й строки = 0.99984 Максимальный элемент 5-й строки = 0.99120 Максимальный элемент 6-й строки = 0.99859 Максимальный элемент 7-й строки = 0.98590 Максимальный элемент 8-й строки = 0.99937 Максимальный элемент 9-й строки = 0.98590 Максимальный элемент 10-й строки = 0.99609
Задача 2.8. Разработать схему алгоритма и программу нахождения минимального элемента двухмерного массива А размером 7 10, который сформирован из случайных чисел, находящихся в интервале от 0 до 999 включительно. Значение минимума искать в заштрихованных областях двумерного массива. Поиск минимального элемента оформить в виде подпрограммы (procedure). Значения элементов массива A в заштрихованной области и минимального элемента вывести на экран.
79
|
|
|
|
|
Область 3 |
|
|
||
a11 |
a12 |
a13 |
a14 |
a15 |
a16 |
a17 |
a18 |
a19 |
a1 10 |
a21 |
a22 |
a23 |
a24 |
a25 |
a26 |
a27 |
a28 |
a29 |
a2 10 |
a31 |
a32 |
a33 |
a34 |
a35 |
a36 |
a37 |
a38 |
a39 |
a3 10 |
a41 |
a42 |
a43 |
a44 |
a45 |
a46 |
a47 |
a48 |
a49 |
a4 10 |
a51 |
a52 |
a53 |
a54 |
a55 |
a56 |
a57 |
a58 |
a59 a5 10 |
|
a61 |
a62 |
a63 |
a64 |
a65 |
a66 |
a67 |
a68 |
a69 a6 10 |
|
a71 |
a72 |
a73 |
a74 |
a75 |
a76 |
a77 |
a78 |
a79 a710 |
|
Область 1
Область 2
Решение задачи
Схема алгоритма решения задачи представлена на рис. 2.8.
Программа
Program Task2_8;
Type
T1 = array[1..40] of Integer;
Var
A : Array[1..7, 1..10] of Integer; I, J, K, Min : Integer;
B : T1;
{процедура поиска минимального элемента (MinХ) массива Х размерности N}
Procedure MinArr(X : T1; N : Integer; Var MinX : Integer); Var I : Integer;
begin {начало раздела операторов процедуры MinArr} MinX := X[1]; {начальное значение переменной минимума} for I:=2 to N do {цикл для перебора элементов массива Х}
If MinX > X[I] then MinX := X[I]; end; {конец процедуры MinArr }
Begin {начало раздела операторов основной программы}
K := 0; {начальное значение числа элементов массива B}
Writeln('Значения элементов массива заштрихованной области:'); for I := 1 to 7 do {цикл 1–для перебора строк массива А}
for J := 1 to 10 do {цикл 2–для перебора столбцов массива А} begin {начало циклов 1, 2}
80
