End subroutine

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

! нахождение максимума в файле


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



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