Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Consp_p1.rtf
Скачиваний:
16
Добавлен:
22.08.2019
Размер:
7.3 Mб
Скачать

Способ вывода массива в два столбца:

DO 28 I=1,N,2

28 WRITE(6,*) ’A(‘,I,’)=’,A(I),’ A(‘,I+1,’)=’,A(I+1)

Примечание: если N нечетное количество элементов массива, то последнее выведенное число не будет относиться к массиву А и может оказаться совершенно случайным числом, извлеченным из памяти ЭВМ.

Фрагменты задач с одномерными массивами

Мини задача:

Найти сумму элементов одномерного массива.

S=0.

DO 30 I=1,N

30 S=S+A(I)

Вначале обнуляется ячейка S памяти ЭВМ, в которой будет содержаться значение суммы. Затем по циклу суммируется первое значение S (это 0) с первым элементом массива А и записывается в ячейку S. На втором цикле к ячейке S, в которой содержится 0+А(1) добавляется А(2) и записывается в S, и так до N-ного элемента массива.

Задача:

Определить значения μ при α=tн÷tk с шагом dt.

REAL MU(1000)

Т.к. массив называется MU (из-за буквы М ЭВМ воспримет его как целого типа), то необходимо описать его с помощью оператора REAL, при этом использовать DIMENSION не надо.

WRITE(6,*)’Введите значения TN,TK,DT

READ(5,*) TN,TK,DT

N=(TK-TN)/DT+1

DT=(TK-TN)/(N-1)

A=TN

DO 3 I=1,N

I MU(I)=ATAN(ABS(ALOG(A)/EXP(2.*A))**(1./3.))

WRITE(6,*)’При A=’,A,’ значение MU=’,MU(I)

3 A=A+DT

Блок I можно заменить блоком II

I =1

DO 3 A=TN,TK,DT

II MU(I)= ATAN(ABS(ALOG(A)/EXP(2.*A))**(1./3.))

WRITE(6,*)’При A=’,A,’ значение MU=’,MU(I)

3 I=I+1

PAUSE

STOP

END

Нахождение чётного числа M:

B=M/2.

K=M/2.

If(b.Eq.K) write(6,*)’ Число m является чётным’

Вводятся две переменные разных типов: В – вещественного типа и К – целого типа.

Затем число M дважды делится на вещественную двойку (2.). Переменная В получится чётной только тогда, когда M – целое число, иначе В будет иметь дробное значение. Затем сравниваются переменные В и К. Если они равны, то это значит, что число M – чётное.

Мини задача:

В массиве А(200) найти произведение элементов, стоящих на нечётных местах.

DIMENSION A(200)

READ(5,*) A

P=1.

DO 2 I=1,200,2

  1. P=P*A(I)

Программа будет по циклу брать только нечётные элементы (1,3,5…) и перемножать их друг с другом. Вычисление произведётся до 199 элемента и остановится, т.к. 199 – последний нечётный элемент этого массива. При I=199 завершится последний цикл. Но затем к переменной I будет добавлена величина шага, равная 2 и новое значение I=201 будет сравниваться с конечным значением 200. Поскольку I будет больше конечного значения, то осуществляется выход из цикла и управление будет передано оператору, следующему после последнего в области цикла. Т.е. оператору, следующему после метки 2. Следует обратить внимание, что после окончания цикла переменная цикла имеет значение, большее, чем конечное значение в операторе цикла DO.

Мини задача:

Найти максимальное значение элемента массива А.

DIMENSION A(200)

READ(5,*)A

B=A(1)

DO 3 I=2,200

IF(A(I).GT.B) B=A(I) или можно B=AMAX1(B,A(I))

3 CONTINUE

WRITE(6,*)’Максимальное значение массива А=’,B

