Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Fortran > [General] Фортран, двумерные массивы


Автор: oleeg 3.11.2010, 01:15
Всем привет.
Помогите, пожалуйста, решить задачку.
Текст задания:

I.    Назовем допустимым преобразованием матрицы перестановку двух строк или двух столбцов. С помощью допустимых преобразований добиться того, чтобы наибольший по модулю элемент матрицы рас-полагался в ее левом верхнем углу. Вывести преобразованную матрицу после каждой перестановки (строки или столбца).
II.    Составить и вывести одномерный массив из средних арифметических значений элементов с нечетными индексами столбцов в каждой строке преобразованной матрицы.


Собственно, некоторые наработки есть, но не знаю, как дальше продолжить.

Спасибо.

Код

Program Matrix  ! ñîãëàñíî áëîê-ñõåìå, ïðèâåäåííîé íèæå
! ñòóäåíò  Êóçíåöîâ Î.  ãðóïïà ¹5350   ðàáîòà ¹1,7  âàðèàíò ¹19 
Implicit None
Integer,Allocatable,dimension(:,:):: M ! äèíàìè÷åñêàÿ ìàòðèöà
Integer,Allocatable,dimension(:):: B   ! äèíàìè÷åñêèé ìàññèâ
Integer,Allocatable,dimension(:):: tempMas   ! âðåìåííûé ìàññèâ äëÿ çàïèñè â íåãî òåêóùåãî ñòîáëöà
   Integer stroka, stol   ! ðàçìåðû ìàòðèöû ïî èçìåðåíèÿì
   Integer i, j   ! ïåðåìåííûå öèêëîâ
Integer max      !íàèáîëüøèé ïî ìîäóëþ ýëåìåíò
Integer max_i !èíäåêñ i íàèáîëüøåãî ýëåìåíòà ìàòðèöû ïî ìîäóëþ
Integer max_j !èíäåêñ j íàèáîëüøåãî ýëåìåíòà ìàòðèöû ïî ìîäóëþ


Open(1,FILE='In.txt')  ! ôàéë ñ èñõîäíîé ìàòðèöåé
Open(2,FILE='Out.txt') ! ðåçóëüòèðóþùèé ôàéë
Read(1,*)stroka,stol ! ââîä ðàçìåðîâ  (ñòðîê-M, ñòîëáöîâ-N)
Write(2,*)"Êîëè÷åñòâî còðîê",stroka
Write(2,*)"Êîëè÷åñòâî ñòîáëöîâ ",stol
Allocate(M(1:stroka,1:stol),B(1:stol))!ðàçìåùåíèå äèíàìè÷åñêèõ ìàññèâîâ â ïàìÿòè
! ââîä ìàòðèöû è àíàëîãè÷íî, òîëüêî ñ ôîðìàòîì, - âûâîä
 !Read(1,*)(A(i,:),i=1,M) ! íåÿâíûé öèêë ïî ñåêöèÿì-ñòðîêàì ìàòðèöû
 ! ñ÷èòûâàíèå ìàññèâà
 do i=1,stroka
 read(1,*)(M(i,j),j=1,stol)
 enddo
 write(2,*)"Èñõîäíàÿ ìàòðèöà" 
 do i=1,stroka 
 write(2,*)(M(i,j),j=1,stol)
 enddo

 max = M(1,1)  !ñíà÷àëà óñòàíîâèì ìàêñèìàëüíûé ýëåìåíò ïî ìîäóëþ ïåðâûì ýëåìåòîì ìàòðèöû
 do i=1,stroka
     do j=1,stol
        if (ABS(M(i,j))>abs(max)) then 
        max = M(i,j)
        max_i = i
        max_j = j
        endif      
     enddo
 enddo
 write(2,*) "Ìàêñèìàëüíûé ýëåìåíò â ìàòðèöå ïî ìîäóëþ: ",max
 write(2,*) "Èíäåêñ max_i = ",max_i," è max_j = ",max_j, " ìàêñèìàëüíîãî ýëåìåíòà â ìàòðèöå ïî ìîäóëþ"

  ! òåïåðü íàäî ïåðåäâèíóòü ýëåìåíò â ìàòðèöå òàê, ÷òîáû îí îêàçàëñÿ â ëåâîì âåðõíåì óãëó.
  ! Ïðîùå âñåãî ýòî ñäåëàòü, ïåðåäâèãàÿ ñíà÷àëà äî óïîðà âëåâî ýëåìåíò ìàòðèöû ïî ñòîëáöà, à ïîòîì äî óïîðà ââåðõ ïî ñòðîêàì
  tempMas(1) = 1

  do j=1,max_j
       tempMas(1) = 1        !
       Write(2,*)tempMas
  enddo

Deallocate(M)! îñâîáîæäåíèå äèíàìè÷åñêîé ïàìÿòè
End Program Matrix


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)