Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
64
Добавлен:
02.05.2014
Размер:
868.35 Кб
Скачать

Примечание:

Желательно избегать арифметических действий с индексами массива, особенно при циклическом вычислении, т.к. это очень замедляет выполнение программы.

Двухмерные массивы в памяти ЭВМ располагаются по столбцам:

Пример заполнения ячейки двухмерного массива:

С(1,2)=1.8

При этом в строку номер 1 и столбец номер 2 массива С занесётся число 1.8.

При выполнении программы транслятор анализирует, не превышает ли значение вызываемого индекса массива его предельного значения, описанного в операторе DIMENSION(т.е. проверяется случай, когда вызываемый индекс массива не существует – массив имеет меньшие размеры).

Так при записи С(К,М)=С(1,1)+С(1,2), которая соответствует записи:

С(4,3)=С(1,1)+С(1,2) значение С(4,3) не соответствует. При попытке выполнить такую операцию будет выдана ошибка.

При работе с двухмерными массивами есть одна особенность, которую рассмотрим на примере:

READ(5,*)К

С(К,3)=7

Пока переменную К будем задавать равную от 1 до 3, программа будет выполняться корректно. Но, если К присвоить значение 4 и больше, то ЭВМ будет не в состоянии отследить, что пределы размерности массива нарушены. Обращение будет идти к совершенно иному, и даже случайному элементу памяти ЭВМ.

Массивы можно описать ещё и с помощью операторов описания REALиINTEGER:

REAL A(10)

INTEGER K(15)

Повторное описание массивов не допускается.

Массивы могут быть: целого, вещественного, комплексного, строкового и логического типа.

Для 8-разрядных ЭВМ максимальное значение индекса массива может быть равно 32767. Например: DIMENSION A(32767), B(32767, 32767).

Вычисление определенного интеграла

Задача:

Вычислить значение определённого интеграла на отрезке от a доbпометоду прямоугольников.

Заменим вычисление интеграла вычислением суммы:

С Программа №8.

С Вычисление определённого интеграла по методу прямоугольников

1 Write(6,*)’Введите значения a,b,dx’

READ(5,*) A,B,DX

C Вычисляем количество точек на кривой

N=(B-A)/DX+1

DX=(B-A)/(N-1)

C Вычисление суммы

F=0.

Как всегда, перед вычислением суммы обнуляем ячейку памяти

DO 2 X=A,BDX,DX

Конечное значение цикла берём равным B-DX для того, чтобы не вычислить большую площадь, т.к. после окончания цикла переменная цикла имеет значение, которое больше конечного значения цикла на величину шага DX.

FX=SIN(X)**2+COS(X**2)

2 F=F+FX*DX

WRITE(6,*)’Значение интеграла равно ‘,F

PAUSE

GO TO 1

STOP

END

Оператором цикла DOпеременной циклаXприсваивается начальное значениеA. Организуются циклические вычисления в области цикла, включая оператор с меткой 2. На каждом новом цикле значениеXувеличивается на величину шагаDX. В области цикла сначала вычисляется значение функцииFX, а затем к переменной F, в которой накапливается сумма значений локальных интегралов, прибавляется значение функции, умноженное наDX. Вычисления будут проводиться до достижения переменной циклаXзначенияB-DX.В последний раз кF прибавитсяFX*DX(последняя площадка) и в области цикла вычисления завершатся.

Чем меньше величина шага DX, тем выше точность вычисления интеграла.

Задача 2:

Вычислить значение предыдущего интеграла, методом трапеции, который более точный.

Решение:

  1. Вычислим все значения функции F(x) и запомним их в массиве.

  2. Распечатаем все значения функции при соответствующем аргументе.

  3. Вычислим значение суммы для получения значения интеграла по методу трапеции.

С Программа №9

С Вычисление определённого интеграла по методу трапеции

DIMENSION FX(1000)

Задаем размерность массива заведомо большую, чем возможное количество вычислений функции

WRITE(6,*)’Введите значения величин A,B,DX

READ(5,*) A,B,DX

N=(B-A)/DX+1 Количество вычислений на отрезке

DX=(B-A)/(N-1) Уточненное значение шага

С Вычисляем значения массива

X=A Задаем начальное значение аргументу Х

DO 2 I=1,N

FX(I)=SIN(X)**2+COS(X**2) Формируем массив значений функции

WRITE(6,*)’При Х=’,X,’ значение функции равно ’,FX(I)

2 X=X+DX Задаем приращение аргумента

C Вычисление интеграла по формуле трапеции

F=0. Обнуляем ячейку памяти для накопления суммы

DO 1 K=1,N-1 Обратите внимание на количество циклов

F=F+(FX(K)+FX(K+1))/2.*DX

1 CONTINUE

WRITE(6,*)’Значение интеграла равно ’,F

PAUSE

STOP

END

Соседние файлы в папке Программирование на Фортране