имена динамических переменных фортрана

Я пишу код, в котором мне нужны массивы, определенные как u1, u2, u3. Я требую, чтобы количество определенных переменных диктовалось пользователем. например, если пользователь вводит целочисленное значение "7". Тогда определены переменные u1,u2,u3,u4,u5,u6,u7. Таким образом, имена переменных для массивов определяются тем, какое значение вводит пользователь.


person Syed Moez    schedule 29.01.2015    source источник
comment
возможный дубликат FORTRAN — имена динамических переменных   -  person francescalus    schedule 30.01.2015
comment
@francescalus Я не понимаю ответа на вопрос, похожий на этот, и мне не разрешено комментировать его из-за меньшей репутации.   -  person Syed Moez    schedule 30.01.2015
comment
Я также не могу открыть эту ссылку: web.mse. uiuc.edu/courses/mse485/comp_info/derived.html   -  person Syed Moez    schedule 30.01.2015


Ответы (1)


Из описания вашей проблемы вам просто нужен выделяемый массив.

TYPE(whatever), ALLOCATABLE :: u(:)
INTEGER :: some_number
PRINT *, 'Enter the number of things you want:'
READ *, some_number
ALLOCATE(u(some_number))
! work with u(1) through to u(some_number)

Стандартный Фортран не предлагает динамического именования переменных «из коробки».

person IanH    schedule 30.01.2015
comment
то, что я хочу иметь, - это количество массивов в зависимости от пользовательского ввода. например и1(10), и2(10), и3(10). однако количество определяемых массивов зависит от пользовательского ввода. если пользователь вводит i=3, то он определяет три массива.... - person Syed Moez; 30.01.2015
comment
@SyedMoez использует двумерный размещаемый массив. Если вам нужно 3 массива по 10 значений, укажите allocatable, u(:,:) и выделите его с помощью allocate(u(3,10)). - person casey; 30.01.2015
comment
... или иметь компонент массива размера десять внутри типа whatever. - person IanH; 30.01.2015
comment
Если лучше выделить как u(10,3) вместо u(3,10), если вы хотите передать подмассивы из 10 элементов в подпрограммы или функции, потому что 10 элементов будут непрерывными в памяти. - person Anthony Scemama; 30.01.2015