Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5 Процедуры и функции.doc
Скачиваний:
2
Добавлен:
06.12.2018
Размер:
145.92 Кб
Скачать
      1. Укрупненная блок схема

Рис. 1

      1. Программа

Program prog4;

Uses Crt;

Type TArray=Array[1..10,1..10] of Real;

Var A, B, C, D : TArray; n,m,k,l : Byte; h : Char; Ar : Real;

{описание глобальных переменных; А, В – сформированные исходные матрицы; C,D – результирующие матрицы; n, m – число строк, столбов матрицы А; k, e – числов строк, столбцов матрицы В; h – признак задания исходных матриц; Ar - среднее арифметческое}

Procedure InMatr1(Var x:TArray; row,col:Byte);

{процедура формирования матрицы вводом ее элементов с клавиатуры, х, row, col - формальные параметры; x- параметр-переменная; row, col - параметры-значение}

Var d,i,j:Byte; S,y : String; {Описание локальных переменных}

Begin {Формирование матрицы вводом ее элементов с клавиатуры}

For i:=1 To row Do Begin

y:=' '; d:=WhereY;

GotoXY(1,d);

For j:=1 To col Do Begin

Readln(x[i,j]); {Считываем элемент с клавиатуры}

Str(x[i,j]:6:1,S); {Переводим его в строку S}

y:=y+S; {Сцепляем строку y со строкой S}

GotoXY(Length(y),d); {Перемещаем курсор в позицию ввода очередного элемента}

End;

Writeln;

End;

End; {--------------------------------------------}

Procedure InMatr2(Var x:TArray; row,col:Byte); {процедура формирования

случайной матрицы и вывод ее элементов на экран}

Var i,j:Byte; {Описание локальных переменных}

Begin {Формирование случайной матрицы и ее вывод на экран}

Randomize;

For i:=1 to row do Begin

For j:=1 to col do Begin

X[i,j]:=Random*50-25; {x[i,j] формируется случайно}

{При формировании матрицы по правилу sin(i+j/2) необходимо записать оператор присваивания x[i,j]:=sin(i+j/2)}

Write(x[i,j]:7:2,' '); {X[i,j] выводится на экран}

End;

Writeln;

End;

End; {--------------------------------------------}

Function Sum(x:TArray; row,col:Byte):Real; {функция нахождения суммы

положительных элементов матрицы}

Var S :Real; i,j:Byte; {Описание локальных переменных}

Begin {Нахождение суммы положительных элементов матрицы}

S:=0;

For i:=1 to row do

For j:=1 to col do

If x[i,j]>0 Then S:=S+X[i,j];

Sum:=S;

End; {--------------------------------------------}

Procedure NewMatr(x:TArray; row,col:Byte; Var y:TArray);

{процедура формирования результирующей матрицы по заданному алгоритму}

Var i,j:Byte; MMax:real; {Описание локальных переменных}

Function Max(x:TArray; row,col:Byte):Real; {функция нахождения

максимального элемента матрицы}

Var M :Real; i,j:Byte; {Описание локальных переменных}

Begin {Нахождение максимального элемента матрицы}

M:=x[1,1];

For i:=1 to row do

For j:=1 to col do IF x[i,j] > M Then M:=X[i,j];

Max:=M;

End;

Begin {Формирование новой матрицы по заданному алгоритму}

MMax:=Max(x,row,col);

For i:=1 to row do For j:=1 to col do y[i,j]:=x[i,j]/MMax;

End; {--------------------------------------------}

Procedure Print(x:TArray; row,col:Byte); {процедура вывода элементов

результирующей матрицы на экран}

Var i,j:Byte; {Описание локальных переменных}

Begin {Вывод матрицы на экран}

For i:=1 to row do Begin

For j:=1 to col do Begin

Write(x[i,j]:7:2,' ');

End;

Writeln;

End;

End;

BEGIN {глобальный блок – основная программа}

Write('Введите число строк и столбцов матрицы А (не более 10) ');

Readln(n,m);

Writeln('Выберите способ формирования элементов матрицы A');

Write('1 -> ввод с клавиатуры; 2 или любое другое число -> случайный процесс : ');

Readln(h); {вызов процедуры InMatr1 (A, n, m)}

IF h='1' Then InMatr1(A,n,m) Else InMatr2(A,n,m); {вызов процедуры

InMatr2 (A, n, m)}

Write('Введите число строк и столбцов матрицы B (не более 10) '); Readln(k,l);

Writeln('Выберите способ формирования элементов матрицы B');

Write('1 -> ввод с клавиатуры; 2 или любое другое число -> случайный процесс : ');

Readln(h); {вызов процедуры InMatr1 (B, k, l)}

IF h='1' Then InMatr1(B,k,l) Else InMatr2(B,k,l); {вызов процедуры InMatr2

(B, k, l)}

Ar:=(Sum(A,n,m)+Sum(B,k,l))/2; {вызов функции Sum (A, n, m), Sum (B, k, l) }

Writeln('Среднее арифметическое = ',Ar:8:3);

{можно вместо предыдущих операторов записать один оператор Writeln ('Среднее арифметическое = ', Sum (A, n, m)+ Sum (B, k, l))/2;}

NewMatr(A,n,m,C); {вызов процедуры InMatr1 (A, n, m)}

Writeln('******* Вывод матрицы С ******');

Print(C,n,m); {вызов процедуры Print (C, n, m)}

NewMatr(B,k,l,D); {вызов процедуры InMatr1 (B, k, l, D)}

Writeln('******* Вывод матрицы D ******');

Print(D,k,l); {вызов процедуры Print (D, k, l)}

Readkey; DoneWinCrt;

End.