Задание

В каждом столбце матрицы А поменять местами первый положительный и последний отрицательный элементы. Для столбцов матрицы, не содержащих положительных или отрицательных элементов, напечатать сообщения с номерами столбцов.

Текст программы

program lab8

implicit none

real,allocatable,dimension(:,:)::a

real pol,otr,polI,polJ,otrI,otrJ

integer str,col,i,j

open(1,file='in.txt')

open(2,file='out.txt')

write(*,*) 'Input number of strings and columns:'

read(*,*) str,col

allocate(A(1:str,1:col))

! считывание массива

do i=1,str

read(1,*)(a(i,j),j=1,col)

enddo

if(str>0.and.str<11.and.col>0.and.col<11) then

do j=1,col

pol=0

otr=0

do i=1,str !первый положительный в столбце

if(a(i,j)>0) then

pol=a(i,j)

polI=i

polJ=j

exit

endif

enddo

do i=1,str

if(a(i,j)<0) then !первый отрицательный в столбце

otr=a(i,j)

otrI=i

otrJ=j

exit

endif

enddo

if(pol==0.or.otr==0) then !если таких нет, то выводим сообщение с номером столбца

write(2,2) j

else !если есть, то меняем их местами

a(polI,polJ)=otr

a(otrI,otrJ)=pol

endif

enddo

write(2,*) 'Полученная матрица' !выводим полученную матрицу в файл

do i=1,str

write(2,1) (a(i,j),j=1,col)

enddo

else

stop 'Error of string and columns numbers!'

endif

1 format(1x,10F10.2)

2 format('В солбце N',I2,' нет положительных или отрицательных элементов.')

deallocate(a)

end

Исходная матрица (in.txt)

1 34 64 -34 87 83 77 -4 0 63

34 -44 82 -99 0 12 6 7 -1 32

-3 76 93 -56 71 54 -40 13 15 -36

88 94 73 92 -84 55 53 78 34 45

-43 43 74 80 84 34 76 33 99 34

74 92 72 92 19 39 10 12 11 16

41 64 35 77 22 32 12 71 83 91

-73 3 12 28 84 80 64 66 23 41

12 7 23 94 25 83 20 50 30 38

-23 13 94 23 45 35 34 37 84 10

Результаты (out.txt)

В солбце N 3 нет положительных или отрицательных элементов.

В солбце N 6 нет положительных или отрицательных элементов.

исходная матрица

-3.00 -44.00 64.00 92.00 -84.00 83.00 -40.00 7.00 .00 -36.00

34.00 34.00 82.00 -99.00 .00 12.00 6.00 -4.00 15.00 32.00

1.00 76.00 93.00 -56.00 71.00 54.00 77.00 13.00 -1.00 63.00

88.00 94.00 73.00 -34.00 87.00 55.00 53.00 78.00 34.00 45.00

-43.00 43.00 74.00 80.00 84.00 34.00 76.00 33.00 99.00 34.00

74.00 92.00 72.00 92.00 19.00 39.00 10.00 12.00 11.00 16.00

41.00 64.00 35.00 77.00 22.00 32.00 12.00 71.00 83.00 91.00

-73.00 3.00 12.00 28.00 84.00 80.00 64.00 66.00 23.00 41.00

12.00 7.00 23.00 94.00 25.00 83.00 20.00 50.00 30.00 38.00

-23.00 13.00 94.00 23.00 45.00 35.00 34.00 37.00 84.00 10.00

Санкт-Петербургский Государственный Университет

Информационных технологий,

Механики и оптики

Отчет

К лабораторной работе по информатике:

«Решение задач с двумерными массивами»

Вариант № 4

Студент:

Преподаватели:

2005 г.