Название: Квантовая механика - Учеб. пособие. (Краснопевцев Е. А.)

Жанр: Информатика

Просмотров: 1113


2. задачи на двумерные массивы и примеры их выполнения в языке fortran

 

2.1. Дана матрица с(3,3) целых чисел. Найти максимальный и минимальный элементы и их индексы среди положительных и среди отрицательных элементов матрицы.

Program M21

integer:: c(3,3)/2,-1,3,-2,4,6,10,-20,4/ ,i1(2),i2(2),i3(2),i4(2)

write (*,'(3(/10x,3i4))')  ((c(i,j),j=1,3),i=1,3)

minp=minval(c,mask=c>0)

maxp=maxval(c,mask=c>0)

mino=minval(c,mask=c<0)

maxo=maxval(c,mask=c<0)

print *,minp,maxp,mino,maxo

i1=minloc(c,mask=c>0)

i2=maxloc(c,mask=c>0)

i3 = minloc(c,mask = c < 0)

i4 = maxloc(c,mask = c < 0)

write (*,'(10x,2i4)') (i1(i),i=1,2),(i2(i),i=1,2),(i3(i),i=1,2),i4(i),i=1,2)

end

2.2. Определить и напечатать максимальные элементы столбцов матрицы А и минимальные элементы строк

Program M22

real:: a(4,6)/0.4,-1.1,7.4,-2.4,-1.2,2.48,0.11,7.25,6.3,6.14,-8.25,6.18,&

  2.1,7.21,6.18,-8.91,-3.33,-4.18,3.9,3.8,7.5,0.86,-8.64,6.15/, st(4), sb(6)

write (*,'(4(/12x,6F7.2))')  ((a(i,j),j = 1,6),i = 1,4)

sb = maxval(a,dim = 1)

st = minval(a,dim = 2)

write (*,'(//12x,6F7.2)') (sb(i),i = 1,6)

write (*,'(12x,4F7.2)')  (st(i),i = 1,4)

end

2.3. Создать матрицу из текстовых имен. Заменить в ней элементы со значением «Вера» на элементы со значением «Лена». Создать динамический вектор и записать туда все имена, которые начинаются с буквы «К»

 

Program M23

character(8):: t(2,3)/'Kirill','Vera','Klim','Oleg','Kolj','Vera'/

character(8), pointer:: d(:)

integer:: n = 0, k = 0

where(t=='Vera')  t= 'Lena'

write (*,'(2(/5x,3a)//)') ((t(i,j),j = 1,3),i = 1,2)

do i = 1,2

  do j = 1,3

     if(t(i,j)(1:1)=='K')  n = n+1

  enddo

enddo

allocate(d(n))

do i = 1,2

  do j = 1,3

     if(t(i,j)(1:1)=='K') then

               k = k+1

               d(k) = t(i,j)

 endif

  enddo

enddo

print *,d

deallocate(d)

end

 

2.4. Координаты точек плоскости заданы таблицей:

 

x

2.1

-3.3

1.4

-1.1

7.1

-5

-1.1

3.14

1.42

-8.8

y

3.6

-2.8

-2.5

2.3

4.16

7.8

-2.3

-1.28

6.5

0.5

 

Определить и напечатать те из них, которые задают точки в

1-м и 3-м квадрантах.

Program M24

real:: x(10) = (/2.1,-3.3,1.4,-1.1,7.1,-5.,-1.1,3.14,1.42,-8.8/),&

          y(10) = (/3.6,-2.8,-2.5,2.3,4.16,7.8,-2.3,-1.28,6.5,0.5/)

logical mask1(10),mask2(10)

mask1 = x > 0

mask2 = y > 0

do i = 1,10

  if((mask1(i).eqv..true.).and.(mask2(i).eqv..true.))  print *,x(i), y(i) !

                                                              координаты 1-го квадранта

  if(x(i) < 0.and.y(i)<0)  print *, x(i),y(i) ! координаты 3-го

                                                                   квадранта

enddo

end

2.5. Упорядочить по убыванию элементы столбцов матрицы с. Напечатать исходную и переформированную матрицы.

Program M25

integer, parameter:: m = 3, n = 5

real c(m, n)/3.,18.,-4.,-2.,4.,-17.,6.,-2.,5.,1.,-20.,21.,6.,7.,-14./, t

write (*,'(3(/10x,5F7.2)//)')  ((c(i,j),j = 1,5),i = 1,3)

do j = 1,n

  do k = m-1,1,-1

    do i = 1,k

       if(c(i,j) > c(i+1,j)) cycle

       t = c(i,j)

       c(i,j) = c(i+1,j)

       c(i+1,j) = t

    enddo

  enddo

enddo

write (*,'(3(/10x,5F7.2)//)')  ((c(i,j),j=1,5),i=1,3)

end