Главная / Программирование /
Введение в программирование больших вычислительных задач на современном Фортране с использованием компиляторов Intel / Тест 4
Введение в программирование больших вычислительных задач на современном Фортране с использованием компиляторов Intel - тест 4
Упражнение 1:
Номер 1
Укажите верные варианты объявления массивов.
Ответ:
 (1) real :: A(4)=[3.9, 4.5, 6.7, 9.4]
 
 (2) real :: B(6)=[0.0 0.0 2.0 4.0 5.0 3.0]
 
 (3) integer :: M(-2, 4) = /3,5,4,4,4,1,1/
 
 (4) real(8), dimension(30) :: Q = 2.0d0
 
 (5) integer, parameter :: red=100, blue=45, green=89
integer, parameter :: M(5)=red
 
Номер 2
Укажите верные варианты объявления массивов.
Ответ:
 (1) real :: A(3)=[3.9, 4.5, 6.7, 9.4]
 
 (2) real :: B(8)=[0.0,0.0,2.0,4.0,5.0,3.0]
 
 (3) integer M(-2, 4) = [1,2,3,1,2,3,4]
 
 (4) complex(16) :: S(90) = (1.0q0,2.0q0)
 
 (5) real(8) :: S(8)= sin(2.0d0)
 
Номер 3
Укажите верные варианты объявления массивов.
Ответ:
 (1) complex(16) : S = (1.0q0,2.0q0)
 
 (2) real(8) :: S(120) = cosh(2.0d0)
 
 (3) logical, parameter :: LOG(5)=[.TRUE. .FALSE. FALSE. .TRUE. .FALSE.]
 
 (4) logical, parameter LOG(5)=.TRUE.
 
 (5) character(16) :: CH(10,10,10)='Q'
 
Номер 4
Укажите верные варианты объявления массивов.
Ответ:
 (1) character(16) :: CH(3,3,3)=['Q','R','W']
 
 (2) complex :: C(-1:3, -4:5, 3:5) = 0
 
 (3) logical : D(-2:5,89:900)=.FALSE
 
 (4) double precision :: R(100,100)=2.0/3.0
 
 (5) integer(1) :: K(1)=100
 
Номер 5
Укажите верные варианты объявления массивов.
Ответ:
 (1) integer :: B(100,1:80)=10
 
 (2) logical D(-2:5,89:900)
 
 (3) real(16) :: S(9000:10000:2)=1.0Q0
 
 (4) character(8) :: A(100)="C:\"
 
 (5) real :: A(100,100,100,100,100)=0.0
 
Номер 6
Укажите верные варианты объявления массивов.
Ответ:
 (1) logical, parameter :: LOGO(5)=[.TRUE.,.FALSE.,.FALSE.,.TRUE.,.FALSE.]
 
 (2) real(16) :: S(9000,10000:2)=1.0Q0
 
 (3) complex(16) :: S = (1.0q0,2.0q0)
 
 (4) character(16) :: CH(10:10:10)='Q'
 
 (5) integer :: M(-2, 4) = /3,5,2,2,2,2/
 
Упражнение 2:
Номер 1
В результате выполнения операции C=A*
B над двумерными массивами A и B произойдет.
Ответ:
 (1) умножение матриц по правилам математики (строка на столбец) 
 (2) умножение элементов на соответствующих позициях 
 (3) данная запись неправильная, следует использовать циклы и индексы массивов 
 (4) данная запись неправильная, так как размеры матриц могут быть несогласованными. 
 (5) данная запись неправильная, следует использовать сечения массивов 
 (6) данная запись неправильная, следует использовать оператор forall 
Номер 2
Операция C=A**B над двумерными массивами A и B аналогична следующим строчкам программы
Ответ:
 (1) do i=1,Mi
do j=1,Mj
C(i,j)=A(i,j)**B(i,j)
end do
end do
 
 (2) do i=1,Mi
do j=1,Mj
C(i,j)=A(i,j)**B(j,i)
end do
end do
 
 (3) do i=1,Mi
do j=1,Mj
C(i,j)=A(i,j)^B(i,j)
end do
end do
 
 (4) do i=1,Mi
do j=1,Mj
C(i,i)=A(i,i)**B(j,j)
end do
end do
 
Номер 3
Операция C=A/B
над двумерными массивами A и B аналогична следующим строчкам программы
Ответ:
 (1) do i=1,Mi
C(i,:)=A(i,:)/B(i,:)
end do
 
 (2) do i=1,Mi
do j=1,Mj
C(i,i)=A(i,i)/B(j,j)
end do
end do
 
 (3) do i=1,Mi
do j=1,Mj
C(i,j)=A(i,j)/B(j,i)
end do
end do
 
 (4) do i=1,Mi
C(i,:)=A(:,i)/B(i,i)
end do
 
Номер 4
Операция C=A+B
над двумерными массивами A и B аналогична следующим строчкам программы
Ответ:
 (1) C(:,:)=A(:,:)+B(:,:) 
 (2) do i=1,Mi
do j=1,Mj
C(i,i)=A(i,i)+B(j,j)
end do
end do
 
 (3) do i=1,Mi
do j=1,Mj
C(i,j)=A(i,j)+B(j,i)
end do
end do
 
 (4) do i=1,Mi
C(i,:)=A(:,i)+B(i,i)
end do
 
Номер 5
Операция C=A-B
над двумерными массивами A и B аналогична следующим строчкам программы
Ответ:
 (1) C(1,:)=A(1,:)-B(:,1) 
 (2) do i=1,Mi
do j=1,Mj
C(i,j)=A(i,j)-B(j,i)
end do
end do
 
 (3) do i=1,Mi
do j=1,Mj
C(i,j)=A(i,j)-B(i,j)
end do
end do
 
 (4) do i=1,Mi
C(i,:)=A(i,i)-B(i,i)
end do
 
Упражнение 3:
Номер 1
Дан массив integer B(10,20)
Запись B(:,:)=4
означает присвоить значение 4
Ответ:
 (1) всем элементам массива  
 (2) первой и последней строкам  
 (3) первому и последнему столбцам 
 (4) первой строке 
 (5) первому столбцу 
Номер 2
Дан массив integer C(10,20)
Запись С(1:10:2,:)=5
означает присвоить значение 5
Ответ:
 (1) каждой второй строке, начиная с 1-й 
 (2) Элементам, расположенным в шахматном порядке  
 (3) каждому второму столбцу, начиная с первого 
 (4) всем элементам массива с шагом 2 
 (5) всем элементам каждой строки с шагом 2 
Номер 3
Дан массив integer C(10,20)
Запись С(2,::3)=8
означает присвоить значение 8
Ответ:
 (1) во второй строке каждому третьему столбцу, начиная с первого 
 (2) элементу С(2,3)  
 (3) каждой третьей строке 
 (4) второй строке и третьему столбцу 
 (5) третьей строке и второму столбцу 
Номер 4
Дан массив integer A(20,20)
Запись A(:10:2,:)=5 означает присвоить значение 5
Ответ:
 (1) каждой строке от 1-го до 10-го элементов с шагом 2 
 (2) каждой второй строке, начиная от 1-й до 10-й 
 (3) каждой второй строке, начиная со 2-й 
 (4) каждому второму столбцу, до 10-го столбца 
Номер 5
Дан массив integer A(20,20)
Запись A(:2,:2)=5 означает присвоить значение 5
Ответ:
 (1) первой и второй строке, первому и второму столбцам 
 (2) элементам расположенным в шахматном порядке 
 (3) элементам расположенным на пересечении первых двух строк и первых двух столбцов  
 (4) каждому второму столбцу, каждой второй строке 
Упражнение 4:
Номер 1
Какой оператор используется для размещения в памяти динамического массива
Ответ:
 (1) allocatable
 
 (2) allocated
 
 (3) deallocate
 
 (4) allocate
 
 (5) new
 
Номер 2
Какой оператор используется для освобождения памяти занимаемой динамическим массивом
Ответ:
 (1) allocatable
 
 (2) allocated
 
 (3) deallocate
 
 (4) delete
 
Номер 3
Для того чтобы, создать динамический массив A с границами и формой как у массива B следует воспользоваться оператором
Ответ:
 (1) allocate(B, source=A, stat=A)
 
 (2) allocate(A, source=B)
 
 (3) allocate(A,size(B))
 
 (4) allocate(A => B)
 
 (5) allocate(A,B)
 
