Вычислительная техника и программирование. В 2 ч. Ч. 1. Программирование в среде TURBO PASCAL 7
.0.pdfТестовая проверка. Выполнить программу при N=4 и M=4, приняв следующие значения исходной матрицы А:
æ |
1 .5 |
2 .0 |
- 1 .0 |
2 |
ö |
ç |
3 .3 |
4 .4 |
5 .5 |
6 .6 |
÷ |
ç |
- 2 |
3 . |
4 . |
5 . |
÷ |
ç |
÷ |
||||
è |
0 .0 |
- 2 . |
7 . - 4 |
ø |
|
В результате выполнения программы выводится матрица в виде:
1.52.0
3.3 4.4 5.5 6.6
<пустая строка>
0.0
Правильность выполнения программы легко устанавливается сравне- нием исходной матрицы А с результатом печати матрицы В. В тестовом наборе данных рассмотрены следующие случаи:
1)в строке есть отрицательный элемент;
2)в строке нет отрицательных элементов;
3)первый элемент строки - отрицательный.
Использование указанных случаев позволяет убедиться в работоспо- собности программы при любых наборах данных.
71
Л а б о р а т о р н а я р а б о т а N 8 “Программирование с использованием подпрограмм пользователя”
Цель работы - овладение навыками алгоритмизации и программиро- вания задач с использованием подпрограмм пользователя различных видов, овладение навыками написания подпрограмм и обращения к ним, выбора параметров подпрограмм.
Задания для самостоятельной подготовки
1.Изучить:
-правила записи подпрограмм различных видов и способов об- ращений к ним;
-способы передачи параметров в подпрограмму;
-правила записи программ, использующих подпрограммы раз- личных видов;
-порядок выполнения программ, использующих подпрограммы.
2.Разработать алгоритм решения в соответствии с заданием.
3.Составить программу решения задачи.
4.Подготовить тестовый вариант программы и исходных данных.
Задание к работе
Задание А.
1. Выполнить на ЭВМ программу, использующую подпрограмму- функцию, в соответствии с заданием, указанным в табл. 1.
Т а б л и ц а 1
Вар. |
Условие задачи |
Примечания |
|||
задан. |
|||||
|
|
|
|
||
1 |
|
2 |
3 |
|
|
1 |
Вычислить большие корни квадратных уравне- |
Все корни |
действи- |
||
|
ний |
− ax + b = 0 |
тельные |
|
|
|
x2 |
|
|
||
|
cy 2 |
− dy − f = 0 |
|
|
|
2 |
Подсчитать число точек, находящихся внутри |
Расстояний |
точки от |
||
|
круга радиусом r с центром в начале координат; |
начала |
координат |
||
|
координаты заданы массивами Х(100), Y(100) |
вычислять в подпро- |
|||
|
|
|
грамме |
|
|
3 |
Определить периметры треугольников, задан- |
Длину стороны треу- |
|||
|
ных координатами их вершин |
гольников вычислять |
|||
|
XA(5), XB(5), XC(5) |
в подпрограмме |
|||
|
YA(5), YB(J), YC(5) |
|
|
||
72
П р о д о л ж е н и е т а б л и ц ы 1
1 |
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
3 |
|
|
4 |
Подсчитать число точек, находящихся внутри |
Расстояние |
точки от |
|||||||||||||||
|
круга радиусом r с центром в точке с координа- |
центра |
круга |
опре- |
||||||||||||||
|
тами (1,1); координаты заданы массивами Х(80), |
делять |
в |
подпро- |
||||||||||||||
|
Y(80). |
|
|
|
|
|
|
|
|
|
|
|
|
|
грамме |
|
|
|
5 |
Вычислить |
z = |
v1 |
+ v2 + v3 |
|
, где |
v1,v2,v3 - |
vi вычислять |
в под- |
|||||||||
|
|
|
3 |
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
программе |
|
|
||
|
объемы шаров с радиусами r1,r2,r3 соответ- |
|
|
|||||||||||||||
|
ственно |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
Вычислить |
суммы |
положительных |
элементов |
N≤60, M≤60 |
|||||||||||||
|
массивов Х(N), Y(M), Z(K). |
|
|
|
|
|
|
|
K≤70 |
|
||||||||
7 |
Вычислить среднее арифметическое поло- |
|
N1≤100 |
|
||||||||||||||
|
жительных |
элементов |
для |
|
массивов |
А(N1), |
|
N2≤100 |
|
|||||||||
|
B(N2), C(N3). |
|
|
|
|
|
|
|
|
|
|
|
|
|
N3≤100 |
|
||
8 |
Подсчитать |
|
количество |
элементов |
|
матриц |
|
|
|
|
||||||||
|
Х(10,15) и Y(20,12), удовлетворяющих условиям |
|
|
|
|
|||||||||||||
|
0≤xij ≤1 и 0≤yij ≤1. |
|
|
|
|
|
|
|
|
|
|
|
|
|||||
9 |
Вычислить |
суммы |
положительных |
элементов |
|
|
|
|
||||||||||
|
каждой строки для матриц А(10,12) и В(15,10). |
|
|
|
|
|||||||||||||
10 |
Вычислить |
z |
= |
|
|
x m1 |
+ x m 2 |
|
, где xm1 и xm2 - |
|
|
|
|
|||||
|
|
|
|
2 |
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
наименьшие элементы массивов Х1(70), Х2(80). |
|
|
|
|
|||||||||||||
11 |
Вычислить суммы элементов главных диагона- |
|
M≤20 |
|
||||||||||||||
|
лей матриц A(N,N), B(M,M). |
|
|
|
|
|
N≤30 |
|
||||||||||
12 |
Вычислить |
z |
= |
|
|
s1 + s2 |
|
|
, где s1 |
- сумма |
Обе суммы |
вычис- |
||||||
|
|
|
2 |
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
массива X(50); s2 - |
лять в одной под- |
|||||||||
|
положительных |
элементов |
программе |
|
|
|||||||||||||
|
сумма отрицательных элементов масси-ва Y(60). |
|
|
|
|
|||||||||||||
13 |
Подсчитать число нулевых элементов для мат- |
|
M≤20 |
|
||||||||||||||
|
риц A(N,M) и B(M,N). |
|
|
|
|
|
|
|
|
N≤20 |
|
|||||||
14 |
Вычислить сумму элементов нижних треуголь- |
|
|
|
|
|||||||||||||
|
ных матриц для матриц А(15,15) и В(20,20). |
|
|
|
|
|||||||||||||
15 |
Определить число положительных эле-ментов до |
|
N≤50 |
|
||||||||||||||
|
первого отрицательного |
в |
|
массивах |
X(40), |
|
|
|
|
|||||||||
|
Y(50), Z(N). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2. Проверить правильность выполнения программы с помощью тесто- вого варианта.
73
Задание Б.
1. Выполнить на ЭВМ программу, использующую подпрограмму- процедуру в соответствии с номером, указанным в табл. 2.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Т а б л и ц а 2 |
||
Вар. |
|
|
Условие задачи |
|
Примечания |
|||||||||||
Задан. |
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
2 |
|
|
|
|
|
|
|
3 |
|
|
1 |
Вычислить z = |
|
s1 |
+ s2 |
, где s1 и k1- сумма и |
|
M≤100 |
|||||||||
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
k1 k2 |
|
|
|
|
|
N≤100 |
|||||
|
количество положительных элементов мас-сива |
|
|
|||||||||||||
|
|
|
|
|
||||||||||||
|
X(N); s2 и k2 - сумма и количество положитель- |
|
|
|
|
|||||||||||
|
ных элементов массива Y(M). |
|
|
|
|
|||||||||||
2 |
Вычислить |
z = |
es1 |
+ e s2 |
|
, где s1 и k1- сум- |
Обе |
суммы |
вычис- |
|||||||
|
k1 k2 |
|
||||||||||||||
|
|
|
|
|
|
|
|
|
лять |
в |
одной под- |
|||||
|
ма и количество положительных элементов |
программе |
|
|||||||||||||
|
массива X(100); s2 и k2 - сумма и количество |
|
|
|
|
|||||||||||
|
положительных элементов массива Y(80). |
|
|
|
|
|||||||||||
3 |
Вычислить и запомнить суммы поло-жительных |
|
|
|
|
|||||||||||
|
элементов |
каждой строки |
матрицы А(10,20), |
|
|
|
|
|||||||||
|
В(15,10). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
Вычислить z = ( x1 |
+ y1) / |
|
( x2 − y2 ) , где х1 |
Все |
корни |
действи- |
|||||||||
|
и х2 - корни уравнения 2х2+х-4=0, у1 и у2 - |
|||||||||||||||
|
тельные |
|
||||||||||||||
|
корни уравнения ау2+2у-1=0 |
|
|
|
|
|||||||||||
5 |
Найти наибольшие элементы и их порядковые |
|
|
N≤80 |
||||||||||||
|
номера массивов X(N) и Y(M). |
|
|
M≤70 |
||||||||||||
6 |
Переписать |
положительные |
|
элементы массива |
Запись |
в массив Z |
||||||||||
|
X(100) и Y(80) в массив Z подряд. |
выполнить в подпро- |
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
грамме |
|
|
|
7 |
Найти наименьшие элементы и номера строк и |
|
|
|
|
|||||||||||
|
столбцов, в которых они расположены, для мат- |
|
|
|
|
|||||||||||
|
риц А(10,15) и В(15,12). |
|
|
|
|
|
|
|
||||||||
8 |
Вывести на печать элементы целочисленных |
|
|
|
|
|||||||||||
|
матриц N(5,8) и M(10,6), кратные трем. |
|
|
|
|
|||||||||||
|
Вычислить |
|
|
|
|
|
|
|
|
|
|
Все |
суммы |
вычис- |
||
|
40 |
|
|
|
50 |
|
|
|
||||||||
9 |
z = |
å sin x i |
+ å cos y i |
лять в одной под- |
||||||||||||
|
i =1 |
|
|
i =1 |
|
|
, где xi и |
программе |
|
|||||||
|
|
40 |
|
|
|
|
|
|||||||||
|
|
|
|
|
å |
x i |
|
|
|
|
|
|
|
|
||
|
|
|
|
|
i =1 |
|
|
|
|
|
|
|
|
|
||
74
yi заданы массивами.
П р о д о л ж е н и е т а б л и ц ы 2
1 |
|
2 |
|
3 |
|
10 |
Вычислить z = |
x m ax − y m in |
, где xmax - |
xmax и ymin вычи- |
|
2 |
|||||
|
|
|
слять в одной под- |
||
|
максимальный элемент массива X(50); ymin - |
||||
|
программе |
||||
|
минимальный элемент массива Y(40)/ |
|
|||
11 |
Вычислить и запомнить количество отрицатель- |
|
|||
|
ных элементов каждого столбца для матриц |
|
|||
|
А(10,10), В(15,20). |
|
|
|
|
12 |
Вычислить суммы элементов верхней треуголь- |
|
|||
|
ной матрицы для матриц А(10,10), В(15,15). |
|
|||
13 |
Найти средние значения и стандартные отклоне- |
N≤100 |
|||
|
ния для элементов массивов X(N), Y(M). |
M≤100 |
|||
14 |
Вычислить суммы и количества элементов, |
|
|||
|
находящихся в интервале от a до b для матриц |
|
|||
|
X(10,8) и Y(10,12). |
|
|
|
|
15 |
Преобразовать массивы X(50) и Y(60), рас- |
|
|||
|
положив в них подряд только положитель-ные |
|
|||
|
элементы. Вместо остальных элементов записать |
|
|||
|
нули. |
|
|
|
|
2. Проверить правильность выполнения программы с помощью тесто- вого варианта.
Пример выполнения работы
Задание А.
1. Выполнить на ЭВМ решение задачи. Определить ближайшую к началу координат точку, находящуюся в верхней полуплоскости, и наиболее удаленную точку, лежащую в нижней полуплоскости. Координаты точек, находящихся в верхней полуплоскости, заданы массивами X1(N) и Y1(N), а лежащих в нижней полуплоскости - массивами X2(M) и Y2(M), где N≤40, M≤60.
Для каждой точки верхней полуплоскости следует определить расстоя- ние от начала координат. Из этих расстояний необходимо найти наимень- шее. Такие же действия выполнить для точек, находящихся в нижней полу- плоскости, однако найти наибольшее расстояние от начала координат.
75
Вычисление расстояний от начала координат и нахождение наимень- шего или наибольшего из них выполним в подпрограмме-функции.
Использование одной подпрограммы для нахождения наибольшего или наименьшего значений потребует введения дополнительного парамет- ра, который необходим для проверки условия K R>K RM. Если K=1, то условие R>RM используется для нахождения наибольшего; если K=-1, то условие R<RM используется для нахождения наименьшего.
В подпрограмму необходимо передать массивы координат точек, их размер, а также параметр К, который может принимать значения +1 или -1. Результат, полученный в подпрограмме-функции, присваивается ее имени. Схема алгоритма решения задачи представлена на рис. 8.1.
1
начало
2
N,M
X1,Y1,X2,Y2
ввод исходных данных
3
F(X1,Y1,N,-1)
вызов подпрограммы-функции
4
S1=F
присваивание переменной значения функции
5
F(X2,Y2,M,1)
вызов подпрограммы-функции
6
S2=F
присваивание переменной значения функции
7
S1, S2
вывод результатов
8 конец 
76
9 Подпрограмма-функция
вход |
задание начального значе- |
ния
|
10 |
RM от К |
|
Да |
Нет |
||
K>0 |
|||
|
|
||
11 |
|
12 |
RM=−1020 RM=1020
|
13 |
|
|
|
i = 1,N |
цикл вычисления расстояния R от |
|
|
|
|
начала координат до точки, заданной |
|
14 |
|
координатами массивов X и Y |
|
|
|
|
|
R = |
x2 + y2 |
|
Нет |
15 |
проверка условия при К=1 нахождения |
|
|
|
||
|
KR³KRm |
наибольшего, а при К=-1 нахождения |
|
|
|
|
наименьшего расстояния от начала ко- |
|
|
Да |
ординат до точки, расположенной со- |
|
|
ответственно в нижней и верхней полу- |
|
|
16 |
|
плоскостях |
|
RM=R |
|
|
|
|
i |
|
17
F=RM
присвоение имени подпрограммы-
функции результата вычисления
18 |
|
выход |
77 |
Рис. 8.1
78
2. Проверить правильность выполнения программы для массивов,
заданных значениями
X1={-4, 0, 3}; Y1={0, 5, 4}; X2={-4, 0, 2}; Y2={-2, -5, -1},
для которых наименьшее расстояние от начала координат в верхней полу- плоскости s1=4, а наибольшее - в нижней полуплоскости s2=5.
Задание Б.
1. Решить на ЭВМ задачу. Переписать положительные элементы мас- сивов X(N), Y(M) в массив Z подряд. Запись положительных элементов в массив осуществить в подпрограмме. Принять ограничения: N<=100 и M<=100.
В подпрограмме должна осуществляться запись положительных эле- ментов исходного массива в массив результатов. Для этого в подпрограмму необходимо передать следующие параметры: имя и количество элементов исходного массива, имя и количество элементов результирующего массива.
Поскольку в массив результатов Z записываются подряд положительные элементы из нескольких массивов, в списке параметров должны фигуриро- вать также: входной параметр L - номер ячейки, начиная с которой необхо- димо осуществлять запись в массив результатов; выходной параметр К - номер ячейки, в которую записан последний положительный элемент ис- ходного массива при предыдущем обращении к подпрограмме. После окон-
чания записи элементов в массив результатов этот параметр определяет количество элементов, записанных в массив результатов.
При первом обращении к подпрограмме в нее необходимо передать имя массива Х. Количество его элементов N; входной параметр L=1, если запись осуществляется в массив Z, начиная с элемента с индексом 1, имя выходного массива Z, количество его элементов N+M и получать в подпро- грамме выходной параметр К, определяющий количество элементов, запи- санных в массив Z.
При втором обращении необходимо передать соответственно Y, M, L=K+1, Z, N+M, K. После второго обращения к подпрограмме К - суммар- ное количество элементов, записанных в массив Z после двух выполнений подпрограммы.
Схема алгоритма решений этой задачи имеет вид, представленный на рис. 2. В схеме алгоритма при первом обращении к подпрограмме параметр L задан равным нулю, так как в подпрограмме перед записью элемента в массив Z индекс К увеличивается на 1. По этой же причине при втором обращении параметру L присваивается значение К, т.е. меньшее на 1.
79
1
начало
2
N,MX,Y |
ввод исходных данных |
|
3
F(X,N,0,Z,N+M,K)
вызов подпрограммы-процедуры
4
F(Y,M,K+1,Z,N+M,K)
вызов подпрограммы-процедуры
5
Z

вывод результатов
6
конец
Подпрограмма-процедура
7
вход
8
K=L задание начального значения индекса результирующего массива Z
9
i = 1,N |
организация цикла обработки массива |
|
10
Нет
Xi>0 |
|
определение положительных элементов |
|
|
|
||
11 |
Да |
массива |
|
запись положительных элементов |
|||
|
|||
K=K+1 |
|
||
|
обрабатываемого массива в результи- |
||
Zk=Xi |
|
||
i |
|
рующий массив |
|
12 |
|
Рис. 8.2 |
|
|
|
||
выход |
|
||
80
