Лабораторная №6 вариант №13 по информатике, выполненная

advertisement
Лабораторная работа №6
Программирование с использованием подпрограмм пользователя.
Цель работы – овладение навыками
алгоритмизации задач с использованием
подпрограмм пользователя различных
видов, овладение навыками написания
программ и обращения к ним, выбора
параметров подпрограмм.
Задание для самостоятельной работы.
1. Изучить:



правила записи подпрограмм различных видов и способов обращений к ним;
способы передачи параметров в подпрограмму;
правила записи программ, использующих подпрограммы.
2. Разработать алгоритм решения задачи.
3. Составить программу решения задачи.
4. Подготовить тестовый вариант программы и исходных данных.
Задание к работе
Задание А.
1. Выполнить на ЭВМ программу, использующую подпрограмму функцию, в
соответствии с номером параметра, указанным в таблице.
2. Проверить правильность выполнения программы с помощью тестового варианта.
Вариант
Условия задачи
Задания
Примечания
1
Вычислить большие корни кв. уравнений
x2-ax+b=0
cy2-dy-f=0
Все корни действительные
2
Подсчитать число точек, находящихся внутри
круга радиусом r с центром в начале координат;
координаты заданы массивами X(100), Y(100)
Расстояние точки от начала
координат вычислять в
подпрограмме

3
Определить периметры энугольников,
Длину стороны
координатами их вершин заданы в массивах
энугольников вычислять в
X, Y.
подпрограмме
4
Подсчитать число точек, находящихся внутри
Расстояние точки от центра
круга радиусом r с центром в точке с координатами круга определять в
(1,1); координаты заданы массивами X(80), Y(80) подпрограмме
5
Вычислить z=(v1+v2+v3)/3 , где v1 ,v2,v3, - объёмы
шаров с радиусами r1 , r2 и r3 соответственно
Vi вычислять в
подпрограмме
6
Вычислить суммы положительных элементов
массивов X(N), Y(M), Z(K)
N<=60 M<=60 K<=70
7
Вычислить среднее арифметическое
положительных элементов для массивов A(N1),
B(N2), C(N3)
N1<=100 N2<=100
N3<=100
8
Подсчитать количество элементов матриц X(10,15)
и Y(20,12), удовлетворяющих условиям 0<=xij<=1
и 0<=yij<=1
9
Вычислить суммы положительных элементов
каждой строки для матриц A(10,12) и B(15,10)
10
Вычислить z=(xm1+xm2)/2 , где xm1 и xm2 –
наименьшие элементы массивов X1(70), X2(80)
11
Вычислить суммы элементов главных диагоналей
матриц A(N,N) B(M,M)
M<=20 N<=30
12
Вычислить z=(s1+s2)/2, где s1- сумма
положительных элементов массива X(50); s2сумма отрицательных элементов массива Y(60)
Обе суммы вычислять в
одной подпрограмме
13
Подсчитать число нулевых элементов для матриц
A(N,M) и B(M,N)
M<=20 N<=20
14
Вычислить суммы элементов нижних треугольных
матриц для матриц A(15,15) и B(20,20)
15
Определить число положительных элементов до
первого отрицательного в массивах X(40), Y(50),
Z(N)
N<=50
Задание Б.
1. Выполнить на ЭВМ программу, использующую подпрограмму-процедуру в
соответствии с номером, указанным в таблице.
2. Проверить правильность выполнения программы с помощью тестового варианта .
Вариант
Условие задачи
Задания
Примечания
1
Вычислить z = (s1+s2)/k1k2 ,где s1 и k1 – сумма и
количество положительных элементов массива X(N);
s2 и k2 – сумма и количество положительных
элементов массива Y(M).
2
Вычислить z = (es1+es2)/k1k2, где s1 и k1 – сумма и
количество положительных элементов массива X(100); Обе суммы вычислять в
s2 и k2 – сумма и количество положительных
одной подпрограмме
элементов массива Y(80).
3
Вычислить и запомнить суммы положительных
элементов каждой строки матицы A(10,20), B(15,10).
4
Вычислить z = (x1+y1)/(x2-y2), где x1 и x2 – корни
уравнения 2x2+x-4 = 0, y1 и y2 – корни уравнения
ay2+2y-1 = 0 .
5
Найти наибольшие элементы и их порядковые номера
N<=80 M<=70
массивов X(N) и Y(M)
6
Переписать положительные элементы массива X(100)
и Y(80) в массив Z подряд
7
Найти наименьшие элементы и номера строк и
столбцов, в которых они расположены, для матриц
A(10,15) и B(15,12)
8
Вывести на печать элементы целочисленных матриц
N(5,8) и M(10,6), кратные трём
M<=100 N<=100
Все корни
действительные
Запись в массив Z
осуществлять в
подпрограмме
9 Вычислить z, где xi и yi – заданы массивами
Все суммы вычислять в
одной подпрограмме
Вычислить z = (xmax-ymin)/2, где xmax – максимальный
10 элемент массива X(50); ymin – минимальный элемент
массива Y(40)
xmax и ymin вычислять в
одной подпрограмме
11
Вычислить и запомнить количество отрицательных
элементов каждого столбца для матриц A(10,10), B(15,20)
12
Вычислить суммы элементов верхней треугольной матрицы
для матриц A(10,10), B(15,15)
13
Найти средние значения и стандартные отклонения для
элементов массивов X(N), Y(M)
N<=100 M<=100
14
Вычислить суммы и количества элементов, находящихся в
интервале от a до b для матриц X(10,8) и Y(10,12)
Преобразовать массивы X(50) и Y(60), расположив в них
15 подряд только положительные элементы. Вместо остальных
элементов записать нули
Пример выполнения работы
Задание А.
Выполнить на ЭВМ решение задачи. Определить ближайшую к началу координат точку,
находящуюся в верхней полуплоскости, и наиболее удалённую точку, лежащую в нижней
полуплоскости. Координаты точек, находящихся в верхней полуплоскости , заданы
массивами X1(N) и Y1(N), а лежащие в нижней полуплоскости ,- массивами X2(M) и
Y2(M), где N<=40, M<=60.
Для каждой точки верхней полуплоскости следует определить расстояние от начала
координат. Из этих расстояний необходимо найти наименьшее. Такие же действия
выполнить для точек, находящихся в нижней полуплоскости, однако найти наибольшее
расстояние от начала координат.
Вычисление расстояний от начала координат и нахождение наименьшего или
наибольшего из них выполним в подпрограмме-функции.
Использование одной подпрограммы для нахождения наибольшего и наименьшего
значений потребует введения дополнительного параметра, который необходим для
проверки условия K*R>K*RM. Если K=1, то условие R>RM используется для нахождения
наибольшего; если K= -1, то условие
R<RM используется для нахождения наименьшего.
В подпрограмму необходимо передать массивы координат точек, их размер, а также
параметр K, который может принимать значения +1 или –1. Результат, полученный в
подпрограмме–функции, присваивается её имени. Программа, реализующая алгоритм,
имеют вид:
program coord;
usec crt;
const n=40;
type mas =array[1..n] of real;
var i,n : byte;
s : real;
x ,y : mas;
function vec(x,y:mas; n,kx:integer):real;
var j : integer;
r,rm : real;
begin
rm := -1e20;
for j := 1 to n do begin
r := sqrt(sgr(x[i])+sgr(y[i]));
if (kx*r>=kx*rm) then rm := r;
end;
vec := rm
end;
{ исполняемая часть главной программы }
begin
textattr:=27;clrscr;
gotoxy(30,2);writeln(‘');
write('Введите кол-во координат верхней полуплоскости. ');
readln(n);
writeln('Введите координаты');
for i :=1 to n do begin
read(x[i]); write(‘ ‘);readln(y[i]);
end;
writeln(‘Ближайшая точка удалена на расстояние =’, s:=vec(x,y,n,-1);
write('Введите кол-во координат нижней полуплоскости. ');
readln(n);
writeln('Введите координаты');
for i :=1 to n do begin
read(x[i]); write(‘ ‘);readln(y[i]);
end;
writeln(‘Наиболее удаленная точка находится на расстояни =’, s:=vec(x,y,n,1);
end.
Проверить правильность выполнения программы для массивов, заданных значениями:
Для верхней полуплоскости x={-4,0,3}; y={0,5,4};
Для нижней полуплоскости x={-4,0,2}; y={-2,-5,-1};
Для которых наименьшее расстояние от начала координат в верхней полуплоскости s = 4,
а наибольшее - в нижней полуплоскости s = 5.
Задание Б.
Решить на ЭВМ задачу. Переписать положительные элементы массивов X(n),Y(m) в
массив Z подряд. Запись положительных элементов в массив осуществить в
подпрограмме. Принять ограничения: n<=100 и m<=100.
В подпрограмме должна осуществляться запись положительных элементов исходного
массива в массив результатов.
Для этого в подпрограмму необходимо передать следующие параметры: имя и количество
элементов исходного массива, имя и номер элемента с которого дописывать
результирующий массив. Поскольку в массив результатов Z записывается подряд
положительные элементы из нескольких массивов, в списке параметров должны
фигурировать также: входной параметр L – номер ячейки, начиная с которой необходимо
осуществлять запись в массив результатов.
При первом обращении к подпрограмме в неё необходимо передать имя массива Х,
количество его элементов N; входной параметр L=1, запись осуществляется в массив Z,
начиная с элемента с индексом 1. При завершении первого обращения L хранит номер
последней занятой ячейки в массиве Z.
При втором обращении необходимо передать соответственно массив Y, количество его
элементов M, и L=L+1 равной номеру ячейки преднозначенной для до записи в массив Z.
В схеме алгоритма при первом обращении к подпрограмме параметр L задан равным
нулю, так как в подпрограмме перед записью элемента в массив z индекс L увеличивается
на 1. По этой же причине при втором обращении параметру L опять увеличивается на 1,
что даёт возможность обратиться к следующей ячейки массива Z при втором обращении.
Программа, реализующая алгоритм, имеют вид:
program sort (input,output);
uses crt; {подключение модуля упровляющего текстовым режимом монитора}
const n=200;
type mas:array[1..n] of real;
var i,n,m,l: byte;
x,y,z:mas;
procedure st (var a,c:mas;n:byte;var l:byte);
var j:byte;
begin
for j:=1 to n do
if a[i]>0 then begin
inc(l);
c[l] := a[j];
end;
end;
{ исполняемая часть главной программы }
begin
window(1, 1, 80, 25);textattr := 27; clrscr;
gotoxy(5, 2);write('Введите кол-во элементов массива X');
readln(n);
gotoxy(5, 3);write('Введите значения массива X');
for i := 1 to n do begin
gotoxy(i*4-2, 5); read(x[i]);
end;
gotoxy(5, 9);write('Введите кол-во элементов массива Y');
readln(m);
gotoxy(5, 10);write('Введите значения массива Y');
for i := 1 to m do begin
gotoxy(i*4-2, 12); read(y[i]);
end;
l := 0;
st(x,z,n,l);
st(y,z,m,l);
gotoxy(5, 15);write(‘Результативный массив Z’);
for i:=1 to l do begin
gotoxy(i*4-2, 17);write(z[i]);
end;
end.
Данная конкретная программа в тестировании не нуждается, так как выведенные на
печать результаты позволяют однозначно судить о правильности выполнения программы.
Контрольные вопросы
1. Указать, при каких условиях целесообразно использование подпрограмм, какие
выгоды они представляют пользователю.
2. Указать, в чём отличие различных видов подпрограмм пользователя.
3. Указать способы обращения к подпрограммам пользователя.
4. Указать способы передачи параматров в подпрограмму.
5. Указать, как организовывать подпрограмму без параметров.
6. Перечислить, как согласуются формальные и фактические параметры.
7. Указать конструкции, которые могут быть формальными и фактическими
параметрами.
8. Пояснить, как и куда осуществляется выход из подпрограммы.
Download