В этом случае корректировка производится без вспомогательного файла.
!замена max на 2*max в файле прямого доступа
! n- количество вводимых чисел
Subroutine create_dir (n)
implicit none
integer, intent(in):: n
integer i
real x
open (30, file='new_dir.txt', access= 'direct', form='unformatted', recl=sizeof (x), err=21)
do i=1, n
print*,'bb cislo'
read *, x! считывание числа с клавиатуры в ОП
write(30, rec=i, err=22) x!запись из ОП в файл
Enddo
print*, ' zapis ok'
close(30)
Return
21 print*, 'ochibka open dir'
Return
22 print*, 'oshibka write'
Stop
End subroutine
Subroutine view_dir()
implicit none
integer i
real x
i=0
open (60, file='new_dir.txt', access='direct', form='unformatted', recl=4, status='old', err=21)
print*,' f ail dir'
do while(.not. eof (60))
i=i+1
read(60, rec=i) x
print '(f4.0, 2x\)', x
Enddo
close(60)
return
21 print*, 'ochibka open'
stop
end subroutine
! процедура замены
Subroutine chenc()
implicit none
integer i, imax
real x, max
open (10, file='new_dir.txt', access='direct', form='unformatted', recl=4, status='old', err=21)
! нахождение наибольшего значения и номера записи
i=1
read(10, rec=i) max
imax=i
do while (.not. eof (10))
i=i+1
read(10, rec=i) x
if (x < max) then
max=x
imax=i
endif
Enddo
read (10, rec= imax) x!прочитали из файла запись с № imax
x=2*x! увеличили в 2 раза х в ОП
write(10, rec= imax) x!записали измененный х в файл
|
|
close(10)
return
21 print *, 'ochibka open'
stop
End subroutine
Program main
implicit none
integer,parameter:: n=10
Call create_dir (n)
print*,'isx fil'
Call view_dir()
Call chenc()
print*,'posle zameni'
Call view_dir()
End
Пример
В неформатном файле прямого доступа хранятся целые числа. Поменять местами наименьшее значение с первым. Результат вывести на экран.
Subroutine create_dir(n)
implicit none
integer,intent(in)::n
integer i
real x
open (30, file='new_dir.txt', access= 'direct', form='unformatted', recl=4, status='new', err=21)
do i=1, n
print*,'bb cislo'
read *, x
write(30, rec=i, err=22)x
enddo
print*, 'zapis ok'
close(30)
return
21 print*, 'ochibka open dir'
stop
22 print*, 'oshibka write'
stop
End subroutine
Subroutine view_dir()
implicit none
integer i
real x
i=0
open (60, file='new_dir.txt', access='direct', form='unformatted', recl=4, status='old', err=21)
print*,'fail dir'
do while(.not. eof (60))
i=i+1
read(60, rec=i) x
print '(f4.0, 2x\)', x
enddo
close(60)
return
21 print*, 'ochibka open'
stop
End subroutine
Subroutine chenc()
implicit none
integer i,imin
real x,min
open (10, file='new_dir.txt', access='direct', form='unformatted', recl=4, status='old', err=21)
read(10,rec=1)min
i=1
imin=1
do while(.not.eof (10)
i=i+1
read(1, rec=i) x
if (x<min) then
min=x
imin=i
endif
enddo
read (10, rec=1) x
write(10, rec=1) min
write(10, rec= imin) x
close(10)
return
21 print*,'ochibka open'
stop
End subroutine
Program main
implicit none
integer,parameter::n=10
call create_dir (n)
print*,'isx fil'
call view _dir()
call chenc ()
print*,'posle zameni'
call view_dir ()
End