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

1.15.8. Некоторые примеры простейших программ с использованием массивов.

Руководствуясь методическими соображениями, рассмотрим в начале примеры решения простейших задач на массивы с использованием, главным образом, традиционных средств языка стандарта FORTRAN 77.

Пример 1.15.1. Дан массив A(m), m15 . Переписать элементы массива в обратном порядке и найти их сумму. Вывести на печать старый массив, новый массив и полученную сумму.

Реализующая программа на языке Фортран имеет вид:

program sample_1_15_1

real(4), dimension(15) :: a,an

real(4) :: s

integer(4) :: m,i

print *,’ Vvedite kolichestvo elementov massiva’

read *,m

print *,’ Vvedite massiv a’

read *,(a(i),i=1,m)

print 1,(a(i),i=1,m)

1 format(/2x,’Massiv a’/(5g12.4))

s=0.

do i=1,m

an(i)=a(m-i+1)

s=s+an(i)

end do

print 2,(an(i),i=1,m)

2 format(/2x,’Noviy massiv a’/(5g12.4))

print 3,s

3 format(/2x,’Summa elementov massiva s=’,g12.4)

End

Результаты расчета (при m=10):

Massiv a

2.000 4.000 6.000 8.000 10.00

12.00 14.00 16.00 18.00 20.00

Noviy massiv a

20.00 18.00 16.00 14.00 12.00

10.00 8.000 6.000 4.000 2.000

Summa elementov massiva s= 110.0

Пример 1.15.2. Дан массив D(m), m25. Из массива D переписать в массив T элементы с нечетными номерами. Вывести на печать элементы массива D, массива T, сумму и количество элементов массива T.

Реализующая программа на языке Фортран имеет вид:

program sample_1_15_2

real(4), dimension(25) :: d,t(13)

real(4) :: st=0

integer(4) :: m,i,kt=0

print *,’ Vvedite kolichestvo elementov massiva’

read *,m

print *,’ Vvedite massiv d’

read *,(d(i),i=1,m)

print 1,(d(i),i=1,m)

1 format(/2x,’Massiv d’/(5g12.4))

do i=1,m,2

kt=kt+1

t(kt)=d(i)

st=st+t(kt)

end do

print 2,(t(i),i=1,kt)

2 format(/2x,’Massiv t’/(5g12.4))

print 3,kt,st

3 format(/2x,’Kolichestvo elementov massiva t kt=’,i2,&

/2x,’Summa elementov massiva t st=’,g12.4)

end

Результаты расчета (при m=11):

Massiv d

3.000 4.000 2.000 1.000 12.00

-4.000 9.000 7.000 2.000 9.000

10.00

Massiv t

3.000 2.000 12.00 9.000 2.000

10.00

Kolichestvo elementov massiva t kt= 6

Summa elementov massiva t st= 38.00

Пример 1.15.3. Дан массив A(m), m12. Вывести на печать исходный массив, а также величину и номер его минимального положительного элемента.

Реализующая программа на языке Фортран имеет вид:

program sample_1_15_3

real(4), dimension(12) :: a

real(4) :: apmin

integer(4) :: m,i,id=0,ipmin

print *,’ Vvedite kolichestvo elementov massiva’

read *,m

print *,’ Vvedite massiv a’

read *,(a(i),i=1,m)

print 1,(a(i),i=1,m)

1 format(/2x,’Massiv a’/(5g12.4))

do i=1,m

if(a(i)>0.and.id==0) then

id=1

apmin=a(i)

ipmin=i

end if

if(a(i)>0.and.id==1.and.a(i)<apmin) then

apmin=a(i)

ipmin=i

end if

end do

if(id==0) then

print 2

