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

Информатика_всем

.pdf
Скачиваний:
75
Добавлен:
03.03.2016
Размер:
5.42 Mб
Скачать

18. ВЫЧИСЛЕНИЯ С ИСПОЛЬЗОВАНИЕМ ПОДПРОГРАММ

Дважды вычислить значение выражения, первый раз используя

процедуру, а второй – функцию:

x

 

2

 

 

y

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

z

 

 

 

 

 

 

 

 

 

 

 

 

S d

3 ax

 

1

3

2

by

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

 

y

 

 

 

 

4z cz2

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Б л о к - с х е м а к з а д а ч е № 1 8 ( и с п о л ь з о в а н и е ф у н к ц и и )

Вспомогательная функция 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

Конец

Л и с т и н г п р о г р а м м ы н а P a s c a l к з а д а ч е № 1 8 ( и с п о л ь з о в а н и е ф у н к ц и и )

Program Z18_Fun;

// глобальные переменные программы ABC

49

Var a,b,c,d,x,y,z,S:real; // вспомогательная функция F

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

// главная программа

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.

50

Б л о к - с х е м а к з а д а ч е № 1 8 ( и с п о л ь з о в а н и е п р о ц е д у р ы )

Вспомогательная процедура 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

Конец

Л и с т и н г п р о г р а м м ы н а P a s c a l к з а д а ч е № 1 8 ( и с п о л ь з о в а н и е п р о ц е д у р ы )

Program Z18_Proc;

//глобальные переменные программы ABC Var a,b,c,d,x,y,z,S:real;

v1,v2,v3: real;

//вспомогательная процедура Fpr

Procedure Fpr(const osnovanie, d, x:real; var resultat:real);

// локальные переменные процедуры Fpr Var chislitel, znamenatel : real;

51

Begin // начало тела процедуры Fpr chislitel:= exp(x*ln(osnovanie))+a*sqr(x)+1; znamenatel:= x*sin(x);

//вычисление результата resultat:=chislitel/znamenatel;

End; // окончание тела процедуры Fpr

// главная программа 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.

19. ОБРАБОТКА МАССИВОВ С ИСПОЛЬЗОВАНИЕМ ПОДПРОГРАММ

Ввести двумерные массивы X1(N1, N1), X2(N2, N2), X3(N3, N3). Найти наименьший из максимумов этих массивов. Значением найденного минимального максимума заменить элементы побочных диагоналей всех матриц. Далее переписать в одномерный массив Y главную диагональ той матрицы, в которой максимум окажется наибольшим (при решении реализовать процедуры ввода и вывода массивов: Vvod2m(A, N, Name),

Vivod2m(A, N, Name), Vivod1m(A, N, Name); Form(A, B, N) – процедуру

52

формирования из двумерного массива A одномерного массива B;

Zamena(A, N, Chislo) – замена побочной диагонали значением Chislo; и

функцию Maximum(A,N,M): <тип матрицы> – максимум в матрице; а

также функцию min(x,y) :<тип матрицы> – минимум из пары чисел x, y)

Б л о к - с х е м а к з а д а ч е № 1 9

ввод двумерного массива

вывод двумерного массива

 

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

 

 

i := 1 , N

 

 

 

 

 

 

 

 

j := 1 , N

 

 

j := 1 , N

 

 

 

 

 

 

 

 

Вывод A[i, j]

 

 

Ввод A[i, j]

 

 

 

 

 

Выход

 

 

Выход

 

 

 

 

 

 

 

 

A

A

 

 

 

Vvod2m

N

Vivod2m

 

Name

N

 

 

Na

 

 

 

 

 

 

 

 

 

 

me

 

 

A

 

max

A

 

 

N

Maximum

N

Form

B

 

 

M

 

 

 

 

 

 

x

 

min

min

 

 

y

 

 

 

 

 

 

53

 

 

 

 

A

 

 

 

 

 

 

 

 

 

 

 

 

A

 

 

 

 

 

 

 

 

 

 

 

 

 

A

 

 

 

 

 

 

 

Vivod1m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N

 

 

 

 

 

 

 

 

 

 

N

 

 

 

 

 

 

 

Zamena

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Nam

 

 

 

 

 

 

 

 

 

 

 

 

Chisl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

e

 

 

 

 

 

 

 

 

 

 

 

 

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вывод одномерного массива

замена элементов побочной диагонали

 

 

 

 

 

 

 

 

 

 

 

 

матрицы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Выход

Выход

 

формирование одномерного массива 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

 

 

 

 

B[i]:=A[i,i]

i := 1 , N

 

 

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

 

 

 

 

Выход

54

Начало

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')

Конец

Л и с т и н г п р о г р а м м ы н а P a s c a l к з а д а ч е № 1 9

program Z19;

const MaxRazm = 10;

type T1m=array[1..sqr(MaxRazm)] of integer;

55

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

56

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;

end;

//поиск наименьшего из пары чисел function min(const x,y:integer):integer; begin

if x<y then min:=x

else min:=y;

end;

//замена элементов побочной диагонали матрицы procedure Zamena(var A:T2m; const N:byte;

const Chislo:integer); var i:byte;

begin

for i:=1 to N do

57

A[i,N-i+1]:=Chislo; end;

// формирование одномерного массива B из матрицы A procedure Form(const A:T2m; var B:T1m; const

N:byte);

var i:byte; begin

for i:=1 to N do B[i]:=A[i,i];

end;

// вывод одномерного массива

procedure Vivod1m(const A:T1m; const N:byte; const Name:TName);

var i:byte; begin

writeLn('Выводим одномерный массив ', Name,':'); for i:=1 to N do

write(A[i]:5);

writeLn;

end; begin

// вводим массивы

Vvod2m(X1,N1,'X1');

Vvod2m(X2,N2,'X2');

Vvod2m(X3,N3,'X3');

// выводим массивы до преобразования

// ищем максимумы в массивах

Vivod2m(X1,N1,'X1');

max1:=Maximum(X1,N1,N1);

58