Формирование матрицы с помощью функции как параметра процедуры, Паскаль
Доброго времени суток.
Помогите пожалуйста с программой: Условие задания – головного модуля — предполагает обязательное использование разработанной процедуры П1 с функцией (f или f1, f2) в качестве параметра. В качестве исходного данного в большинстве заданий используется квадратная матрица А. Используя в качестве f1 синус, а в качестве f2 косинус, сформировать матрицу Е из А по правилу: первая строка матрицы Е формируется с помощью процедуры из двух первых столбцов матрицы А, вторая строка - из следующей пары столбцов и т.д. Как я понял, из матрицы А: 1 2 3 4 5 6 4 7 1 8 9 5 2 8 4 1 3 7 должна получиться матрица Е: 1 4 2 2 7 8 3 1 4 4 8 1 5 9 3 6 5 7 Вот я написал программу, но без процедур и функций: PHP код:
Заранее спасибо! |
Не моё. Случайно наткнулся.
uses crt; const max=10; type mas=array[1..max] of real;{массив} mtr=array[1..max] of mas;{матрица} proc=procedure(n:byte;b,c:mas;var t:mas);{процедурный тип} {опишем две функции} function f1(x:real):real; begin f1:=sin(x) end; function f2(x:real):real; begin f2:=cos(x) end; {$F+} {опишем процедуру для использования параметром в другой процедуре} procedure newmas(n:byte;b,c:mas;var t:mas); var m,i:byte; begin m:=0; for i:=1 to n do if (f1(b[i])>0)and(f2(c[i])>f1(b[i])) then begin m:=m+1; t[m]:=b[i]+c[i] end; if m<n then for i:=m+1 to n do t[i]:=0; end; {$F-} {основная процедура} procedure newmtr(a:mtr;n:byte;newmas:proc;var e:mtr); var i:byte; begin for i:=1 to n div 2 do newmas(n,a[2*i-1],a[2*i],e[i]) end; var a,e:mtr; n,i,j:byte; begin clrscr; randomize; repeat write('Размер матрицы А четное число до ',max,' n='); readln(n); until (n in [2..max])and(n mod 2=0); {создадим матрицу А по столбцам} for j:=1 to n do for i:=1 to n do a[j,i]:=random; {выведем ее построчно} writeln('Матрица А:'); for i:=1 to n do begin for j:=1 to n do write(a[i,j]:6:2); writeln end; {получим новую матрицу} newmtr(a,n,newmas,e); {выведемее построчно} writeln('Матрица E:'); for i:=1 to n div 2 do begin for j:=1 to n do write(e[i,j]:5:2); writeln end; readln end. |
Спасибо огромное!
Переписал под паскаль себе: без uses crt и randomize, а так же без усложнений с размером матрицы; может кому пригодится:)
PHP код:
|
Часовой пояс GMT +4, время: 23:10. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.