Номер 4
Для того чтобы, создать динамический массив A с границами, формой и значениями как у массива B следует воспользоваться оператором
Ответ:
 (1) allocate(B, mold=A, STAT=A)
 
 (2) allocate(A, source=B)
 
 (3) allocate(A, mold=B)
 
 (4) allocate(A => B)
 
 (5) allocate(A,B)
 
Номер 5
Укажите верные записи оператора allocate
Ответ:
 (1) allocate(B, mold=A, STAT=ist)
 
 (2) allocate(A, source=B)
 
 (3) allocate(A, 10)
 
 (4) allocate(A(100))
 
Упражнение 5:
Номер 1
Элементам массива требуется присвоить значения, как показано на рисунке. Какую операцию присваивания следует выбрать?
Ответ:
 (1) B(1:8:2,:)=1
 
 (2) B(2:8:2,:)=1
 
 (3) B(:,::2)=1
 
 (4) B(::2,:)=1
 
 (5) B(1:7,2)=1
 
Номер 2
Элементам массива требуется присвоить значения, как показано на рисунке. Какую операцию присваивания следует выбрать?
Ответ:
 (1) B(3:7:2,3:8)=1
 
 (2) B(3:6:2,3:7)=1
 
 (3) B(3::2,3:8)=1
 
 (4) B(::2,:8)=1
 
 (5) B(1:2,2:8)=1
 
Номер 3
Элементам массива требуется присвоить значения, как показано на рисунке. Какую операцию присваивания следует выбрать?
Ответ:
 (1) B(::2,:8)=1
 
 (2) B(1:8,2)=1
 
 (3) B(5:8:2,1:8)=1
 
 (4) B(1:7:2,::2)=1
 
 (5) B(2:5,::2)=1
 
Номер 4
Элементам массива требуется присвоить значения, как показано на рисунке. Какую операцию присваивания следует выбрать?
Ответ:
 (1) B(3:9,3::3)=1
 
 (2) B(4::3,2:8)=1
 
 (3) B(2:10,2:9:2)=1
 
 (4) B(2:10,3:9:3)=1
 
 (5) B(3:9,3:8:3)=1
 
Номер 5
Элементам массива требуется присвоить значения, как показано на рисунке. Какую операцию присваивания следует выбрать?
Ответ:
 (1) B(::4,2::2)=1
 
 (2) B(::3,::2)=1
 
 (3) B(::3,:10:2)=1
 
 (4) B(5:4,:10:2)=1
 
 (5) B(3:5,::2)=1
 
Упражнение 6:
Номер 1
Какие операторы выполняют преобразование массива B(Mi,Mj)
(см. рисунок)(Mi=7, Mj=10) ?
Ответ:
 (1) forall (i=1:Mi:2, j=4:Mj, B(i,j)<=5)
B(i,j)=-2
end forall
 
 (2) where (B<=5)
B=-2
end where
 
 (3) do j=4,Mj
do i=1,Mi,2
if (B(i,j)==5) B(i,j)=-2
end do
end do
 
 (4) B(::2,4:)=-2; B(Mi,6:7)=-2 
Номер 2
Какие операторы выполняют преобразование массива A(Mi,Mj)
(см. рисунок)(Mi=7, Mj=7) ?
Ответ:
 (1) where (A(:,2)<4)
A(3,:)=0
elsewhere
A(:,5)=8
end where
 
 (2) A(3,[1,2,3,6,7])=0
A([3,4],5)=8
 
 (3) do j=1,Mj
if ((j==4).OR.(j==5)) cycle
A(3,j)=0
end do
A(:,5)=8
 
 (4) forall (j=1:Mj)
A(3,j)=0
end forall
A([4,5],5)=8
 
Номер 3
Какие операторы выполняют преобразование массива A(Mi,Mj)
(см. рисунок)(Mi=7, Mj=7)?
Ответ:
 (1) do i=1,Mi,2
do j=1,Mj/2
A(i,j)=0
end do
end do
A(:,4)=9
 
 (2) forall(i=1:Mi:2,j=1:3)
A(i,j)=0
end forall
A(4,:)=9
 
 (3) where (A(1,:)==1)
A(:,4)=9
end where
A(::2,4)=0
 
 (4) A(::2,[1,2,3])=0
A(:,3)=9
 
Номер 4
Какие операторы выполняют преобразование массива A(Mi,Mj)
(см. рисунок)(Mi=5, Mj=8)?
Ответ:
 (1) where (A([2,4,5],:)<4)
A([1,3,5],:)=-1
end where
 
 (2) forall (i=1:5:2, j=1:3)
A([i,j],:)=-1
end forall
 
 (3) A(::2,1:3)=-1
A(:,6:7)=-1
 
 (4) A(:,::2)=-1
A(:,4)=4
A(:,5)=5
A(::2,:)=0
 
Номер 5
Какие операторы выполняют преобразование массива A(Mi,Mj)
(см. рисунок)(Mi=5, Mj=8)?
Ответ:
 (1) forall (i=1:Mi:2, j=2:Mj-1)
A(i,j)=A(i,j)+2
end forall
 
 (2) A(::2,2:Mj-1)=A(::2,2:Mj-1)*2 
 (3) A(2:Mi-1,:)=A(2:Mi-1,:)+2 
 (4) forall (j=1:Mj:2, i=1:5:2)
A(i,j)=A(i,j)+2
end forall
 
Упражнение 7:
Номер 1
Какая процедура выполняет умножение матриц по правилу "строка на столбец"?
Ответ:
 (1) product
 
 (2) merge
 
 (3) matmul
 
 (4) dot_product
 
 (5) spread
 
Номер 2
Процедура, вычисляющая размер массива вдоль заданного измерения называется
Ответ:
 (1) shape
 
 (2) count
 
 (3) lbound
 
 (4) ubound
 
 (5) size
 
Номер 3
Процедура, выполняющая переформирования массива называется
Ответ:
 (1) shape
 
 (2) merge
 
 (3) reshape
 
 (4) all
 
 (5) unpack
 
Номер 4
Процедура, выполняющая упаковку массива в одномерный массив
Ответ:
 (1) pack
 
 (2) transpose
 
 (3) spread
 
 (4) shape
 
 (5) merge
 
Номер 5
Процедура, выполняющая циклический сдвиг массива
Ответ:
 (1) cshift
 
 (2) eoshift
 
 (3) spread
 
 (4) reshape
 
Упражнение 8:
Номер 1
Программа формирует и выводит на экран матрицу A
Чтобы преобразовать матрицу A в матрицу B достаточно добавить строки в программе
Ответ:
 (1) integer B(3,5)
 
 (2) integer B(5,3)
 
 (3) B=reshape(A,[5,3])
 
 (4) B=reshape(A,[3,5])
 
 (5) B=reshape(B,[5,3])
 
 (6) B=transpose(A)
 
Номер 2
Чтобы преобразовать матрицу A достаточно добавить строку в программе
Ответ:
 (1) A = CSHIFT (A, SHIFT = -2, DIM = 2)
 
 (2) A = CSHIFT (A, SHIFT = 2, DIM = 2)
 
 (3) A = CSHIFT (A, SHIFT = -2, DIM = 1)
 
 (4) A = CSHIFT (A, SHIFT = 1, DIM = 2)
 
 (5) A = CSHIFT (A, SHIFT = 1, DIM = 1)
 
Номер 3
Чтобы получить массив B из массива A достаточно добавить строку в программе.
Ответ:
 (1) B = SPREAD (A, NCOPIES=3, DIM = 1)
 
 (2) B = SPREAD (A, NCOPIES=3, DIM = 2)
 
 (3) B = SPREAD (A, NCOPIES=2, DIM = 1)
 
 (4) B = SPREAD (A, NCOPIES=3, DIM = 3)
 
 (5) B = SPREAD (A, NCOPIES=1, DIM = 1)
 
Номер 4
Чтобы получить массив B из массива A достаточно добавить строки в программе.
Ответ:
 (1) integer B(3,5)
 
 (2) integer B(5,3)
 
 (3) B=reshape(A,[5,3])
 
 (4) B=reshape(A,[3,5])
 
 (5) B=reshape(B,[5,3])
 
 (6) B=transpose(A)
 
Номер 5
Чтобы получить массив B из массива A достаточно добавить строки в программе.
Ответ:
 (1) integer B(11)
 
 (2) integer B(10)
 
 (3) B=pack(A,mask=A/=0)
 
 (4) B=pack(A,mask=A==0)
 
 (5) B=reshape(A,[11],mask=A==0)
 
 (6) B=reshape(A,[11])
 
Упражнение 9:
Номер 1
Присваивание нижнему треугольнику (включая диагональ) квадратной матрицы выполняют операторы:
Ответ:
 (1) do i=1,10
