Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 14.04.2015, 19:10   #1 (permalink)
Over77over
Member
 
Регистрация: 13.03.2015
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Если максимальный элемент квадратной матрицы находится выше главной диагонали...

Помогите пожалуйста решить задачу

Если максимальный элемент квадратной матрицы находится выше главной диагонали, транспонировать матрицу, иначе определить сумму элементов строки и столбца с номерами, равными индексам максимального элемента.

Нужно перевести эту программу из Фортрана в Паскаль:

!esli max vishe gl diagonali
subroutine pp1(A,n,p,MAX,imax,jmax)
dimension A(n,n)
real A,MAX
integer i,j,p,imax,jmax
p=0
max=A(1,1)
imax=1
jmax=1
do i=1,n,1
do j=1,n,1
if (A(i,j)>MAX) then
MAX=A(i,j)
imax=i
jmax=j
if (jmax>imax) then
p=1
end if
end if
end do
end do
end

!Transponirovat matrix
subroutine pp2(A,n)
dimension A(n,n)
real A
integer i,j
do i=2,n
do j=1,i-1
C=A(i,j)
A(i,j)=A(j,i)
A(j,i)=C
end do
end do
end

!symma elementov str i stlb s index MAX
subroutine pp3(A,n,imax,jmax,S)
dimension A(n,n)
real A,S
integer i,j,imax,jmax
do j=1,n,1
s1=s1+A(imax,j)
end do
do i=1,n,1
s2=s2+A(i,jmax)
end do
s=s1+s2
end

!glav modul
real A,MAX,S
integer i,j,p
DATA A/9,1,1,2,3,4,6,7,8,4,5,1,1,1,1,1,1,1,1,1,1,1,2,1,1/
write(*,*)'isxodnaya matriza'
write(*,36)((A(i,j),j=1,5),i=1,5)
36 format (5(1x,F5.1))
call pp1(A,5,p,MAX,imax,jmax)
write(*,*)'MAX element=',MAX
write(*,46)imax,jmax
46 format (1x,'Index MAX elementa=',1x,'nomer stroki',1x,I2,1x,'nomer stolbca',1x,I2)
if (p==1) then
call pp2(A,5)
write(*,16)((A(i,j),j=1,5),i=1,5)
16 format (3x,'Transponirovannaya matrix'/(5(1x,F5.1)))
else
call pp3(A,5,imax,jmax,S)
write(*,26)S
26 format (3x,'Symma elementov s index MAX elementa',1x,(1x,F5.1))
end if
end
Over77over вне форума   Ответить с цитированием

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

Возможно, ваш вопрос уже получил решение на форуме

Как определить максимальный ход диффузора?
Hyper Jump - прыгаем все выше и выше
Hyper Jump - прыгай выше и выше, собирая бонусы
Максимальный апгрейд компа
Мозилла не работает с главной страницей Яндекса

Старый 14.04.2015, 19:23   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Over77over Посмотреть сообщение
Нужно перевести эту программу из Фортрана в Паскаль:
Обязательно вот именно эту переводить или по-своему можно? И обязательно ли задавать матрицу в виде константы - нельзя ли сгенерить случайным образом?
Vladimir_S вне форума   Ответить с цитированием
Старый 14.04.2015, 22:14   #3 (permalink)
Over77over
Member
 
Регистрация: 13.03.2015
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Не обязательно. Можно случайным
Over77over вне форума   Ответить с цитированием
Старый 15.04.2015, 10:24   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Over77over Посмотреть сообщение
Не обязательно. Можно случайным
Тогда получите:
Код:
Const
 N=5;

Var
 A,B:Array[1..N, 1..N] of Integer;
 i,j,Imax,Jmax,Amax,Sum:Integer;

Begin
 Randomize;
 Sum:=0;
 Amax:=-1;
 Writeln('Matrix:');
 for i:=1 to N do
  begin
   for j:=1 to N do
    begin
     A[i,j]:=Random(10);
     Write(A[i,j]:4);
     if A[i,j]>Amax then
      begin
       Amax:=A[i,j];
       Imax:=i;
       Jmax:=j;
      end;
    end;
   writeln;
  end;
 writeln;
 writeln('Maximal element is A[',Imax,',',Jmax,'] = ',A[Imax,Jmax]);
 writeln;

 if Jmax>Imax then
  begin
   Writeln('Transposed matrix:');
   for i:=1 to N do
    begin
     for j:=1 to N do
      begin
       B[i,j]:=A[j,i];
       write(B[i,j]:4);
      end;
     writeln;
    end;
  end
 else
  begin
   for i:=1 to N do
    Inc(Sum,A[i,Jmax]);
   for j:=1 to N do
    Inc(Sum,A[Imax,j]);
   writeln('Sum = ',Sum);
  end;
 Readln
End.
Vladimir_S вне форума   Ответить с цитированием
Старый 15.04.2015, 19:28   #5 (permalink)
Over77over
Member
 
Регистрация: 13.03.2015
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Спасибо большое
Over77over вне форума   Ответить с цитированием
Ads

Яндекс

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

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

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

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




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

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