Главная / Программирование /
Введение в программирование больших вычислительных задач на современном Фортране с использованием компиляторов Intel / Тест 6
Введение в программирование больших вычислительных задач на современном Фортране с использованием компиляторов Intel - тест 6
Упражнение 1:
Номер 1
Укажите верные утверждения. Процедуры бывают следующих типов
Ответ:
 (1) Внутренние 
 (2) Внешние 
 (3) Модульные 
 (4) Основные 
 (5) Головные 
Номер 2
Укажите верные утверждения. Процедуры бывают двух видов
Ответ:
 (1) Contains 
 (2) Subroutine 
 (3) Intrinsic 
 (4) Function 
 (5) Module 
Номер 3
Укажите верные утверждения. Внутренние процедуры объявляются после оператора
Ответ:
 (1) Subroutine 
 (2) Function 
 (3) External 
 (4) Save 
 (5) Contains 
Номер 4
Укажите верные утверждения. Модульные процедуры объявляются после оператора
Ответ:
 (1) Module 
 (2) Program 
 (3) Contains 
 (4) Subroutine 
 (5) Function 
Номер 5
Укажите верные утверждения. Описание внешних процедур объявляется после оператора
Ответ:
 (1) Program 
 (2) Contains 
 (3) Subroutine 
 (4) Function 
 (5) лператор не требуется, сразу идет объявление подпрограммы или функции 
Упражнение 2:
Номер 1
Укажите верные объявления процедур
Ответ:
 (1) real function f(x); real x
 
 (2) integer function (x)
 
 (3) real function FUN(real p)
 
 (4) logical function f(x) result(FF)
 
 (5) recursive complex function p(s)
 
Номер 2
Укажите верные объявления процедур
Ответ:
 (1) subroutine proc(a,b,c,d,e,a,g)
 
 (2) recursive subroutine tree(tree1,tree2)
 
 (3) recursive subroutine tree(tree1,tree2) result(binary)
 
 (4) logical subroutine sub(x,y)
 
 (5) character(1024) function g(x) result(G)
 
Номер 3
Укажите верные объявления процедур
Ответ:
 (1) integer subroutine sum(x,y)
 
 (2) real function g()
 
 (3) subroutine ()
 
 (4) recursive subroutine proc()
 
 (5) intrinsic character function d()
 
Номер 4
Укажите верные объявления процедур
Ответ:
 (1) contains function f(x)
 
 (2) integer(16) subroutine sub10(x)
 
 (3) logical function f(x,y,z,Q,Q)
 
 (4) subroutine make(m1)
 
 (5) recursive subroutine fibo(N)
 
Номер 5
Укажите верные объявления процедур
Ответ:
 (1) subroutine (integer param)
 
 (2) real(8) function f(x) result (p)
 
 (3) complex function Q(x) result(q)
 
 (4) double precision function Q(q)
 
 (5) character(1024) function string()
 
Упражнение 3:
Номер 1
Укажите верные утверждения. Модульные процедуры
Ответ:
 (1) могут содержать внутренние переменные 
 (2) имеют доступ к другим модульным процедурам 
 (3) обладают явным интерфейсом 
 (4) обладают неявным интерфейсом 
 (5) доступ к другой модульной процедуре закрыт, если используется такое же имя для внутренней процедуры в данной модульной процедуре 
Номер 2
Укажите верные утверждения. Модульные процедуры
Ответ:
 (1) не могут содержать внутренние переменные 
 (2) имеют доступ к "своим" внутренним процедурам 
 (3) обладают явным интерфейсом 
 (4) обладают неявным интерфейсом 
 (5) доступ к другой модульной процедуре закрыт, если используется такое же имя для внутренней переменной 
Номер 3
Укажите верные утверждения. Внутренние процедуры
Ответ:
 (1) не могут содержать внутренние переменные 
 (2) могут обрабатывать только внутренние файлы 
 (3) обладают явным интерфейсом 
 (4) обладают неявным интерфейсом 
 (5) доступ к другой внутренней процедуре закрыт, если используется такое же имя для внутренней переменной 
Номер 4
Укажите верные утверждения. Внутренние процедуры
Ответ:
 (1) могут содержать внутренние переменные 
 (2) содержат оператор contains 
 (3) обладают явным интерфейсом 
 (4) обладают неявным интерфейсом 
 (5) доступ к другой внутренней процедуре закрыт, если используется такое же имя для внутренней процедуры в данной модульной процедуре 
