1.
Обойтись чем-то одним встроенным в данном случае, насколько мне известно, не получится, придется действовать примерно так, как Вы начали.
Не знаю, как сделать это элегантнее, поэтому сделал это так:
Можно немного улучшить дело. Во-первых:
indx = (/(i,i=lbound(a,dim=1),ubound(a,dim=1))/)
Если перерабатываемый массив большой, писать вручную список натуральных чисел явно не стоит.
Затем делаем такой фокус:
Третий аргумент - это логическое условие, в соответствии с которым в итоговый результат попадут либо элементы из первого аргумента (если условие выполнено), либо из второго (если нет). Второй аргумент фактически воспринимается как массив нужного размера из нулей (можно туда запихать что-нибудь другое, лишь бы оно заведомо не попадало в диапазон индексов исходного массива).
Теперь у нас есть массив нужных индексов, разбавленный нулями. Если нули хочется убрать, то остается вызвать функцию:
Некоторая проблема состоит в том, что результат получится неизвестной длины. Но можно заранее выяснить, какое количество элементов в массиве
a удовлетворяют условию, вызвав функцию
count(a>f) и соорудив массив для приема результатов нужного размера.
Знак минус появился из-за того, что у меня почему-то значение T приравнивается -1 (к слову, я не совсем понимаю почему).
А вот так делать не надо. Фортран - не Си, вид машинного представления булевых переменных стандартом не определен и может отличаться у разных компиляторов.
Ну, то есть на выходе программы у нас есть, скажем, массив a. Нельзя ли, как в каком-нибудь MATLAB или Julia language, тыкнуть что-нибудь вроде a(4) и получить на экране четвёртый элемент? Я чего ни тыкал - безрезультатно.
Нет, нельзя. Для подобного нужен отладчик (по идее, в MSVS он есть), но в нормальном состоянии работа с компилируемыми языками такое не позволяет. MATLAB и Julia - интерпретируемые (вторая, правда, с оговорками, но это сейчас неважно), там такое можно, но цена этой возможности - сильнейшее падение производительности.
-- 02.11.2015, 14:22 --P.S. Кстати, с опозданием сообразил, что на использовании
merge можно сэкономить. Второй и третий шаги разом делаются с помощью: