Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Современный Фортран_учебник

.pdf
Скачиваний:
31
Добавлен:
23.03.2015
Размер:
1.61 Mб
Скачать

102

! : Matrix

X. 5 , + ,

* +

allocate( X(1:N), Matrix(1:M,1:N),&

Matr1(1:N ,1:M), Matr2(1:N,1:N) )

& + !

deallocate( X, Matrix, Matr1, Matr2 )

" ! *

# ; , -

:

Real,intent,Dimension(1:N)::Mas - N; Real,intent(in),Dimension(1:10)::Mas - 10; Real,intent(in),Dimension(:)::Mas – $ ; Real,intent(in),Dimension(*)::Mas- , %;

Dimension(1:N,1:M)

$ , , 3*4=4*3=2*6=6*2=12.

+ . ! *!+ -

size(array), – size(Matrix,dim=1),

size(Matrix, dim=2).

' ( X, Y, P, Q %):

real,dimension(1:11):: X,Y ! X,Y 11

real,dimension(-5:5)::P,Q ! P,Q – 11 5,..0,..5

Y=sin(X+0.5)/4 + 2.1; p= Y/2; Q=P-1

5.3. ' /

% , /

+ / . 0 Do

. read(..) (v, i=i ,i ,is); write (..) (v, i=i ,i ,is) ,

v - #, , . , * # i.

+ do .. enddo , !

i. . ' ! !

#, i, i , i , is – . % +

# i , i , is , #

iн:iк:is. / ! , # %.32,

! , M(i,1:3:2).

, is=1, * M(i,1:3). -

! ! , i – M(i,:3), i – M(i,1:) – M(i,::2), . – M(i,:). ' ., -

, M(i,:) M(i,1:3) .. & * i - i -

+ . ', M(:,:) ! , -

. . M. – . ,

! , + . /

+ .

103

- ! + Do,

! / . , + +

+, , - .

% 32.

- Integer,dimension(1:3,1:4)::M

 

5 Do

 

$!

 

 

 

 

1-

read(*,*) (M(1,j), j=1,4)

 

read(*,*) M(1,1:4)

 

 

 

 

 

read(1,*)((M(i,j),j=1,4),i=1,3)

 

read(1,*) (M(i,:),i=1,3)

 

 

 

 

 

write(*,7) ( i,

M(i,:),i=1,3 )

 

7 format(1x,'',i1,':',4i3)

 

 

 

% , -

write(*,7) (i, M(i,1:4),i=1,3)

,

 

 

 

 

 

 

 

2-

read(*,*)(M(i,2),i=1,3)

 

read(*,*) M(:,2)

 

 

 

 

 

read(*,*) (M(i,i),i=1,3)

 

 

 

# - !

 

 

 

 

 

 

 

 

 

6. # &, ' !

' - . + +

, + . 6

, + ! , . . & 3,

, * +

# * – . ' , 3 + -