Номер 5
Укажите верные утверждения. Внешние процедуры
Ответ:
 (1) могут содержать оператор contains 
 (2) обладают явным интерфейсом 
 (3) не могут обрабатывать внешние файлы 
 (4) описываются отдельно от головной программы 
 (5) не могут вызывать другие внешние процедуры  
Упражнение 4:
Номер 1
Объявлена функция complex function fun(a,b,ind,symbol) result(gnew)
real a,b
integer ind
character symbol
...
end function fun
Какие вызовы функции являются верными ?
Ответ:
 (1) write(*,*) fun(3.0, 4.0, 1000, 'Q')
 
 (2) Rad = fun(0.0, 3.0/2.0, 'R')
 
 (3) write(*,*) fun(0.0, 0.0, 1, 'a'/fun(0.2, 3.0, 23, 'str')
 
 (4) fun(2.0, 1.0, 3, 'e')=(0.0, 1.0)
 
 (5) a=sin(fun(0.0, sqrt(7.0), 0, '!'))
 
Номер 2
Объявлена функция character function func(x,y,k,A,M)
real x,y
integer(1) k
integer A(M)
...
end function fun
Какие вызовы функции являются верными ?
Ответ:
 (1) write(*,*) func(1.0, 2.0/3.0, 1, [1,6,7,8,9], 5)
 
 (2) icode = iachar(func(1.0, 2.0, 0, [1,2,3], 3))
 
 (3) write(*,*) func(sqrt(8.0), 1, V(::2), 500)
 
 (4) call func(1.0, 2.0/3.0, 1, Vector(:10:2), 15)
 
 (5) k = func(0,0,0,0,0)
 
Номер 3
Объявлена подпрограмма recursive subroutine proc(param, p, A, B, C)
real param
logical p
real A(:), B(:), C(:)
...
end subroutine proc
Какие вызовы подпрограммы являются верными,
если real X(1000), Y(1000), Z(1000)
Ответ:
 (1) call proc(3.0, 3==0, X(::2), Y(2::3), Z(::3))
 
 (2) call proc(sum(X(2::4)), .TRUE., X, Y)
 
 (3) call proc(asin(1.0), .FLASE., sin(X), cos(Y), sqrt(Z))
 
 (4) call proc(.TRUE., 1.0, X+Y, Y+Z, X*Z)
 
 (5) call proc(maxval(X), sum(Z)<100, X*Y, Y*Z, X+Y-Z)
 
Номер 4
Объявлена подпрограмма subroutine InitST(name, stat, param, index, vector)
character(*) name
logical stat
real param
integer index
complex vector(1000)
...
end subroutine InitST
Какие вызовы подпрограммы являются верными,
если complex Z(1000)
Ответ:
 (1) call InitST('InitST', .TRUE., sum(aimag(Z)), 1, Z)
 
 (2) call InitST("AS098R", maxval(Z), asin(0.0), 0, Z*2)
 
 (3) call InitST('M', Z(2)<(1.0,2.0), 0.0, 5, Z)
 
 (4) call InitST('ASKOP', sum(Z)==(0.0,1.0), real(maxval(Z)), 0, 1-Z)
 
 (5) call InitST('QUESTION', .FALSE., real(sum(Z)), 0, 1-Z)
 
Номер 5
Объявлена подпрограмма subroutine GetVolume(A,B,C, ind, symbol)
complex(16) A(:)
logical(8) B(500)
real(4) C(:)
integer(1) ind
character symbol
...
end subroutine GetVolume
Какие вызовы подпрограммы являются верными,
если complex(16) X(1000)
logical(8) V(500)
real(4) R(250)
Ответ:
 (1) call GetVolume(X(::2),V,R, 1, 'K')
 
 (2) call GetVolume(V, R, X, 1/2, 'K')
 
 (3) call GetVolume(X, V, [0.3, 4.0, 9.0, 5.0], 4, '2')
 
 (4) call GetVolume(X, V, R(::2), int1(minval(R)), '2')
 
 (5) call GetVolume(X*3, .TRUE., R(::5), (2.0, 3.0), ichar(100))
 
Упражнение 5:
Номер 1
Объявлена функция integer function FX(x,y,z,A,B,C)
complex, intent(in) :: x
logical, intent(out) :: y
real z
complex, intent(in) :: A(:)
character(*), intent(in) :: B(:)
real, intent(inout) :: C(3)
...
end function FX
Какие вызовы функции являются верными, если complex xc, yc, zc, Z(50), W(50)
logical status, fс
real param, alfa, beta, gamma
character NAME(100)
real VEC(1000)
integer dummy
Ответ:
 (1) dummy = FX((2.0, 4.0), .TRUE., 0.0, Z(::2), NAME(::5), VEC)
 
 (2) dummy = FX((0.0, -1.0), fс, sum(VEC), Z(1:20), NAME(1:50:5), VEC*2)
 
 (3) write(*,*) FX(sum(W(::2)), status, 0.0, Z**2, ['4','5'], VEC(3:5))
 
 (4) write(*,*) FX(Z(9), fc, sqrt(8.0), Z(::5), NAME(::2), VEC(1:3))
 
 (5) write(*,*) FX((2.,3.), 3<4, 9.0, Z,W,Z(1:3))
 
Номер 2
Объявлена подпрограмма subroutine GetIndicator(param, var, gr1, gr2, val)
logical, intent (out) :: param
real, intent (out) :: var(:)
integer(1), intent (in) :: gr1
integer(2), intent (out) :: gr2
complex(16), intent (in) :: val
...
end subroutine GetIndicator
Какие вызовы подпрограммы являются верными, если logical ST(10), dum
real A(100), B(100), C(100)
integer(2) kf1, kf2
complex(16) R(200)
Ответ:
 (1) call GetIndicator(dum, A(9:55), 100, kf2, (1.0, 9.0))
 
 (2) call GetIndicator(.TRUE., B(10:40), 4, kf1, R(10))
 
 (3) call GetIndicator(ST(5), C(45:95), 100, kf1, R(10))
 
 (4) call GetIndicator(ST(9), C(::2), 0, 0, R(1:10))
 
 (5) call GetIndicator(ST(10), C(1:10), 9, kf2, R(90))
 
Номер 3
Объявлена функция complex(8) function Ex(A,V,W,alfa,betta,gamma)
real, intent(in) :: A(:,:)
complex(8), intent(out) :: V(:,:,:)
character(*), intent(in) :: W(:)
integer, optional, intent(in) :: alfa
real, optional, intent(inout) :: betta
complex, optional, intent(out) :: gamma
...
end function Ex
Какие вызовы функции являются верными, если real M2D(100,100)
complex(8) C1(10,10,10), A(10,10,10), B(10,10,10)
character(128) CH(100)
integer kparam
real sparam
complex zparam
Ответ:
 (1) write(*,*) Ex(M2D(1:50,1:40), C1(:,:,1:7), CH(1:12), gamma=zparam)
 
 (2) zparam=Ex(M2D(:,1:40:4), C1, CH(1:1), alfa=5, betta=7.0)
 
 (3) zparam=Ex(M2D(:,::2),A,CH(1:10),alfa=9)
 
 (4) write(*,*) Ex(M2D,A+B,CH(1:15),kparam, sparam)
 
 (5) write(*,*) Ex(M2D, B(1:3,:,:), CH(::5), alfa=kparam, gamma=zparam)
 
Номер 4
Объявлена функция character function CH(str, N, status, param, maska)
character(*), intent(in) :: str
integer, intent(inout) :: N
integer, intent(out) :: status
character, optional, intent(out) :: param
logical, optional, intent(in) :: maska(:)
...
end function CH
Какие вызовы функции являются верными, еслиcharacter(128) adr
integer, parameter :: N=7000
integer i
character symbol
logical :: mask(100) = .TRUE.
Ответ:
 (1) write(*,*) CH("C:\DATA\1.txt", N+1, N, param = '!', maska = mask(::2))
 
 (2) write(*,*) CH("res.dat", N, N, maska = mask(::4))
 
 (3) write(*,*) CH("QXXDF67C", N, i, maska = mask(2:30:3), param = symbol)
 
 (4) write(*,*) CH("000001", i, i, maska = mask(1:10:2).AND.mask(31:40:2))
 
 (5) write(*,*) CH("Q", i, i, maska = mask(1:10:2).XOR.mask(31:40:2), param=symbol)
 
Номер 5
Объявлена подпрограмма subroutine ModifyMassiv(A,B,st,sp,status)
real, intent(in) :: A(:)
complex, intent(out) :: B(:,:,:)
integer, intent (in) :: st,sp
integer, optional, intent(in) :: status
...
end subroutine ModifyMassiv
Какие вызовы подпрограммы являются верными, еслиreal S(1000)
complex Q(100,100,100)
integer ik, k1, jk
Ответ:
 (1) call ModifyMassiv(S(1:100:2),Q(:,:,::2),k1,int(sum(S)), status=5)
 
 (2) call ModifyMassiv(S(100::2),Q(::2,::2,::2), jk, status=5)
 
 (3) call ModifyMassiv(S,Q(::4,::4,::5), jk+ik+k1, int(sum(Q(:,:,::5))), status=5)
 
 (4) call ModifyMassiv(S,Q,1000,0,0,status=5)
 
 (5) call ModifyMassiv(4*S,3*Q,1000,1110,status=5)
 
Упражнение 6:
Номер 1
В головной программе описаны переменные real A,B,C,D
integer K1, K2, M, N
complex S
Какие из них доступны во внутренней подпрограмме proc ? subroutine proc(A,C,M,N)
real, intent(in) :: A(:)
complex, intent(out) :: C
integer, optional, intent(in) :: M,N
complex R,T
...
end subroutine proc
Ответ:
 (1) A
 
 (2) B
 
 (3) C
 
 (4) D
 
 (5) K1
 
 (6) K2
 
 (7) M
 
 (8) N
 
 (9) S
 
Номер 2
В головной программе описаны переменные character(64), parameter :: NAME = "C:\DATA\FLOW\SWIRL\V1"
real, pointer :: p1, p2
real, target :: T(1000)
logical flag(10)
complex(16) C1, C2
Какие из них доступны во внутренней подпрограмме proc ?subroutine proc(C1, C2, flags)
real(4), intent(out) :: C1
complex(16), intent(out) :: C2
character(*), optional, intent(in) :: flags
real, pointer :: p1
...
end subroutine proc
Ответ:
 (1) NAME
 
 (2) p1
 
 (3) p2
 
 (4) T
 
 (5) flag
 
 (6) C1
 
 (7) C2
 
Номер 3
В головной программе описаны переменныеcomplex, parameter :: k=(0.0,1.0)
integer s1,s2
real A(100,100)
logical :: MASK(2,2,3,3,4,4,5)=.TRUE.
character, pointer :: pcA, pcB
character, target :: str1, str2
Какие из них доступны во внутренней функции F ? real function F(str1, str2, x, y, z, QW) result(A)
logical MASKA(2,2,3,3,4,4,5)
complex k
integer(1) s1
...
end function F
Ответ:
 (1) k
 
 (2) s1
 
 (3) s2
 
 (4) A
 
 (5) MASK
 
 (6) pcA
 
 (7) pcB
 
 (8) str1
 
 (9) str2
 
Номер 4
В головной программе описаны переменныеinteger, pointer :: pk
character(32), target :: file
logical :: st=.FALSE., flag=.TRUE.
complex(16) Z1(10,10,10,10)
real sk,sp,R
Какие из них доступны во внутренней функции GetParamVector?complex function GetParamVector(V,N,z1) result(flag)
complex(16) V
integer(8) N
complex(16), optional, intent(out) :: z1
real x,y,ks,kp,st
...
end function GetParamVector
Ответ:
 (1) pk
 
 (2) file
 
 (3) st
 
 (4) flag
 
 (5) Z1
 
 (6) sk
 
 (7) sp
 
 (8) R
 
Номер 5
В головной программе описаны переменныеreal(4) A,B,C
logical, target :: LOGO
complex(8), pointer :: cPT, cPN, cRT
integer x,y,z
Какие из них доступны во внутренней функции InitFlowAVI? logical function InitFlowAVI(A,B,C,N,name,LOGO) result (cRT)
real(4), intent(in) :: A(:,:,:), B(:,:,:), C(:,:,:)
character(256) name
logical, optional :: LOGO
integer x,y
complex(8), pointer, save :: CPT, CPN
...
end function InitFlowAVI
Ответ:
 (1) A
 
 (2) B
 
 (3) C
 
 (4) LOGO
 
 (5) cPT
 
 (6) cPN
 
 (7) cRT
 
 (8) x
 
 (9) y
 
 (10) Z
 
Упражнение 7:
Номер 1
Укажите атрибут, который описывает параметры процедуры необязательными.
Ответ:
 (1) optional
 
 (2) save
 
 (3) automatic
 
 (4) static
 
 (5) external
 
Номер 2
Укажите атрибут, который позволяет выделять память для внутренних переменных во время выполнения программы.
Ответ:
 (1) static
 
 (2) pure
 
 (3) elemental
 
 (4) automatic
 
 (5) optional
 
Номер 3
Какой атрибут позволяет параметрам процедуры возвращать вычисленное значение в вызывающую процедуру ?
Ответ:
 (1) pure
 
 (2) intent(out)
 
 (3) save
 
 (4) intent(in)
 
 (5) optional
 
Номер 4
Какой атрибут объявляет процедуру чистой ?
Ответ:
 (1) optional
 
 (2) intrinsic
 
 (3) interface
 
 (4) pure
 
 (5) elemental
 
Номер 5
Какой атрибут объявляет процедуру элементной ?
Ответ:
 (1) interface
 
 (2) pure
 
 (3) elemental
 
 (4) external
 
 (5) intrinsic
 
Упражнение 8:
Номер 1
Какие операторы описывают процедуры, передаваемые как параметры ?
Ответ:
 (1) external
 
 (2) intrinsic
 
 (3) elemental
 
 (4) pure
 
 (5) save
 
Номер 2
В операторе interface следует указывать
Ответ:
 (1) тип возвращаемого значения для функций 
 (2) типы формальных параметров 
 (3) тип внутренних переменных 
 (4) вызываемые процедуры 
 (5) исполняемые операторы 
Номер 3
Укажите верные утверждения, которые относятся к элементным процедурам
Ответ:
 (1) избавляют от дублирования процедур, выполняющих одинаковые действия как над скалярами, так и над массивами 
 (2) фактически выполняют неявную перегрузку процедур 
 (3) являются процедурами без побочных эффектов 
 (4) встроенные функции sinh, exp, sqrt не являются элементными 
 (5) неявно обладают pure атрибутом 
Номер 4
Укажите верные утверждения, которые относятся к элементным процедурам
Ответ:
 (1) формальные параметры являются скалярами со связью intent(inout)  
 (2) являются чистыми процедурами  
 (3) элементными могут быть только подпрограммы  
 (4) встроенные функции gamma, BESSEL_J1, LOG_GAMMA являются элементными  
 (5) формальные параметры могут иметь атрибут allocatable  
Номер 5
Укажите верные утверждения, которые относятся к чистым процедурам
Ответ:
 (1) в операторе forall используются только чистые процедуры 
 (2) в операторе where используются только чистые процедуры 
 (3) элементные процедуры являются чистыми 
 (4) формальные параметры подпрограмм имеют вид связи intent(in) 
 (5) не должны содержать оператор return 
Упражнение 9:
Номер 1
Какой оператор используется для остановки работы процедуры и возврат в вызывающую программную единицу.
Ответ:
 (1) return
 
 (2) close
 
 (3) stop
 
 (4) wait
 
 (5) save
 
Номер 2
Какой атрибут задает сохранять свои значения для внутренних переменных процедур ?
Ответ:
 (1) optional
 
 (2) automatic
 
 (3) save
 
 (4) pure
 
 (5) elemental
 
Номер 3
Какой оператор информирует головную программу о типе возвращаемого значения и типе формальных параметров для внешней функции
Ответ:
 (1) external
 
 (2) intrinsic
 
 (3) interface
 
 (4) pure
 
 (5) elemental
 
Номер 4
Какая функция проверяет присутствие необязательного формального параметра ?
Ответ:
 (1) getarg
 
 (2) getpid
 
 (3) isatty
 
 (4) present
 
 (5) precision
 
Номер 5
Какой атрибут указывает, что стандартные процедуры передаются как фактические параметры в другие процедуры ?
Ответ:
 (1) external
 
 (2) automatic
 
 (3) intrinsic
 
 (4) save
 
 (5) interface
 
Упражнение 10:
Номер 1
Какие из фрагментов программ содержат рекурсивные вызовы
Ответ:
 (1) write(*,*) F(F(1))
...
contains
recursive function F(A)
F=1
end function F
 
 (2) contains
function F(A)
real A
A = P(2.0)
F = 0
end function F
function P(B)
real B
B = F(1.0)
P = 2
end function P
 
 (3) write(*,*) Q(10)
...
contains
function Q(A)
integer A
Q = P(2.0*A)
end function Q
function P(B)
real B
P = 2 + B
end function P
 
 (4) contains
recursive function Q(A)
integer A
Q = P(A)*Q(A-1)
end function Q
function P(B)
integer B
P = 2 + B
end function P
 
 (5) write(*,*) RR(10)
...
contains
recursive function RR(k)
integer A(10)
integer k
A(k)=k*A(k-1)
RR=A(k-2)
end function RR
 
Номер 2
К каким процедурам нельзя применить атрибут pure ?
Ответ:
 (1) real function ST(k)
real k
ST=sin(k)*cos(k**3)
end function ST
 
 (2) subroutine make(a,b,c)
complex, intent(in) :: a,b,c
write(*,*) a,b,c
end subroutine make
 
 (3) subroutine INC(a)
real :: a
...
end subroutine INC
 
 (4) subroutine Create(A,B,N)
double precision A
character(128) B
integer(8) N
...
end subroutine Create
 
 (5) subroutine Destroy(k)
integer, intent(in) :: k
integer, parameter :: N=100
real :: A(N)=9.0, B(N)=8.0
...
end subroutine Destroy
 
Номер 3
Выберите процедуры, которые можно объявить элементными.
Ответ:
 (1) subroutine Make(A)
real A
A=2*A+A**2
end subroutine Make
 
 (2) real function SumNew(A)
real A(:), s
do k=1,size(A)
s=s+k
end do
SumNew=s
end function SumNew
 
 (3) character function SMB(str)
character(*) str
SMB=str(1:1)
end function SMB
 
 (4) integer function pr(a,b,c)
real,intent(in) :: a,b,c
pr=a+b**c
end function pr
 
 (5) subroutine SMA(a,b,c,d)
real, intent(in) :: a,b
complex, intent(out) :: c,d
complex, parameter :: i=(0.0,1.0)
c=a**b**i
d=abs(sin(a))**i*b
end subroutine SMA
 
Номер 4
Дана подпрограмма subroutine proc(a,b,N,func)
interface
real function func(x)
real x
end function func
end interface
real, intent(in) :: a,b
integer, intent(in) :: N
write(*,*) func(a+b*N)
end subroutine proc
Выберите верные вызовы, если real function f(x)
real x
f=sqrt(x)+cos(x)+(1.0,1.0)
end function f
real function S(x,y)
real x,y
S=10000*x*y
end function S
recursive function fr(x)
real x
if ((x-1)<0) then
fr=1.0
return
end if
fr=sin(x)+cos(x)+fr(x-1)
end function fr
Ответ:
 (1) call proc(1.0, 2.0, 10, fr)
 
 (2) call proc(5.0, f(6.0), 10, f)
 
 (3) call proc(1.0, 2.0, 10, S)
 
 (4) call proc(S(1.0), S(2.0), 10, f)
 
Номер 5
Какие из фрагментов программ не содержат рекурсивные вызовы
Ответ:
 (1) write(*,*) st(st(a,b))
...
contains
recursive function st(x,y)
st=1.0+x*xy+y
end function st
 
 (2) contains
function func(a)
real a
a = proc(2.0)
func = a**2
end function func
function proc(b)
real b
proc = 2+b
end function proc
 
 (3) write(*,*) Q(10)
...
contains
function P(B)
real B
P = 2 + B
end function P
function Q(A)
integer A
Q = P(2.0*A)
end function Q
 
 (4) contains
recursive real function f(x)
integer x
f = P(x)*f(x-1)
end function f
function P(y)
integer y
P = 2 ** y
end function P
 
 (5) write(*,*) func(10)
...
contains
recursive function func(k)
integer A(10), k
A(k)=k*A(k-1)
func=A(k-2)
end function func