Вещественные числа хранятся в неформатном файле прямого доступа. Заменить максимальное значение удвоенным произведением

В этом случае корректировка производится без вспомогательного файла.

!замена 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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: