Печать двух одномерных массивов в фортране - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть два одномерных массива.
Я хотел бы напечатать содержимое следующим образом.

массив1: - имя страны возраста
массив2: -a 12 Китай b 13 Чилиc 14 Индия

выход

name = a age =12 country = china name = b age =13 country = chile name = c age =14 country = india

1 Ответ

0 голосов
/ 15 февраля 2019

Эта проблема может быть проще, если она предназначена для использования массива структур, а не структуры массивов.Подход к структуре массивов выглядит примерно так:

program nml1
   implicit none
   type info(length)
      integer, len :: length
      character(20) name(length)
      integer age(length)
      character(20) country(length)
   end type info
   type(info(:)), allocatable :: class
   namelist /my_data/ class
   class = info(3)([character(20)::'a','b','c'],[12,13,14], &
      [character(20)::'china','chile','india'])
   write(*,nml=my_data)
end program nml1

Или, может быть,

program nml2
   implicit none
   type info(length)
      integer, len :: length
      character(20) name(length)
      integer age(length)
      character(20) country(length)
   end type info
   type(info(:)), allocatable :: class
   namelist /my_data/ class
   allocate(info(3)::class)
   class%name = [character(20)::'a','b','c']
   class%age = [12,13,14]
   class%country = [character(20)::'china','chile','india']
   write(*,nml=my_data)
end program nml2

Но я не могу заставить их скомпилироваться с gfortran или ifort.Моя ошибка или ошибки компилятора?

Но это не большая проблема, потому что я все равно рекомендую подход с массивом структур.В этом случае вместо 3-х массивов скалярных данных, упакованных в структуру (или просто бесплатно), мы упаковываем все соответствующие данные для каждого учащегося в структуру и создаем массив таких структур.Вот как это выглядит:

program nml
   implicit none
   type info
      character(20) name
      integer age
      character(20) country
   end type info
   type(info), allocatable :: class(:)
   namelist /my_data/ class
   class = [info('a',12,'china'),info('b',13,'chile'),info('c',14,'india')]
   write(*,nml=my_data)
end program nml

Теперь, что хорошо в этом подходе, это то, что он не только компилируется, но и данные автоматически регургитируются в правильном порядке и с метками через `namelist './ O, так что если этот формат достаточно хорош, нам не нужно писать какой-либо причудливый код вывода.Выход с гфортраном составляет:

&MY_DATA
 CLASS(1)%NAME="a                   ",
 CLASS(1)%AGE=12         ,
 CLASS(1)%COUNTRY="china               ",
 CLASS(2)%NAME="b                   ",
 CLASS(2)%AGE=13         ,
 CLASS(2)%COUNTRY="chile               ",
 CLASS(3)%NAME="c                   ",
 CLASS(3)%AGE=14         ,
 CLASS(3)%COUNTRY="india               ",
 /
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...