('1) - # %. 33, 34. % 33. #

Программные единицы

# & – # #

Модуль – носитель

 

 

 

данных для тех, кто его

Главная

#

использует, и для мо-

программа

Подпрограмма

Функция

дульных процедур

 

 

 

 

 

Program P

Subroutine S(аргменты)

FunctionF(аргументы)

Module M

use M

use M

use M

use _!

описания

 

описания, включая F

 

действия

 

действия, включая

 

Contains

Contains

F=

contains

внутренние проце-

внутренние проце-

Contains

модульная процедура

дуры импортиру-

дуры, с импортом опи-

внутренние процеду-

contains

ют описания вне-

саний внешней програ-

ры импортируют опи-

внутренние процедуры

шнего носителя

ммы-носителя

сания внешнего носи-

end мод. процедуры

end Program P

EndSubroutine S

теля

.. модульные процедуры

 

 

End Function F

End Module M

 

 

 

 

104

' 3 , -

– ! # 3

# . ' +, -

! , # !

. ' +* #

! . < -

( , ! ) ,

! ( ) .

% 34. ' ! .. , , !

 

# &

/$ #-

 

 

 

 

'

6 -

* #

 

 

(! )

 

'

 

 

 

 

 

 

 

 

Program P

Subroutine S(аргументы)

Function F(аргументы)

Module M

 

 

 

 

Program мо-

Subroutine может быть

Function может быть

Mодульные процедуры

жет быть толь-

внешней, внутренней,

внешней,внутренней,

с внутренними

ко внешней

модульной

модульной

процедурами

 

 

 

 

& 3 '1, $ !

6.1.-' &

+ , -

3, :

( # ) + -

! !;

, ,

+ ! +

#, ! !;

, , + *-

;

+ +*/ .

contains ! -

! # .

+ ! '1, ++

! ! . / , +

# – '1. ' !

contains # , -77,

# .

105

.

+ -

. 35, , 3 [1-7],

, ! - # # :

1.(Function) !

#, 3 [1-7], +

[1-4];

2.(Subroutine) !

#, # - # #, [2]

+ !;

3.(Function, Subroutine)

, !

!. '1, ! +* !, !

! , ! ! #

;

4.(Program) ! ! ,

[3] [2] + !;

! – - ++ ! + , , . -

, + + .

% 35.

3 внешней_программы + [1-7].

Заголовок имя_внешней_программы(аргументы) ! 1

[1] use имя_модуля

! $'

[2] _ _ ! %

[3]

!

 

[4] #

!

 

 

3 [1-4]

имя_внешней_программы = ! % [2] contains ! 2 -

Заголовок имя_внутренней_процедуры(аргументы)

[5]_ _ ! %

[7]#

( ) 3 [1-7]

имя_внутренней_процедуры= ! % [5] end Заголовок имя_внутренней_процедуры

.. .. _ .. ..

end Заголовок имя_ _программы

106

6.2. 1 6'

" !, ,# , ! (contains)

! , , + !, !

(contains) . * # public- 3 - + ! # -. $ + , ! . !, - :

, , , # -. 8 public + + 3 . " !-

+ public # ! -

! . #

, ! +* !. Private-3 -

! ! # -

. 6 ! 3 ! . 5-

+ , ! !, ! -

3 ! . # -

3, # + ! -

.

% 36. 3 модуля + [1-6]

Module имя_модуля ! 1

[1]use имя_другого_модуля 3

[2]# #

[3]public ! $ ( )

[4]private ! ,

[6]Namelist

!

contains

процедура МодПроцИмя(параметры) ! 2,

[7]" ' ! %

[8]!

[9]# !

3 [1-9]

МодПроцИмя = ! % [7] contains

процедура '( ) ! уровень 3, внутренняя

[10]функции ' ! %

[12]#

 

 

3 [1-12]

 

 

' =

! % [10]

 

 

End процедура ВнтПроцИмя

 

 

.. ..

 

 

 

 

 

 

End процедура " '

 

 

 

 

 

 

.. .. ….

 

 

107

End module имя_модуля

6.3.! $!

+ :

Function -%, ,

, p= _%( ), ! #

intent(in); -

– , , , , !,

, + #

max z = (x+y) / max(x,y);

Subroutine - ,

call ( ), # –

intent(in), # – intent(out), +* –

intent(inout).

0 ! use _ -

'1. + '1, , -

! ! ! !, * 3

public ! .

.

& 3 +* #

+ % . & 3

# , + %-

. / # ! # -

!. ' -

! ! , + -. # # ! # -

, *.

108

' ! ! , , -

: +*

3, .

* , -

! , , , , -

dimension.

0 #

:

1. ! ! !

; 2. , +* # !

intent(in), !:

, , ,

, , . ,

# # ;

3., +* ! #

intent(out) +*

intent(inout), ! !

, . , ,

.

Interface

+* '1, ! , -

interface, , -. ( ! # # +

# ! . & interface :

Function Subroutine;

! # ;

! intent ,

+* ,# : intent(in), intent(out),

intent(inout).

& interface – . !

! #

Interface

, ! #

.. ..

, ! #

end Interface

& !+ Interface ,

#

, . ( -90

. , !?

– & :

109

1.#, # ! # -

, ! ;

2.# ! - . -

+ ! ; !

, ! # +* # #;

3.! ! :

− ! + , − dimension,

− # (pure) ,

− , , .

End, Stop, Return

/ End +* :

1.End ! '1

Subroutine name(аргументы)

Операторы

End Subroutine name

2.End – . '1, ! ,

! , :

– ,

&,

+* + .

& Stop + # End ,

! ! + – ., -, * - , – stop

program terminated.

& Return + # End . -

Return +*: ! + +

– . .

6.4.

' ('1) + +

!. ' # -90

! # 3 #

:

+ 3 '1;

3 * , ! ! + (use)

! #, 3 +

+ * ( public), ! 3-

! private.

# '

0 # !:

− # # ;

110

! # ! # ;

! # # .

': + ! Array ?

Program Host

integer :: i; real :: R=5 ! радиус real,public,dimension(1:2)::x0=(/1,1/)! координаты центра real, dimension(1:2,1:5):: Array Open(1,File='In.txt'); Open(2,File='Out.txt') write(2,3) R,x0; read(1,*) Array

do i = 1,5 if(InCircle(Array(:,i))&

write(2,2)Array(:,i),'внутри круга' enddo

2 format('% [',f6.2,' , ',f6.2, '] - ', a)

3 format('& ! ', f6.2, &

' [', f6.2, ',', f6.2, ']')

contains

logical function InCircle(X) ! : X ? real,intent(in),dimension(1:2)::X ! X -

real:: R=1 ! радиус

InCircle = sum((X-x0)**2) < R*R end function InCircle

end Program Host

InCircle , Host -

3 :

x0 # 3

InCircle # Host;

Array(:,i) , X ;

R=5 real:: R=1

# – . ;

InCircle R $ ! real:: R=1.

# '

" ! – # * * # 3, -

# . & «use _ » * +

3 : , , ( public

+), , Namelist,

#, ! , +* 3 .

: + 5 5 (1,2)?

Module Mo

real,dimension(1:2)::p0=(/1,2/) ! x,y -

real,public:: R=1 !

111

real,dimension(1:2,1:5)::P ! 5 (x,y)

Namelist /R_P0/R,P0 contains

function InCircle() logical,dimension(1:5)::InCircle InCircle=(p(1,:)-p0(1))**2+(p(2,:)-p0(2))**2 < R**2

end function InCircle end Module Mo

Program With_module use Mo

R=5 !

Open(1,File='In.txt'); Open(2,File='Out.txt') write(2,R_P0); read(1,*) P

write(2,22) R,p0; write(2,222) P

22 format(' :',f6.1,' :[',f6.1,',',f6.1,']') 222 format( '%:'/(2f6.1) )

write(2,*) InCircle() !

if( all( InCircle()) ) write(2,*)' ' end Program With_module

! :

&R_P0

 

 

 

 

R

=

5.000000

,

 

P0

=

1.000000

,

2.000000

/

 

 

 

 

Радиус:

5.0

центр:[

1.0,

2.0]

Точки:

 

 

 

 

1.02.0

3.04.0

0.01.0

2.03.0

40.050.0

T T T T F

real::R=1 . !

real::R=5 ! – . , 3 R. " ! ! R=5.

& use + ! , :

*!+ use Mo, only: x0, InCircle

! ! # ;

R * +* R_null (use Mo, R_null=>R),

! real::R .

8 private – !, 3 ,

3 . ' !,

! * # (public) ! # i, j, k, a . .