2 format(/2x,’Polozhitelnikh elementov v massive a net’

else

print 3,apmin,ipmin

3 format(/2x,’Velechina minimalnogo polozhitelnogo elementa &

&massiva apmin=’,g12.4,&

/2x,’Nomer minimalnogo polozhitelnogo elementa &

&massiva ipmin=’,i2)

end if

end

Результаты расчета (при m=7):

Massiv a

-1.000 4.000 2.000 11.00 12.00

5.000 3.000

Velechina minimalnogo polozhitelnogo elementa massiva apmin= 2.000

Nomer minimalnogo polozhitelnogo elementa massiva ipmin= 3

Пример 1.15.4. Дан массив B(m), m15. Все элементы с четными номерами удвоить, а с нечетными – заменить нулями. Вывести на печать исходный и переформированный массив.

Реализующая программа на языке Фортран имеет вид:

program sample_1_15_4

real(4), dimension(15) :: b

integer(4) :: m,i

print *,’ Vvedite kolichestvo elementov massiva’

read *,m

print *,’ Vvedite massiv b’

read *,(b(i),i=1,m)

print 1,(b(i),i=1,m)

1 format(/2x,’Massiv b’,/(5g12.4))

do i=1,m

if(i/2*2==i) b(i)=2.*b(i)

if(i/2*2/=i) b(i)=0.

end do

print 2,(b(i),i=1,m)

2 format(/2x,’Pereformirovanniy massiv b’,/(5g12.4))

End

Результаты расчета (при m=8):

Massiv b

2.000 5.000 3.000 1.000 10.00

12.00 7.000 7.000

Pereformirovanniy massiv b

0.000 10.00 0.000 2.000 0.000

24.00 0.000 14.00

Пример 1.15.5. Дан массив C(m), m17. Найти произведение всех элементов, предшествующих первой нулевой компоненте, и сумму последующих. Вывести на печать исходный массив и полученные произведение и сумму.

Реализующая программа на языке Фортран имеет вид:

program sample_1_15_5

real(4), dimension(17) :: c

real(4) :: p=1,s=0

integer(4) :: m,i,k=0

print *,’ Vvedite kolichestvo elementov massiva’

read *,m

print *,’ Vvedite massiv c’

read *,(c(i),i=1,m)

print 1,(c(i),i=1,m)

1 format(/2x,’Massiv c’,/(5g12.4))

do i=1,m

if(c(i)==0.) then

k=i

exit

end if

p=p*c(i)

end do

if(k==0) then

print 2,p

2 format(/2x,’Nulevikh elementov v massive c net’,&

/2x,’Proizvedenie elementov massiva c p=’,g12.4)

else

do i=k+1,m

s=s+c(i)

end do

print 3,p,s

3 format(/2x,’Proizvedenie elementov massiva c &

&predshevstvuyuschikh nulevoy komponente’,&

/2x,’p=’,g12.4,&

/2x,’Summa elementov massiva c sleduyuschikh &

&za nulevoy komponentoy’,&

/2x,’s=’,g12.4)

end if

end

Результаты расчета (при m=10):

Massiv c

1.000 4.000 3.000 2.000 0.000

5.000 7.000 0.000 9.000 2.000

Proizvedenie elementov massiva c predshevstvuyuschikh nulevoy komponente

p= 24.00

Summa elementov massiva t sleduyuschikh za nulevoy komponentoy

s= 23.00

Пример 1.15.6. Дан массив C(m), m17. Вычислить сумму S элементов с нечетными номерами, удовлетворяющих условию Ci<1. Вывести на печать исходный массив и полученную сумму S.

Реализующая программа на языке Фортран имеет вид:

program sample_1_15_6

real(4), dimension(17) :: c

real(4) :: s=0

integer(4) :: m,i

print *,’ Vvedite kolichestvo elementov massiva’

read *,m

print *,’ Vvedite massiv c’

read *,(c(i),i=1,m)

print 1,(c(i),i=1,m)

1 format(/2x,’Massiv c’,/(5g12.4))

do i=1,m,2

if(abs(c(i))<1.) s=s+c(i)

end do

print 2,s

2 format(/2x,’Iskomaya summa s=’,g12.4)

end

Результаты расчета (при m=12):

Massiv c

0.4000 0.1000E-01 5.000 4.000 0.8000E-01

-0.3000E-01 3.000 2.000 -0.5000E-01 1.000

3.000 2.000

Iskomaya summa s= 0.4300

Пример 1.15.7. Даны массивы A(m) и B(m), m12 . Сформировать массив C по правилу: C1 = A1, C2 = B1, C3 = A2, C4 = B2 и т.д. Вывести на печать исходные массивы A и B и сформированный массив C.

Реализующая программа на языке Фортран имеет вид:

program sample_1_15_7

real(4), dimension(12) :: a,b,c(24)

integer(4) :: m,i

print *,’ Vvedite kolichestvo elementov massiva a i b’

read *,m

print *,’ Vvedite massiv a’

read *,(a(i),i=1,m)

print *,’ Vvedite massiv b’

read *,(b(i),i=1,m)

print 1,(a(i),i=1,m)

1 format(/2x,’Massiv a’,/(5g12.4))

print 2,(b(i),i=1,m)

2 format(/2x,’Massiv b’,/(5g12.4))

do i=1,m

c(2*i-1)=a(i)

c(2*i)=b(i)

end do

print 3,(c(i),i=1,2*m)

3 format(/2x,’Massiv c’,/(5g12.4))

end

Результаты расчета (при m=7):

Massiv a

1.000 3.000 5.000 6.000 7.000

8.000 11.00

Massiv b

2.000 6.000 4.000 3.000 8.000

9.000 21.00

Massiv c

1.000 2.000 3.000 6.000 5.000

4.000 6.000 3.000 7.000 8.000

8.000 9.000 11.00 21.00

Пример 1.15.8. Дан массив A(m), m10. Определить номер NM первого отрицательного элемента и номер NZ первого нулевого элемента. Вывести на печать исходный массив и величины NM и NZ.

Реализующая программа на языке Фортран имеет вид:

program sample_2_16_8

real(4), dimension(10) :: a

integer(4) :: m,i,nm=0,nz=0

print *,’ Vvedite kolichestvo elementov massiva’

read *,m

print *,’ Vvedite massiv a’

read *,(a(i),i=1,m)

print 1,(a(i),i=1,m)

1 format(/2x,’Massiv a’,/(5g12.4))

do i=1,m

if(nm==0.and.a(i)<0.) nm=i

if(nz==0.and.a(i)==0.) nz=i

end do

if(nm==0) then

print 2

2 format(/2x,’Otritsatelnikh elementov v massive net’)

else

print 3,nm

3 format(/2x,’Nomer pervogo otritsatelnogo elementa massiva &

&nm=’,i2)

end if

if(nz==0) then

print 4

4 format(/2x,’Nulevikh elementov v massive net’)

else

print 5,nz

5 format(/2x,’Nomer pervogo nulevogo elementa massiva nz=’,i2)

end if

end

Результаты расчета (при m=8):

Massiv a

1.000 2.000 0.000 -1.000 2.000

-5.000 0.000 7.000

Nomer pervogo otritsatelnogo elementa massiva nm= 4

Nomer pervogo nulevogo elementa massiva nz= 3

Пример 1.15.9. Дан массив C(m), m30. Расположить его элементы так, чтобы в начале шли положительные, а потом все остальные. Исходный и переформированный массивы вывести на печать.

Реализующая программа на языке Фортран имеет вид:

program sample_1_15_9

real(4), dimension(30) :: c,cn

integer(4) :: m,i,k1=0,k2=0

print *,’ Vvedite kolichestvo elementov massiva’

read *,m

print *,’ Vvedite massiv c’

read *,(c(i),i=1,m)

print 1,(c(i),i=1,m)

1 format(/2x,’Massiv c’,/(5g12.4))

do i=1,m

if(c(i)>0.) then

k1=k1+1

cn(k1)=c(i)

end if

end do

if(k1==0) then

print 2

2 format(/2x,’Polozhitelnikh elementov v massive c net’)

else

do i=1,m

if(c(i)<=0.) then

k2=k2+1

cn(k1+k2)=c(i)

end if

end do

print 3,(cn(i),i=1,m)

3 format(/2x,’Pereformirovanniy massiv c’,/(5g12.4))

end if

end

Результаты расчета (при m=11):

Massiv c

-4.000 3.000 5.000 7.000 -3.000

2.000 -8.000 11.00 -0.5000 0.000

1.000

Pereformirovanniy massiv c

3.000 5.000 7.000 2.000 11.00

1.000 -4.000 -3.000 -8.000 -0.5000

0.000

22