Главная Обратная связь

Дисциплины:

Архитектура (936)
Биология (6393)
География (744)
История (25)
Компьютеры (1497)
Кулинария (2184)
Культура (3938)
Литература (5778)
Математика (5918)
Медицина (9278)
Механика (2776)
Образование (13883)
Политика (26404)
Правоведение (321)
Психология (56518)
Религия (1833)
Социология (23400)
Спорт (2350)
Строительство (17942)
Технология (5741)
Транспорт (14634)
Физика (1043)
Философия (440)
Финансы (17336)
Химия (4931)
Экология (6055)
Экономика (9200)
Электроника (7621)






Пример выполнения задания лабораторной работы № 3



Тема: Работа с одномерными массивами.

Цель работы: Составление программы для обработки одномерных массивов.

Теория: Краткие сведения из теории ………

 

Задание: Составить блок-схему (рис.7) и программу вычисления суммы положительных элементов из массива A (N), используя форматный вывод. (N ≤ 20)

 

PROGRAMM JKL

DIMENSION A (20)

*Irina 1418z

PRINT *, ' введите N '

* N- точное количество элементов ≤ 20

READ (5,*) N

S = 0 K = 0
PRINT *, ' введите элементы массива А'

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

S = 0

K = 0

D0 2 I = 1,N

 
 


IF (A(I).LE.0) GOTO 2

да S = S+A(I)

K= K+1

нет 2 CONTINUE

S = S + A (I)
PRINT 3, K, S

3 FORMAT ( ' K=,I 2, /’S=',F7.2)

K = K + 1
END

-1 0 –5 3 4 К = 2 S = 7.00

Рис. 7

 

РАЗДЕЛ IV. Лабораторная работа № 4

Дополнение к оператору цикла DO

Оператор цикла, общая форма которого имеет вид:DO n I=K1, K2, K3

где I – управляющая переменная цикла

K1 – начальное значение управляющей переменной

K2– конечное значение управляющей переменной

K3 – шаг изменения управляющей переменной.

 

Причем I, K1, K2, K3 – целые переменные или выражения.

В последних версиях Фортрана все эти величины допускается принимать вещественными. Это значительно упрощает многие расчеты, например, табуляцию функции.

Пример: Протабулировать функцию у = 1 – х + х2/2 в интервале 0.1…1.0. Величины

Х и У будут печататься в виде таблицы. Поэтому до начала печати Х и У следует распечатать шапку таблицы. Тогда программа может иметь вид:

 

PROGRAM TABL

PRINT 1

1 FORMAT (10X, ‘X’, 10X, ‘Y’)

DO 6 X = 0.1, 1., 0.1

Y = 1. – X + X*X/2.

PRINT 5, X, Y

5 FORMAT (10X, F5.2, 6X, F5.2)

6 CONTINUE

END

 

Если бы параметры цикла были целыми, то операторы, входящие в цикл, пришлось бы усложнить.

 

Двумерные массивы

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

 

a11 a12 a13 ………………a1 n

a21 a22 a23 ………………a2 n

a31 a32 a33 ………………a3 n

….………………………………………….

am1 am2 am3 ………………am n

 

Прямоугольная таблица с m строками и nстолбцами (m*n) в математике называется матрицей, а в программировании – двумерным массивом. Элементы таблицы выписываются строка за строкой. Элемент массива A(M,N)или A(I, J) содержит значение элемента матрицы аmnили аij. Первое индексное выражение Mили I указывает строку, а второе индексное выражение N или J – столбец, на пересечении которых находится элемент. Когда компилятор распределяет ячейки памяти ЭВМ для хранения двумерного массива, он резервирует в памяти непрерывную последовательность ячеек общим числом m*n. Элементы а11, а21, а31…аm1 размещаются в позициях с 1ой по mю; элементы а12, а22, а32…аm2 – в позициях с m+1 по 2mи т.д. Такой порядок размещения элементов известен как размещение “по столбцам”, следовательно, матрицы размещаются в памяти по столбцам. Программист в большинстве случаев использования двумерных массивов может не принимать во внимание это обстоятельство. Однако в некоторых случаях, о которых будет упомянуто в дальнейшем, это может быть очень важно.



Например, оператор DIMENSION А(3,2) выделяет память для хранения двумерного массива А, элементы которого распределяются в памяти следующим образом :

