Информатика лабы, / Лаб.работы / 7 - подпрограммы
.pdfЛ. Р. |
Студент |
Иванов И. И. |
|
Группа |
ХХ-999 |
||
«Подпрограммы» |
|
|
|
Дата |
дд.мм.гг |
||
|
|||
|
|
|
|
|
Допуск |
|
|
|
|
|
|
|
Выполнение |
|
|
|
|
|
|
|
Отчет |
|
|
|
|
|
Условие задачи 1
Дважды вычислить значение выражения, первый раз используя процедуру, а второй – функцию.
|
|
3 |
x |
+ ax |
2 |
+1 |
|
2 |
y |
+by |
2 |
+1 |
|
|
|
|
z |
|
|
|
||
|
|
|
|
|
|
|
|
|||||||||||||||
S = d |
|
|
|
+3 |
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
x |
|
|
|
|
|
y |
|
|
|
4 |
z |
+cz |
2 |
+1 |
||||
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Тестовые примеры к задаче 1
Входные данные:
a=1 ,b=1, c=1, d=1 введите x=1, y=1, z=1
Выходные данные:
S = 2.83
Входные данные:
a=1 ,b=2, c=3, d=4 введите x=2, y=2, z=2
Выходные данные:
S = 7.81
1
Блок-схема к задаче 1 (использование функции)
Вспомогательная функция F:
( )= osnovaniex +d x2 +1 F osnovanie, d, x
x
Function F(const osnovanie,d,x:real):real
chislitel:=
exp(x*ln(osnovanie))+a*sqr(x)+1
znamenatel:= sqrt(abs(x))
F:=chislitel/znamenatel
Выход
osnovanie |
|
|
|
|
|
|
|
F |
||
|
F |
|
|
|||||||
|
|
|
|
|
|
|||||
d |
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
||
x |
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
основная программа (использование функции)
Начало
Ввод a,b,c,d
Ввод x,y,z
S:=d*(F(3,a,x)+
3*F(2,b,y))*(1/F(4,c,z))
Вывод S
Конец
Листинг программы на Pascal к задаче 1 (использование функции)
Program ABC;
Var a,b,c,d,x,y,z,S:real; // глобальные переменные программы ABC
//вспомогательная функция F (подпр. главной программы ABC) Function F(const osnovanie,d,x:real):real;
//локальные (вспомогательные) переменные функции F
Var chislitel, znamenatel : real; Begin // начало тела функции F
chislitel:= exp(x*ln(osnovanie))+a*sqr(x)+1; znamenatel:= sqrt(abs(x));
F:=chislitel/znamenatel; // функция получает своё значение End; // окончание тела функции F
// главная программа ABC Begin
writeLn('введите a,b,c,d'); readLn(a,b,c,d); writeLn('введите x,y,z'); readLn(x,y,z);
// вызов функции с различными фактическими параметрами
S:=d*(F(3,a,x)+3*F(2,b,y))*(1/F(4,c,z));
writeLn('S=',S:8:2);
End.
2
Блок-схема к задаче 1 (использование процедуры)
Вспомогательная процедура Fpr:
Fpr (osnovanie, d, x, resultat )
resultat = osnovaniex +d x2 +1 x
Procedure Fpr(const osnovanie,d,x:real; var resultat:real)
chislitel:=
exp(x*ln(osnovanie))+a*sqr(x)+1
znamenatel:= sqrt(abs(x))
resultat:=chislitel/znamenatel
Выход
osnovanie
d |
|
|
|
Fpr |
|
|
resultat |
|
|
|
|
|
|||
|
|
|
|
|
|
x
основная программа (использование процедуры)
Начало
Ввод a,b,c,d
Ввод x,y,z
Fpr(3,a,x,v1)
Fpr(2,b,y,v2)
Fpr(4,c,z,v3)
S:=d*(v1+3*v2)*(1/v3)
Вывод S
Конец
Листинг программы на Pascal к задаче 1 (использование процедуры)
Program ABC;
Var a,b,c,d,x,y,z,S:real; // глобальные переменные программы ABC v1,v2,v3: real;
//вспомогательная процедура Fpr (подпр. главной программы ABC) Procedure Fpr(const osnovanie, d, x:real; var resultat:real);
//локальные (вспомогательные) переменные процедуры Fpr
Var chislitel, znamenatel : real;
Begin // начало тела процедуры Fpr chislitel:= exp(x*ln(osnovanie))+a*sqr(x)+1; znamenatel:= x*sin(x);
resultat:=chislitel/znamenatel; //вычисление результата
End; // окончание тела функции Fpr
3
// главная программа ABC Begin
writeLn('введите a,b,c,d'); readLn(a,b,c,d); writeLn('введите x,y,z'); readLn(x,y,z);
//вызов процедуры с различными фактическими параметрами
Fpr(3,a,x,v1);
Fpr(2,b,y,v2);
Fpr(4,c,z,v3);
S:=d*(v1+3*v2)*(1/v3);
writeLn('S=',S:8:2);
End.
Условие задачи 2
Ввести двумерные массивы X1N1×N1 , X 2N 2×N 2 , X 3N 3×N 3 . Найти наименьший из максимумов этих массивов. Значением найденного минимального максимума заменить элементы побочных диагоналей всех матриц. Далее переписать в одномерный массив Y главную диагональ той матрицы, в которой максимум окажется наибольшим. (При решении реализовать процедуры ввода и вывода массивов: Vvod2m(A,N,Name),
Vivod2m(A,N,Name), Vivod1m(A,N,Name); Form(A,B,N) – процедуру формирования из двумерного массива A одномерного массива B; Zamena(A,N,Chislo) – замена побочной диагонали значением Chislo; и функцию Maximum(A,N,M):<тип матрицы> – максимум в матрице; а также функцию min(x,y) :<тип матрицы> – минимум из пары чисел x, y)
4
Тестовый пример к задаче 2
Входные данные: |
|
|
|||||
N1=3 |
|
|
массив X1: |
|
|||
Исходный |
|
||||||
2 |
|
|
3 |
|
4 |
|
|
|
56 |
|
|
6 |
|
5 |
|
|
3 |
|
|
4 |
|
6 |
|
N2=2 |
|
|
массив X2: |
|
|||
Исходный |
|
||||||
|
34 |
|
|
5 |
|
|
|
|
6 |
|
|
7 |
|
|
|
N3=4 |
|
|
массив X3: |
|
|||
Исходный |
3 |
||||||
34 |
|
|
5 |
|
4 |
||
23 |
|
455 |
|
4 |
6 |
||
7 |
|
|
5 |
|
4 |
3 |
|
4 |
|
|
7 |
|
8 |
6 |
Выходные данные: max1=56 max2=34 max3=455
минимальный максимум равен 34
выводим |
|
массив X1: |
|
|
||||||
2 |
|
3 |
|
34 |
|
|
|
|||
56 |
|
|
34 |
|
5 |
|
|
|
||
|
34 |
|
|
4 |
6 |
|
|
|
||
выводим |
|
массив X2: |
|
|
||||||
34 |
|
|
34 |
|
|
|
|
|
|
|
|
34 |
|
|
7 |
|
|
|
|
|
|
выводим |
|
массив X3: |
|
|
||||||
|
34 |
|
5 |
4 |
|
34 |
||||
|
23 |
|
455 |
|
34 |
|
6 |
|||
7 |
|
|
34 |
|
|
4 |
|
3 |
||
|
34 |
|
|
7 |
|
8 |
|
|
6 |
Выводим одномерный массив Y:
34 455 4 6
5
Блок-схема к задаче 2
Основная программа
Начало
Vvod2m(X1,N1,'X1')
Vvod2m(X2,N2,'X2')
Vvod2m(X3,N3,'X3')
Vivod2m(X1,N1,'X1')
max1:=Maximum(X1,N1,N1)
Вывод max1
Vivod2m(X2,N2,'X2')
max2:=Maximum(X2,N2,N2)
Вывод max2
Vivod2m(X3,N3,'X3')
max3:=Maximum(X3,N3,N3)
Вывод max3
MinOfMax:=min(max1,
min(max2,max3))
Вывод MinOfMax
1
1
Zamena(X1,N1,MinOfMax)
Zamena(X2,N2,MinOfMax)
Zamena(X3,N3,MinOfMax)
Vivod2m(X1,N1,'X1')
Vivod2m(X2,N2,'X2')
Vivod2m(X3,N3,'X3')
(max1>max2) and (max1>max3)
Ny:=N1 |
max2>max3 |
|
|
|
|
|
|
|
|
|
Ny:=N2 |
|
|
|
|
|
|
|
|
|
|
|
|||
|
form(X1,Y,Ny) |
|
|
|
|
|
|
|
|
|
|
|
Ny:=N3 |
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
form(X2,Y,Ny) |
|
|
|
|
|
|
|
form(X3,Y,Ny) |
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Vivod1m(Y,Ny,'Y')
Конец
6
ввод двумерного массива |
вывод двумерного массива |
|
|
procedure Vvod2m(var A:T2m; var |
Vivod2m(const A:T2m; const N:byte; |
N:byte; const Name:TName) |
const Name:TName) |
Ввод N |
i := 1 , N |
j := 1 , N |
Ввод A[i, j] |
Выход |
i := 1 , N |
j := 1 , N |
Вывод A[i, j] |
Выход |
|
|
вывод одномерного массива |
замена элементов побочной диагонали |
||||||||
|
|
|
|
матрицы |
|||||||
|
|
|
|
|
|
|
|
||||
Vivod1m(const A:T1m; const N:byte; |
procedure Zamena(var A:T2m; const |
||||||||||
|
|
const Name:TName) |
|
|
N:byte; const Chislo:integer) |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i := 1 , N |
|
|
|
|
i := 1 , N |
|
|
||
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Вывод A[i, j] |
|
|
|
A[i,N-i+1]:=Chislo |
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Выход |
Выход |
Name |
|
|
|
|
|
|
|
|
A |
A |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
Vvod2m |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Vivod2m |
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
N |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
N |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
A |
|
|
|
|
|
|
|
|
|
|
Name |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
A |
|
|
|
|
|
|
|
|
|
|
|
|
A |
|||||||||||
|
|
|
Vivod1m |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
N |
|
|
|
|
|
|
|
|
N |
|
|
|
|
|
|
Zamena |
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
Name |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Chislo |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7
|
формирование одномерного массива B из |
|
поиск максимума в двумерном массиве |
|
двумерного A |
|
|
|
|
procedure Form(const A:T2m; var |
|
function Maximum(const A:T2m; |
|
B:T1m; const N:byte) |
N,M:byte):integer |
|
|
Max := A[1,1] |
|
i := 1 , N |
|
|
|
i := 1 , N |
|
B[i]:=A[i,i] |
|
|
|
j := 1 , M |
|
|
|
|
Выход |
A[i, j] > Max |
|
|
|
поиск наименьшего из пары чисел |
|
Max := A[i, j] |
|
|
|
function min(const x,y:integer):integer |
|
Maximum := Max |
|
x<y |
Выход |
min:=x |
min:=y |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Выход |
|
|
|
A |
|
|
|
|
|
|
|
|
|
A |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
N |
|
|
|
|
|
|
Maximum |
|
|
|
max |
|
|
|
Form |
|
|
B |
|||
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
N |
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
M |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x |
|
|
|
min |
|
|
|
min |
|
|
|
||||||
|
|
|
|
|
|
|||
y |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
8
Структура пространства имён программы к задаче 2
9
Листинг программы на Pascal к задаче 2
program GlobalSubPr; const MaxRazm = 10;
type T1m=array[1..sqr(MaxRazm)] of integer; T2m=array[1..MaxRazm,1..MaxRazm] of integer; TName=string[5];
var X1,X2,X3:T2m; Y:T1m; N1,N2,N3,Ny:byte;
max1,max2,max3,MinOfMax,MaxOfMax:integer;
// ввод двумерного массива
procedure Vvod2m(var A:T2m; var N:byte; const Name:TName); var i,j:byte;
begin
writeLn('вводите массив ', Name,':'); write('размерность массива N='); readLn(N);
for i:=1 to N do for j:=1 to N do
begin write(Name,'[',i,',',j,']='); readLn(A[i,j]);
end;
end;
// вывод двумерного массива
procedure Vivod2m(const A:T2m; const N:byte; const Name:TName); var i,j:byte;
begin
writeLn('выводим массив ', Name,':'); for i:=1 to N do
begin
for j:=1 to N do write(A[i,j]:5);
writeLn;
end;
end;
// поиск максимума в двумерном массиве
function Maximum(const A:T2m; N,M:byte):integer; var max:integer;
i,j:byte; begin
max:=A[1,1];
for i:=1 to N do for j:=1 to M do
if A[i,j]>max then max:=A[i,j];
Maximum:=max;
10