- •Лекция-4 основы программирования на языке фортран
- •§ 1.14. Форматный ввод-вывод данных
- •1.14.1. Преобразование данных. Оператор format.
- •1.14.2. Дескрипторы данных.
- •1.14.3. Дескрипторы управления.
- •1.14.4. О еще одном способе задания спецификации формата.
- •§ 1.15. Массивы
- •1.15.1. Понятие о массивах.
- •1.15.2. Характеристики массивов.
- •1.15.3. Способы объявления массивов.
- •1.15.4. Размещение элементов массива в памяти компьютера.
- •1.15.5. Способы инициализации массивов.
- •1.15.6. Одновременное объявление объектов разной формы.
- •1.15.7. Ввод-вывод массивов.
- •1.15.8. Некоторые примеры простейших программ с использованием массивов.
1.15.8. Некоторые примеры простейших программ с использованием массивов.
Руководствуясь методическими соображениями, рассмотрим в начале примеры решения простейших задач на массивы с использованием, главным образом, традиционных средств языка стандарта FORTRAN 77.
Пример 1.15.1. Дан массив A(m), m15 . Переписать элементы массива в обратном порядке и найти их сумму. Вывести на печать старый массив, новый массив и полученную сумму.
Реализующая программа на языке Фортран имеет вид:
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), m25. Из массива 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), m12. Вывести на печать исходный массив, а также величину и номер его минимального положительного элемента.
Реализующая программа на языке Фортран имеет вид:
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), m15. Все элементы с четными номерами удвоить, а с нечетными – заменить нулями. Вывести на печать исходный и переформированный массив.
Реализующая программа на языке Фортран имеет вид:
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), m17. Найти произведение всех элементов, предшествующих первой нулевой компоненте, и сумму последующих. Вывести на печать исходный массив и полученные произведение и сумму.
Реализующая программа на языке Фортран имеет вид:
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), m17. Вычислить сумму 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), m12 . Сформировать массив 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), m10. Определить номер 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), m30. Расположить его элементы так, чтобы в начале шли положительные, а потом все остальные. Исходный и переформированный массивы вывести на печать.
Реализующая программа на языке Фортран имеет вид:
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