Скачать 61.63 Kb.
|
Массивы Массив – это набор элементов данных одного и того же типа, занимающих последовательные единицы памяти в некотором отрезке памяти. Каждый массив обладает следующими атрибутами: 1. Имя массива. 2. Тип массива. 3. Набор значений (элементов). 4. Число измерений. 5. Размер (протяженность) массива по каждому измерению. 6. Нижняя и верхняя границы массива по каждому измерению. Массив объявляется в операторах описания типа, в операторах DIMENSION и COMMON. Общая форма описания массива имеет вид имя_массива (L1:U1, L2:U2, …, L7:U7) где Li и Ui – нижняя и верхняя границы i-го измерения. В Фортране 77 максимальное число измерений равно 7. Размер i-го измерения – Di = Ui – Li + 1. Размер n-мерного массива – общее число элементов в массиве – D1*D2*…*Dn. Положение элемента массива в памяти определяется значением адресного выражения для этого элемента. Значение адресного выражения изменяется от 1 (первый элемент) до величины размера массива (последний элемент). Значение адресного выражения вычисляется по индексам элемента и параметрам размерностей массива. В качестве индексного выражения допускается любое правильно построенное целое выражение, не содержащее обращений к таким функциям, выполнение которых может повлиять на значения других индексных выражений в том же индексе. Число индексных выражений должно совпадать с числом измерений массива, указанным в его описателе. Каждое индексное выражение является индексом по соответствующему измерению, и его значение должно лежать в пределах границ массива по этому измерению. Правила вычисления адресного выражения
Если нижняя граница какого-либо измерения опущена при описании, то по умолчанию она берется равной 1. Доступ к элементу массива требует больше времени, чем доступ к простой переменной (так как требуется вычислять адресное выражение). Именно поэтому массивы целесообразно использовать только там, где это необходимо, при этом следует по возможности сводить к минимуму число измерений массива. Если один и тот же элемент массива используется в программе неоднократно, то обычно его значение запоминают в какой-нибудь простой переменной и каждый раз берут требуемое значение элемента массива из нее. Память для массива отводится в той программной компоненте, в которой он декларируется, если только он не описан как формальный параметр этой подпрограммы; в последнем случае массив передается подпрограмме извне в качестве аргумента. Декларацию массива в программной компоненте, в которой для него фактически будет отведена память, будем называть декларацией фактического массива. Декларацию массива в подпрограмме, в которую он будет передан как параметр, будем называть декларацией формального массива. В декларации фактического массива число его измерений и размер по каждому измерению не могут быть переменными. В декларации формального массива размер массива по каждому измерению может быть как регулируемым, так и постоянным. При вычислении значения адресного выражения верхняя граница последнего измерения не используется. Именно поэтому ее можно (настоятельно рекомендуется) заменить звездочкой (*) в операторе описания формального массива. Массивы Фортрана 77 располагаются в памяти, как говорят, «по столбцам». Это означает, что быстрее всего изменяется самый левый индекс. Если в списке оператора READ (оператора PRINT) указано только имя массива, то значения элементов массива вводятся (выводятся) в том порядке, в каком элементы массива располагаются в памяти. Изменить порядок ввода-вывода элементов массива можно с помощью неявного цикла. Указывая при обращении к подпрограмме (или подпрограмме-функции) имя фактического массива, мы тем самым передаем в подпрограмму адрес ячейки памяти, с которой начинается массив. При каждом обращении к элементу формального массива значение его адресного выражения вычисляется исходя из информации о размере массива. Адрес элемента фактического массива вычисляется по этому значению и начальному адресу фактического массива. Таким образом устанавливается соответствие между элементами формального и фактического массивов с одинаковыми значениями адресного выражения. В Фортране 77 есть и другой способ передачи массивов в подпрограммы. Например, вместо имени массива в качестве фактического параметра можно использовать элемент массива. В этом случае начальным адресом массива будет адрес указанного элемента массива, и связь между формальным и фактическим массивами установится на основе этого адреса. Размер формального массива при этом не должен превышать числа оставшихся элементов фактического массива. Например, в следующем наброске программы Dimension A(100) Subroutine SUB(X,…) ……………………… Dimension X(*) Call SUB(A(10),…) ……………………… ……………………… end end фактическим аргументом при вызове подпрограммы SUB является не имя массива A, а имя элемента A(10). В подпрограмме используется формальный массив X, и связь между массивами X и A устанавливается следующим образом: X(1) соответствует A(10), X(2) соответствует A(11) и т.д. Очевидно, что X(91) соответствует A(100), и поскольку верхняя граница индекса массива X определена как (*), то X(91) – последний элемент формального массива. Фортран 77 также допускает разные размерности у формальных и фактических массивов. Например, программа вида Dimension A(5,10) Subroutine SUB(X,N,…) ……………………… Dimension X(*) Call SUB(A,50,…) ……………………… ……………………… end end устанавливает соответствие между X(1) и A(1,1), X(2) и A(2,1), … , X(K) и A(I,J), где K=I+5*(J–1). В приведенной программе фактических массив A и формальный массив X имеют одинаковое число элементов; однако такое равенство не является обязательным требованием Фортрана 77. На самом деле массив X может иметь любой размер, не превышающий размер фактического массива или размер используемой подпрограммой части массива. ПримерВ качестве примера рассмотрим программу, которая вычисляет сумму всех элементов матрицы C, где C=A*B, A – (N,M)-матрица, B – (M,K)-матрица. Элементы матриц A и B располагаются построчно в текстовых файлах a.dat и b.dat соответственно. Известно, что N*M + M*K<1000. DIMENSION MEM(1000) Open (1, file='a.dat') read (1,*) n,m1 Open (2, file='b.dat') read (1,*) m2,K If(m1.ne.m2) * stop ‘Матрицы перемножать нельзя’ m=m1 If((N+K)*m.GT.1000) * stop ‘Не хватает памяти’ CALL READAB (MEM(1), MEM(n*m+1), n, m, k) CALL UMN (MEM(1), MEM(n*m+1), n, m, k, rez) Print *,'Результат:', rez Stop End Subroutine ReadAB (A, B, n, m, k) Dimension A(m,*), B(m,*) Read (1,*) ((a(i,j), i=1,m), j=1,n) Close (1) Read (2,*) ((b(I,J), j=1,k), i=1,m) Close (2) Return End Subroutine umn (A, B, n, m, k, r) DOUBLE PRECISIOn r8, rab8 Dimension A(m,*), B(m,*) r8=0.d0 do 10 I=1,n do 10 j=1,k call scal (A(1,i), b(1,j), m, rab8) 10 r8=rab8+r8 r=r8 end subroutine scal (x, y, n, rez8) DOUBLE PRECISIOn rab8, rez8 dimension x(*), y(*) rab8=0.d0 do 1 i=1,n rab8=rab8+x(i)*y(i) 1 continue rez8=rab8 end Источники1. Катцан Г. Язык Форотран 77: Пер. с англ. – М.: Мир,1982. 2. Программирование на Фортране 77: Пер. с англ./ Дж. Ашкрофт, Р. Элдридж, Р. Полсон, Г.Уилсон. – М.: Радио и связь, 1990. |
Урок n 28 массивы Массив это множество однотипных элементов, объединённых общим именем и занимающих в компьютере определённую область памяти | Программа по формированию навыков безопасного поведения на дорогах... Одномерный массив это фиксированное количество элементов одного и того же типа, объединенных одним именем, где каждый элемент имеет... | ||
Программа по формированию навыков безопасного поведения на дорогах... Определение: Двумерный массив- это одномерный массив, у которого типом компоненты является одномерный массив | Программа как набор сегментов В лекции рассмотрены: сегментная организация памяти; cегментно-страничная организация памяти (multics, "Эльбрус", Intel x86) | ||
Сценарий открытого мероприятия «посвящение в программисты» Число 256 (два в восьмой степени) выбрано потому, что это количество чисел, которые можно выразить с помощью одного байта – единицы... | Программа по формированию навыков безопасного поведения на дорогах... Цель урока: Знакомство с понятием массивов, приемами работы с данными типа массив | ||
Реферат по дисциплине При простых последовательных обращениях к основной памяти ячейки выбираются поочередно. Таким образом, расслоение памяти позволяет... | Реферат по дисциплине Операционные Системы При простых последовательных обращениях к основной памяти ячейки выбираются поочередно. Таким образом, расслоение памяти позволяет... | ||
Программа по формированию навыков безопасного поведения на дорогах... Цели урока: образовательные – познакомить учащихся с различными устройствами памяти компьютера, рассмотреть особенности внутренней... | Урок 10 Тема: Виды памяти компьютера Цель: ознакомить учащихся с видами памяти в компьютере, сформировать представление о различиях внутренней и внешней памяти компьютера,... | ||
База данных пар химических элементов, неразличимых на некотором уровне... | Обработки информации и управления реферат «Основные понятия курса Операционные Системы» При простых последовательных обращениях к основной памяти ячейки выбираются поочередно. Таким образом, расслоение памяти позволяет... | ||
Программа по предмету «информатика и икт» Икт, в которых эти данные используются. Такое расположение материала способствует лучшему формированию в сознании учеников связи... | Проект нп «медарт» Партнерства в актуальном состоянии. По результатам на 2009 г массив аналитических описаний составляет свыше 250 000 библиографических... | ||
Программа по формированию навыков безопасного поведения на дорогах... Файл (от англ слова file досье, набор документов) это определенное количество информации (программы или данные), имеющие имя, хранящиеся... | Название тем занятий «Вспомним всех поименно» Урок памяти по Книге памяти Ульяновской области. 5-6 классы |