do j=1,i
A(i,j)=1
end do
end do
 
 (2) do i=1,10
do j=i,1
A(i,j)=1
end do
end do
 
 (3) do i=1,10
A(:,i:i)=1
end do
 
 (4) do i=1,10
A(:,1:i)=1
end do
 
 (5) do i=1,10
A(i,1:i)=1
end do
 
Номер 2
Присваивание верхнему треугольнику (включая диагональ) квадратной матрицы выполняют операторы
Ответ:
 (1) do i=1,10
A(1:i,i)=1
end do
 
 (2) do i=1,10
A(1:i,1:i)=1
end do
 
 (3) do i=1,10
A(i,1:i)=1
end do
 
 (4) do i=1,10
A(1:i,i:1)=1
end do
 
 (5) do i=1,10
A(1:i,i::1)=1
end do
 
Номер 3
Элементам главной диагонали
Ответ:
 (1) A(:,:)=1 
 (2) do i=1,10
A(i,i)=1
end do
 
 (3) V(10)=[1,2,3,4,5,6,7,8,9,10]
A(V,V)=1
 
 (4) do i=1,10
A(1:i,i:1)=1
end do
 
 (5) do i=1,10
A(i,:)=1
end do
 
Номер 4
Элементам побочной диагонали
Ответ:
 (1) do i=1,10
A(i,11-i)=1
end do
 
 (2) do i=1,10
A(i,10-i)=1
end do
 
 (3) do i=1,10
A(i,-i)=1
end do
 
 (4) do i=10,1
A(i,i)=1
end do
 
 (5) do i=1,10
A(i,i)=1
end do
 
Номер 5
Присваивание нижнему треугольнику (исключая диагональ) квадратной матрицы выполняют операторы:
Ответ:
 (1) do i=2,10
do j=1,i-1
A(i,j)=1
end do
end do
 
 (2) do i=1,10
do j=2,i-1
A(i,j)=1
end do
end do
 
 (3) do i=1,10
A(::2,i:i)=1
end do
 
 (4) do i=1,10
A(:,1:i)=1
end do
 
 (5) do i=1,10
A(i,1:i)=1
end do
 
Упражнение 10:
Номер 1
За создание массива отвечают строки программы
Ответ:
 (1) integer :: A(10,10)=0, V(6)=[1,2,5,6,9,10]
 
 (2) integer :: A(10,10)=0, V(6)=[1,2,3,4,5,6]
 
 (3) A(V,V)=4
 
 (4) A(V,2)=4
 
 (5) A(V,[2,3,5])=4
 
 (6) A([2,3,5],[2,3,5])=4
 
Номер 2
За формирование массива отвечают строки программы
Ответ:
 (1) integer :: A(10,10)=0
 
 (2) integer :: V(5)=[1,2,3,9,10]
 
 (3) integer :: V(5)=[1,2,3,4,5]
 
 (4) integer :: V(5)=[1,2,8,9,10]
 
 (5) A(V,:)=4
 
 (6) A(:,V)=4
 
 (7) A(V,V)=4
 
Номер 3
За формирование массива отвечают строки программы
Ответ:
 (1) integer :: A(10,10)=0, V(3)=[3,5,7]
 
 (2) integer :: A(3,3)=5, V(3)=[1,2,3]
 
 (3) integer :: A(10,10)=0, V(3)=[1,2,3]
 
 (4) A(V,V+1)=5
 
 (5) A(V,V)=5
 
 (6) A(V,2*V)=5
 
Номер 4
За формирование массива отвечают строки программы
Ответ:
 (1) integer :: A(10,10)=0
 
 (2) integer :: V(3)=[1,4,3]
 
 (3) integer :: V(3)=[1,2,3]
 
 (4) integer :: V(3)=[2,6,8]
 
 (5) A(:,2*V)=2
 
 (6) A(V,:)=2
 
 (7) A([1,2,3],:)=2
 
Номер 5
За формирование массива отвечают строки программы
Ответ:
 (1) integer :: A(10,10)=0
 
 (2) integer :: V(5)=[1,3,5,7,9]
 
 (3) A(V,V)=2
 
 (4) A([2,5,6],::2)=2
 
 (5) A(V,:)=2
 
 (6) A(:,V)=2