Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Информатика лабы, / Лаб.работы / 7 - подпрограммы

.pdf
Скачиваний:
18
Добавлен:
14.03.2016
Размер:
625.31 Кб
Скачать

Л. Р.

Студент

Иванов И. И.

Группа

ХХ-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