В зависимости от желаемого формата вывода, вам не обязательно нужен цикл do, вот самое простое:
program simple
implicit none
CHARACTER(len=1) :: Grid(2,2)
Grid = reshape( ["1","2","3","4"] , shape=shape(Grid) )
write( * , "(A)" ) Grid
end program simple
Строка с reshape
, использует синтаксис конструктора массива Fortran> 2003[]
.Поэтому убедитесь, что в настройках компилятора уже установлен стандарт Fortran 2008.В противном случае просто замените []
старым синтаксисом конструктора массива (//)
.
Если вы хотите, чтобы каждая строка печаталась на отдельной строке, то цикл был бы необходим, по крайней мере, подразумевал do-loop ,
program simple
implicit none
integer :: i,j
integer, parameter :: n=2
CHARACTER(len=1) :: Grid(n,n)
Grid = reshape( ["1","2","3","4"] , shape=shape(Grid) )
write( * , "(*(g0))" ) ( (Grid(i,j)," ",j=1,n), new_line("A"), i=1,n )
end program simple
Вышеупомянутая версия, я полагаю, избегает ненужного временного массива, созданного компилятором для хранения незагрязненного раздела массива Grid(i,:)
, перед его выводом на выход,Дескриптор редактирования g0
является удобной функцией Fortran 2008. Поэтому убедитесь, что ваш компилятор поддерживает стандарт Fortran 2008.