Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема 4.doc
Скачиваний:
2
Добавлен:
04.11.2018
Размер:
169.47 Кб
Скачать

4.4 Примеры решения задач с использованием одномерных массивов

Рассмотрим использование одномерных массивов на примере программы табулирования функции на отрезке [-2; 2] с шагом =0,5

Program tab

Integer, parameter :: k=100

Real, dimension(1:k):: x, y

real h, a, b

integer i,n

Write(*,’(a,$)’),‘Введите начало промежутка a=’

Read(*,*),a

Write(*,’(a,$)’),‘Введите конец промежутка b=’

Read(*,*),b

Write(*,’(a,$)’),‘Введите шаг h=’

Read(*,*),h

X(1)=a

n= (b-a)/h+1

do i=1, n

If (x(i)>=0) then

Y(i)=sqrt(x(i))

Write(*,’(a,i1,a,f5.2,a,i1,a,f4.2)’),‘x(’,I,’)=’,x(i),’ y(’,I,’)=’,y(i)

Else

Write(*,’(a,i1,a,f5.2,a)’),‘x(’,I,’)=’,x(i),‘ Y не существует’

X(i)=x(i)+h;

Endif

enddo

read*

End Program tab

Результат работы программы:

Введите начало промежутка a=-2

Введите начало промежутка b=2

Введите шаг h=0.5

X(1)=-2.00 Y не существует

X(2)=-1.50 Y не существует

X(3)=-1.00 Y не существует

X(4)=-0.50 Y не существует

X(5)= 0.00 y(5)=0.00

X(6)= 0.50 y(6)=0.71

X(7)= 1.00 y(7)=1.00

X(8)= 1.50 y(8)=1.22

X(9)= 2.00 y(9)=1.41

Часто решаемые задачи с массивами – нахождение суммы или произведения элементов массива. особенностью таких расчетов является то, что вводятся специальные переменные:

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

Program summa_massiva

INTEGER:: a(7)=(/1,2,3,4,5,6,7/)

Integer k, s

S=0 ! переменная накапливающая сумму

Do k=1,7

S=s+a(k)

Enddo

Print ‘(a,i2)’, ‘Vsego = ’, s

read*

End Program summa_massiva

Результат работы программы:

Vsego =28;

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

Program proizv_massiva

INTEGER:: a(7)=(/1,2,3,4,5,6,7/)

Integer k, p

p=1 ! переменная накапливающая произведение

Do k=1,7

p=p*a(k)

Enddo

Print ‘(a,i5)’, ‘Vsego = ’, p

read*

End Program proizv_massiva

Результат работы программы:

Vsego = 5040

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

Пусть требуется найти произведение элементов массива кратных пяти.

Если одно число кратно другому, э то значит что остаток от деления первого числа на второе равен 0. Например 10 кратно пяти или mod(10, 5) = = 0.

Program proizv_kratnost

INTEGER:: a(7)=(/1,10,3,4,5,6,15/)

Integer k, p

p=1 ! переменная накапливающая произведение

Do k=1,7

If (mod(a(k),5)==0) then

p=p*a(k) ! произведение выполняется только если условие !истинно

endif

Enddo

Print ‘(a,i5)’, ‘Vsego = ’, p

read*

End Program proizv_kratnost

Среди значений массива есть только три числа удовлетворяющих этому условию: a(2)=10, a(5)=5, a(7)=15. Т.е. имеем 10515=750

Результат работы программы:

Vsego = 750

Условия могут накладываться не только на значения элемента, но и на значение индекса.

Есть два массива целых чисел a и b размером 5. Сформировать массив С такого же размера, в котором элементы с четными индексами равны соответствующим элементам массива A, а нечетные массива В. (как показано на рис. 4.3).

Рис. 4.3. Условие формирования элементов массива С

Четным называется значение кратное двум. То есть mod(число, 2)= =0, и нечетным если mod(число, 2)= =1.

Представим программную реализацию формирования массива С.

Program massivС

Integer, parameter :: k=5

INTEGER:: a(k)=(/1,2,3,4,5/), b(k)=(/6,7,8,9,10/)

Integer c(k)

Integer i

Do i=1,K

If (mod(I,2)==0) then

C(i)=b(i)

Else

C(i)=a(i)

endif

Enddo

Print *, ‘Elementi massiva C: ’, c

read*

End Program massivС

Результат работы программы:

Elementi massiva C 1 7 3 9 5

Часто в решения задач сводятся к поиску наименьшего/наибольшего элемента в одномерном массиве.

Решаются такие задачи так же с помощью задания вспомогательной переменной. Делается предположение, что первый элемент массива является и максимальным и/или минимальным и его значение присваивается специально отведенным для этого переменным smax (для максимального элемента) и smin (для минимального элемента). Далее в цикле smin и smix сравниваются с текущим элементом. Если обнаруживается, что текущий элемент больше smax, то smax присваивается значение этого элемента. Если обнаруживается, что текущий элемент меньше smin, то smin присваивается значение этого элемента. Таким образом, после перебора всех элементов массива в переменных smin и smax окажутся искомые значения.

Program max_min

integer, parameter :: n=10

integer s(n)

integer :: i, smax, smin

s = (/10, 20, -19, 30, 2, 12, 14, 80, 90 100/)

write(*, “(100(i4))”), (s(i), i=1,n)

smax = s(1)

smin=s(1)

do i=1,n

if (s(i)<smin) smin=s(i)

if (s(i)<smax) smax=s(i)

enddo

write(*,100), “Maximum…”, smax

write(*,100), “Minimum…”, smin

100 format(a,i4)

end

Результат работы программы:

10 20 -19 30 2 12 14 80 90 100

Maximum… 100

Minimum… -19

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