Здесь организуется цикл, в котором значение второго элемента массива А сравнивается со значением первого элемента (который записан в переменной В) и, если A(I) больше, чем В, то переменной В присваивается значение A(I). При повторении цикла в переменную В будет записываться только то число из A(I), которое по значению будет больше В. По окончании цикла переменная В будет содержать максимальное значение из массива А. Аналогично оператору IF работает и строка с использованием функции AMAX1. Функция AMAX1 выбирает наибольшее значение из двух или более аргументов и присваивает его переменной В, затем цикл повторяется.

В конце выводится максимальное значение массива А – число В.

Мини задача:

Найти минимальное значение массива А и порядковый номер этого элемента.

DIMENSION A(200)

READ(5,*)A

NC=1 До начала цикла в переменную, которая будет запоминать номер цикла с минимальным значением, заносим единицу.

C=A(1)

DO 4 I=2,200

IF (A(I).GE.C) GO TO 4

Здесь применяется элемент обратной логики: в зону после оператора IF можно попасть только тогда, когда А(I)<C (что и нужно по заданию).

С Запоминание минимального элемента

C=A(I)

С Запоминание номер элемента массива, в ячейке которого находится

С минимальное число

NC=I

4 CONTINUE

WRITE(6,*)’ Минимальное значение имеет элемент под номером ',NC

WRITE(6,*)’Это значение равно ’,C

Если в массиве содержатся несколько элементов, равных по величине минимальному, то запомнится номер только первого элемента. Если использовать оператор

IF (A(I).GT.C) GO TO 4

то запомнится номер последнего минимального элемента.

Для того, чтобы напечатать номера всех элементов массива, равных минимальному, необходимо найти минимальное значение. Затем повторить цикл, в котором сравнивать это минимальное значение с каждым элементом массива. И если они равны, то напечатать номер цикла:

DO 5 I=1,200

5 IF(A(I).EQ.C) WRITE(6,*)’Номер минимального элемента =’,I

Ещё один пример нахождения номера минимального элемета массива:

L=1

DO 5 I=2,200

  1. IF(A(I).LT.A(L)) L=I

WRITE(*,*)'Минимальный элемент массива А=', A(L)

Задача:

В одномерном массиве А(200) поменять местами максимальное и минимальное значения.

Решение:

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

REAL A(200)

WRITE(6,*)’Введите количество элементов массива А и их

*значения

READ(5,*) N,(A(I),I=1,N)

AMI=A(1) Задаем начальные значения для нахождения максимума и минимума

AMA=A(1)

NMI=1 Задаем начальные значения для определения номеров циклов, когда находится максимум и минимум.

NMA=1

DO 8 I=2,N

C Блок нахождения максимального элемента и его номера методом

С обратной логики

IF(A(I).LE.AMA) GO TO 3

В эту зону после оператора IF, где происходит запоминание величины и номера максимального элемента, можно попасть только тогда, когда текущий элемент массива больше предыдущего значения АМА. Иначе управление передаётся на метку 3.

AMA=A(I)

NMA=I

C Блок нахождения минимального элемента и его номера методом

С прямой логики

3 IF(A(I).LT.AMI) AMI=A(I)

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

IF(A(I).EQ.AMI) NMI=I

Здесь запоминается номер минимального элемента только тогда, когда А(I)=AMI

  1. CONTINUE

С Найдено:

WRITE(6,*)’Максимальный элемент: А(‘,NMA,’) =’,AMA

WRITE(6,*)’Минимальный элемент: А(‘,NMI,’) =’,AMI

С Меняем местами:

A(NMI)=AMA

Значение максимума АМА записываем в элемент массива с номером NMI, где до этого находился минимальный элемент.

A(NMA)=AMI

Аналогично значение минимума АМI записываем в элемент массива с номером NMA, где до этого находился максимальный элемент.

Таким образом, максимальный и минимальный элементы поменяются местами.

PAUSE

STOP

END

Мини задача:

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

Используем дополнительно переменную С для временного хранения числа при перестановке значений.

. . . . . . . . . . . .

С=A(NMI)

A(NMI)=A(NMA)

A(NMA)=C

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]