
- •Лабораторная работа № Реализация программ, использующих процедуры и функции пользователя
- •Цель работы
- •2. Краткие сведения из теории
- •2.1 Глобальные, локальные блоки и объекты
- •2.2 Понятие процедур и функций
- •2.3 Описание процедур и функций
- •2.4 Вызов процедур и функций
- •2.5 Формальные параметры процедур и функций
- •3 Примеры Pascal-программ использующих процедуры и функции
- •3.1 Постановка задачи 1
- •3.1.2 Программы
- •3.2 Постановка задачи 2
- •3.2.1 Программа
- •3.3 Постановка задачи 3
- •Укрупненная блок схема
- •Программа
- •Результат
- •3.3.4 Варианты заданий
- •4 Контрольные вопросы
-
Укрупненная блок схема
Рис. 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.