Subroutine read_number(num)
implicit none
integer,intent(in)::num
integer x
print*, 'Файл случайных чисел'
do while (.not. eof (num))
read(num, *) x!считывание очередного числа из файла
print '(I4, 1x \)', x! вывод на экран
Enddo
End subroutine
Пример.
В текстовом форматном файле ( isx.txt ) хранятся вещественные числа. Определить среднее арифметическое и количество чисел больших среднего арифметического, результат записать в другой текстовый файл ( res.txt ).
В блокноте или в редакторе CVF создадим файл вещественных чисел. Создадим проект и сохраним в нем этот файл. Используем, ранее написанную процедуру control, проверяющую существование файла. Имена входного и выходного файлов введем с клавиатуры.
Program main
implicit none
real sr
integer k
character(80) namein,nameout
print *, 'bb imj isx file'
read*, namein
print *, 'bb imj res file'
read*, nameout
call control (namein)
call avg (sr,k, namein)
call write_file (sr, k, nameout)
End program
subroutine control(s)! проверка наличия файла
implicit none
character(*), intent(in)::s
logical f
inquire(file=s, exist=f)
if (f)then
print*, ‘ файл существует'
else
stop ' сначала создайте файл'
! конец работы, если нет файла
endif
End subroutine control
Subroutine avg (sr, k, name)
|
|
implicit none
character(*),intent(in)::name
real, intent(out):: sr
integer, intent(out)::k
real x, s
integer n
open(2, file=name)
n=0
s=0
do while (.not. eof (2))
read(2,*)x
n=n+1
s=s+x
enddo
sr=s/n
k=0
rewind(2)
do while (.not. eof(2))
read(2,*) x
if(x > sr) k=k+1
enddo
close(2)
End subroutine
Subroutine write_file(sr, k, name)
integer, intent(in)::k
real,intent(in)::sr
character,intent(in)::name
open(3, file=name)
write(3, '(5x, A, i3, 2x, A, F4.2)') 'kol=', k, ‘sr=’, sr
close(3)
End subroutine
Пример
Отредактировать исходный файл удалением из него положительных значений.
Program main
Program main
Implicit None
integer x
open(10, file='isxx.txt')
open(20)!, file='wsp.txt', status='scratch')
do while (.not. eof (10))
read(10,*)x
if(x < 0) write (20,*)x
enddo
rewind(10)
rewind(20)
do while (.not. eof (20))
read(20,*) x
write(10,*) x
enddo
close(10)
close(20)
end
Пример
Отредактировать заданный текстовый форматный файл, заменив все максимумы на 999. Количество замен записать в конец файла.
Program main
implicit none
integer max, res, max_el, work
character(80) namein, nameout
print *, 'bb imj isx file'
read*, namein
call control_1 (namein)
max= max_el (namein)
res=work (namein, max)
Call write_file (namein, res)
End program
subroutine control_1(s)!проверка наличия файла
implicit none
character(*), intent(in)::s
logical f
inquire(file=s, exist=f)
if (f)then
print*, ‘файл существует’
else
stop 'создайте файл’
endif
End subroutine control_1
! нахождение максимума в файле