А(1, 1), А(2, 1), А(3, 1), А(1, 2), А(2, 2), А(3, 2). Здесь нижняя граница каждого индекса по умолчанию равна единице, так как она не заданна явно. Пример оператора с явным заданием нижней границы индекса:

DIMENSION А(0: 3, 0: 1).

Этот оператор выделяет память для хранения двумерного массива А, элементы которого хранятся в следующем порядке:

А(0, 0), А(1, 0), А(2, 0), А(3, 0), А(0, 1), А(1, 1), А(2, 1), А(3, 1).

 

4.2.1 Вод/вывод елементов матрицы

 

Ввод элементов матрицы: DIMENSION A(20,20)

DIMENSION A(20,20) ЛИБО READ *, M, N

READ (5, *) M, N DO 11 I=1, M

READ (5, *) ((A (I, J), J = 1, N), I =1, M) READ *, (А(I,J), J=1, N)

11 CONTINUE

 

Здесь должно выполняться условие М ≤ 20, и N≤ 20. Кроме вложенного неявного цикла, возможен ввод с использованием явного оператора цикла.



Вывод элементов матрицы:

PRINT*, ((A (I, J), J = 1, N), I =1, M)

* Либо с автоматическим созданием файла на диске для вывода данных:

WRITE (7,1) ((A (I, J), J = 1, N), I =1, M)

1 FORMAT (5X, 4F10.3)

 

Вложенные циклы

Оператор цикла может содержать в себе другие операторы цикла: вложенные (или внутренние). В таком случае области вложенных операторов циклов должны полностью покрываться внешним циклом. Управляющие переменные операторов внутренних циклов должны быть различными, а их области не должны перекрывать друг друга. Эти положения можно изобразить схематично (рис.8):

 

DO 100 I = 1, 20,2 DO 80 I=2, 20, 2 DO 80 I=1,10

……………………. …………………… ………………

……………………. DO 95 J = 1,7 ………………

DO 90 K = 1, 5 …………………… DO 60 J=1,25

……………………. 95 CONTINUE ………………

90 ONTINUE …………………… 50 CONTINUE

…………………… DO 80 K = I, N ………………

…………………… …………………… 60 CONTINUE

100 CONTINUE 80 CONTINUE

 

Правильная организация циклов Неправильная–циклы перекрываются.

Рис. 8

 

Конечный оператор цикла не может быть оператором: перехода, цикла, условным оператором, возврата, паузы и останова. Если цикл, по условию задачи, должен быть закончен одним из “запрещенных ” операторов, то в качестве конечного оператора цикла рекомендуется использовать оператор продолжения CONTINUE, разместив его после “запрещенного” оператора.

Пример: вычислить сумму элементов каждого столбца прямоугольной матрицы. Суммы разметить в массиве S.

В программе необходимо оператором DIMENSION зарезервировать место в памяти ЭВМ для массивов А и S, т.е. двумерный массив А(50, 40)и одномерный массив S(40). Тогда программа может иметь следующий вид:

 

PROGRAM SUMSTO

DIMENSION A (50,40), S (40)

PRINT*, ‘Введите количество строк N и столбцов К в массиве А’

READ (5, *) N, K

PRINT*, ‘Введите элементы массива А по строкам ’

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

PRINT*, ((A(I,J), J=1,K), I=1,N)

* PRINT 50, ((A(I,J), J=1,K), I=1,N)

* 50 FORMAT(2X, ' ИСХОДНАЯ МАТРИЦА A ' , / (2X,3F6.1))

J K I     N    
DO 15 I = 1, K

SUM = 0.

DO 10 J=1, N

SUM =SUM + A (J, I)

10 CONTINUE

S (I) =SUM

15 CONTINUE

PRINT *, ‘ СУММЫ ЭЛЕМЕНТОВ СТОЛБЦОВ’

PRINT*,‘ S (I)= ’, (S(I), I=1,K)

END

 

В этой программе ввод элементов матрицы осуществляется по строкам, оператором ввода: READ(5, *) ((A (I, J), J=1,K), I=1,N) (неявный цикл). Затем занулением создается ячейка SUM, для суммирования элементов каждого столбца, что выполняется вложенным циклом DO. Сумма элементов каждого столбца заносится в массив S, в результате работы внешнего цикла DO. Когда все столбцы просуммированы и занесены в массив S, он (его содержимое) выводится на печать.

 


Эта страница нарушает авторские права

allrefrs.ru - 2019 год. Все права принадлежат их авторам!