Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 02.05.2014, 20:22   #1 (permalink)
Madara
Member
 
Регистрация: 29.11.2013
Сообщений: 50
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Post Формирование матрицы с помощью функции как параметра процедуры, Паскаль

Доброго времени суток.
Помогите пожалуйста с программой:

Условие задания – головного модуля — предполагает обязательное использование разработанной процедуры П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 код:
Program MatrixForm;
Const 
n=3m=6;

Type 
Matr 
= array[1..n,1..mof Real;


Const 
Amatr = ( ( 12345), 
            ( 
47189), 
            ( 
28413
           );  
           
Var 
i,j:byte;
E:matr;

Begin
  
for i:=1 to n do
    
begin
       
for j:=1 to m do
Begin
  E
[1,1]:=A[1,1]; E[1,2]:=A[2,1]; E[1,3]:=A[3,1]; E[1,4]:=A[1,2]; E[1,5]:=A[2,2]; E[1,6]:=A[3,2];
  
E[2,1]:=A[1,3]; E[2,2]:=A[2,3]; E[2,3]:=A[3,3]; E[2,4]:=A[1,4]; E[2,5]:=A[2,4]; E[2,6]:=A[3,4];
  
E[3,1]:=A[1,5]; E[3,2]:=A[2,5]; E[3,3]:=A[3,5]; E[3,4]:=A[1,6]; E[3,5]:=A[2,6]; E[3,6]:=A[3,6];
     
Write(E[i,j]:4);
end;
 
writeln;
 
end;
End
Не могу понять зачем нужны синусы и косинусы, сомневаюсь что верно понял условие...

Заранее спасибо!
Madara вне форума   Ответить с цитированием

Старый 02.05.2014, 20:22
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

На нашем форуме так же есть аналогичные топики, которые создавались ранее

Turbo Pascal. Процедуры и функции
Написание программы через процедуры и функции. Паскаль

Старый 02.05.2014, 23:27   #2 (permalink)
Евгений
Member
 
Аватар для Евгений
 
Регистрация: 31.03.2010
Адрес: Тульская область
Сообщений: 1,309
Сказал(а) спасибо: 11
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 13090
По умолчанию

Не моё. Случайно наткнулся.

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;newmasroc;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.
Евгений вне форума   Ответить с цитированием
Старый 05.05.2014, 00:30   #3 (permalink)
Madara
Member
 
Регистрация: 29.11.2013
Сообщений: 50
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Спасибо огромное!

Переписал под паскаль себе: без uses crt и randomize, а так же без усложнений с размером матрицы; может кому пригодится

PHP код:
Program matrconv;

Const 
n=6;

Type
   mass
=array[1..nof real;
   
matr=array[1..nof mass;
   
proc=procedure(n:byte;b,c:mass;var t:mass);

Const  
Amatr =     ( (  1,  0.20.30.40.50.6 ),  
                       ( 
0.40.70.10.80.90.5 ),  
                       ( 
0.20.80.40.10.3,  7  ),
                       ( 
0.40.7,  1,  0.90.5,  2  ),
                       ( 
0.80.30.70.1,  0,  0.4 ),
                       (  
2,  0.50.60.4,  3,  0.8 )
                      );
                      
function 
f1(x:real):real;
  
begin
    f1
:=sin(x)
  
end;
  
function 
f2(x:real):real;
  
begin
    f2
:=cos(x)
  
end;
  
procedure newmas(n:byte;b,c:mass;var t:mass);
      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;

procedure newmtr(a:matr;n:byte;newmas:proc;var e:matr);
    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 
e:matr;
    
i,j:byte;
begin
    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]:6:2);
      
writeln;
    
end;
end
Madara вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 15:09.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.