
- •Управление векторами и матрицами
- •Компиляция и выполнение Компиляция
- •Связывание (редактирование связей )
- •Выполнение
- •Примеры
- •Соглашения о записи кода
- •Арифметические выражения
- •Операции отношения
- •Логические выражения
- •Сравнение символов
- •Переносимость результата
- •Спецификация массивов
- •Сечения массива Индивидуальные элементы
- •Сечения
- •Векторные указатели
- •Память для массива Физическая память:
- •Присваивание массива Присваивание всего массива
- •Присваивание секции (вырезки) массива
- •Повторная нумерация
- •Основные встроенные процедуры
- •Массивы нулевого размера
- •Массивы и производные типы
- •Инициализация массивов Конструкторы
- •Оператор data
- •Встроенные функции для массива
- •Пример упрощения
- •Пример исследования (запроса)
- •Пример конструирования
- •Пример локализации
- •Я Операторы управления
- •Вложения
- •Порядок операторов
- •Синтаксис программы Main
- •Формат представления программы
- •Программные единицы
- •Уровни доступа
- •Дополнения
- •Спецификация входных-выходных параметров
- •Использование модуля
- •Родовые подпрограммы
- •Интерактивный ввод-вывод
- •Простой Input и Output
- •Форматирование по умолчанию
- •Форматированный ввод-вывод I/o
- •Дескрипторы редактора
- •Вещественные - форма с фиксированной точкой
- •Вещественные - экспотенциальная форма
- •Символьные
- •Логические
- •Заполнение пробелами (пропуск символьных позиций)
- •Специальные символы
- •Списки ввода-вывода
- •Производные типы данных
- •Неявный цикл do
- •Ввод-вывод без продвижения
- •Файловый ввод-вывод
- •Номера устройств
- •Операторы read и write
- •Оператор write
- •Оператор open
- •Оператор close
- •Оператор inquirе
- •Динамический массив
- •Распределяемые массивы
- •Спецификация
- •Выделение и возвращение памяти
- •Статус распределяемых массивов
- •Потоки памяти (куча)
- •Что есть указатели?
- •Указатели и адресаты
- •Спецификации указателя Общая форма для операторов определения указателя и адресата такая:
- •Присваивание указателя
- •Разыменование (Dereferencing)
- •Статус (состояние) связи указателя
- •Динамическая память
- •Общие ошибки
- •Указатели в производных типах данных
- •Связанные списки
- •Параметры - указатели
- •Функции для указателей
Инициализация массивов Конструкторы
Конструкторы используются для инициализации одномерных массивов, которые требуют фиксированных значений к началу программы. Конструктор это список, заключенный между двумя символами слэш // и круглыми скобками. Общая форма такова:
array = (/ список /)
где список может быть одним из следующих:
список значений назначенного типа
INTEGER :: a(6)=(/1,2,3,6,7,8/)
Выражения для переменной (s)
REAL :: b(2)=(/SIN(x),COS(x)/)
Выражение от массива (s)
INTEGER :: c(5)=(/0,a(1:3),4/)
Неявный цикл DO
REAL :: d(100)=(/REAL(i),i=1,100/)
Конструктор может быть использован во время объявления как показано выше или в отдельном операторе. Массивы ранга 2 или более не могут быть инициализированы с помощью простого конструктора, а комбинацией конструктора (ов) и функции RESHAPE().
Reshape
Функция RESHAPE() используется для инициализации и присваивания многомерных массивов (ранг выше 1). Ее можно использовать в операторе объявления или в отдельном операторе. Формат такой:
RESHAPE (список, shape [,PAD] [,ORDER])
where список это одномерный массив или конструктор, содержащий данные и формирование одномерного массива или вектора или подпись вектора, содержащего новую форму данных. PAD - массив, содержащий данные для использования их в качестве простлойки в списке для требуемого формирования.. ORDER может быть использован для изменения порядка, в котором данные переформируются.
Размер массива определяет размеры нового массива. Элементы определяют протяженность каждой размерности. В следующем примере:
INTEGER, DIMENSION(3,2) :: a
a=RESHAPE((/0,1,2,3,4,5/),(/3,2/)) ! положить значения в a
RESHAPE() генерирует массив ранга 2 с протяженностью 3 и 2 из списка значений в конструкторе. Поскольку этот массив подобен (соответствует) массиву a, использовано присваивание всего массива, дающее значение каждому элементу.. Аргумент ORDER не использован, значения из конструктора возвращены в порядке следования элементов в массиве, то есть a(1,1)=0, a(2,1)=1, a(3,1)=2, a(1,2)=3, и т д...
Оператор data
Использование DATA, когда другие методы утомительны или / и невозможны: например, для инициализации более одного массива или вырезки массива. Формат такой:
DATA variable / список / ...
Например:
INTEGER :: a(4), b(2,2), c(10)
DATA a /4,3,2,1/
DATA a /4*0/
DATA b(1,:) /0,0/
DATA b(2,:)/1,1/
DATA (c(i),i=1,10,2/5*1/
DATA (c(i),i=2,10,2)/5*2/
Первый оператор DATA использует список значений, где значение для кажого элемента явно определено. Второй оператор DATA использует список для полного массива, где 4 - размер массива и 0 требуемое значение (* не есть умножение). Третий и четвертый операторы использует список в виде вырезки, где первый ряд принимает значения 0 и 0 и вторая строка принимает значения 1 и 1.
Последние два оператора используют список, представленный неявным циклом DO, где элементам с нечетными индексами заданы значения 1 , элементам с четными индексами заданы значения 2. Вспомним, что оператор DATA:
Можно располагать более чем в одной строке, но каждая строка должна иметь ключевое слово DATA
Может быть использован для переменных как для массивов.
WHERE
Оператор WHERE используется для управления, когда элементы массива использованы в операторе присваивания, зависящем от результата некоторого логического условия. Он имеет форму оператора или конструкции. Оператор WHERE допускает вычисление выражения элемента, зависящее от исходного значения этого элемента только если логическое условие верно. Синтаксис такой:
WHERE (условие) выражение
Рассмотрим следующее:
INTEGER :: a(2,3,4)
...
WHERE( a<0 ) a = 0
WHERE( a**2>10 ) a = 999
WHERE( a/=0 ) a = 1/a
Первый оператор WHERE дает результат во всех отрицательных значениях a, устанавливая в 0; неотрицательные значения остаются нетронутыми. Второй оператор WHERE дает результат в элементах данных, устанавливаемых в 999, если их квадрат больше 10. Третий оператор вычисляет обратную величину для каждого элемента данных, за исключением тех, значения которых нулевые. Конструкция WHERE допускает присваивание массивов (снова в элементах базы) только если верно логическое условие, но должно предусмотреть альтернативное присваивание на случай "не истина".Синтаксис:
WHERE (условие)
block1
[ELSEWHERE
block2]
ENDWHERE
В:
INTEGER :: btest(8,8)
...
WHERE ( btest<=0 )
btest = 0
ELSEWHERE
btest = 1/btest
ENDWHERE
Все элементы с отрицательными значениями в массиве btest устанавливаются в 0 и оставшиеся заменяются обратной величиной.