Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР-08. Подпрограммы (FORTRAN).doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
328 Кб
Скачать
☆

Лабораторная работа № 7 подпрограммы

Выполнил

ст. 211 гр.

Иванов А.П.

Проверил

доцент каф. 304

Скоб Ю.А.

Цель работы – уяснение общего и основных различий между процедурой и функцией; составление программ с использованием процедур; решение задач, связанных с операциями над массивами.

Постановка задачи:

  1. Выполнить задание с использованием процедур.

  2. Исходные данные (кроме размерности массивов) ввести из текстового файла, который представить вместе с листингом программы и результатами счета. Ввод данных оформить как процедуру.

  3. Решение задачи оформить в виде процедуры.

  4. Исходную матрицу и результаты вывести в другой текстовый файл. Вывод данных в файл оформить в виде процедуры.

  5. Весь обмен данными между основной программой и процедурами организовать через список формальных/фактических параметров.

Вариант № 1

Найти максимальный и минимальный элементы и разность между ними для массива

Содержание работы

  1. Текст программы:

! Lab8_V1.f90

! FUNCTIONS:

! Lab8_V1 - Entry point of console application.

!****************************************************************************

! PROGRAM: Lab8_V1

! PURPOSE: Entry point for the console application.

!****************************************************************************

SUBROUTINE ReadFromFile(A1,Mmax,m1)

INTEGER A1(Mmax,Mmax),m1,Mmax

integer i,j ! счетчики по строкам, столбцам

integer:: fi=1 ! Номер устройства ввода

! Файловой переменной fi назначается файл Lab8_V1.txt

open(fi,file='Lab8_V1.txt') ! Текстовый файл открывается

read(fi,*) m1 ! Чтение количества строк и столбцов

do i=1,m1 ! цикл по строкам

read(fi,*) (A1(i,j),j=1,m1) ! чтение массива по строкам

enddo

close(fi) ! Закрывается прочитанный файл fi

END SUBROUTINE ReadFromFile

!-------------------------------------------------

SUBROUTINE MaxMin(a1,m1,min,max,r,Mmax)

INTEGER a1(Mmax,Mmax),m1,min,max,r

integer i,j ! счетчики по строкам, столбцам

! поиск минимального и максимального элементов

min=a1(1,1) ! начальное значение минимального элемента

max=a1(1,1) ! начальное значение максимального элемента

do j=1,m1 ! цикл по столбцам

do i=1,m1 ! цикл по строкам

if (a1(i,j)<min) min=a1(i,j) ! проверка на минимум

if (a1(i,j)>max) max=a1(i,j) ! проверка на максимум

enddo

enddo

r=max-min ! разность между максимальным и минимальным

END SUBROUTINE MaxMin

!-------------------------------------------------

SUBROUTINE SaveToFile(a,m,min,max,r,Mmax)

INTEGER a(Mmax,Mmax),m,min,max,r

integer i,j ! счетчики по строкам, столбцам

integer::fo=2 ! Номера устройства вывода

! Файловой переменной fo назначается файл Lab8_V1.out

open(fo,file='Lab8_V1.out') ! Текстовый файл fo открывается

write(fo,*) '-----------------------------------'

write(fo,*) 'Check elements of array A:'

do i=1,m

write(fo,'(100i5)') (a(i,j),j=1,m) ! чтение массива по строкам

enddo

write(fo,*) '-----------------------------------'

write(fo,'(2(a,i4))') ' Amin=',min,' Amax=',max

write(fo,'(a,i4)') ' Result: R=',r ! вывод результата на экран

close(fo) ! Закрывается файл fo,созданный программой

END SUBROUTINE SaveToFile

!-------------------------------------------------

SUBROUTINE ShowToScreen(a,m,min,max,r,Mmax)

INTEGER a(Mmax,Mmax),m,min,max,r

! Вывод массива на экран - проверка правильности ввода

print *,'-----------------------------------'

print *, 'Check elements of array A:'

do i=1,m

write(*,'(100i5)') (A(i,j),j=1,m) ! вывод по строкам

enddo

print *,'-----------------------------------'

write(*,'(2(a,i4))') ' Amin=',min,' Amax=',max

write(*,'(a,i4)') ' Result: R=',r ! вывод результата на экран

END SUBROUTINE ShowToScreen

!-------------------------------------------------

program Lab8_V1

implicit none

! ----- Объявления переменных -----

integer,parameter:: Mmax=100 ! максимальное количество строк-столбцов

integer m ! количество строк и столбцов

integer A(Mmax,Mmax) ! массив А

integer R ! искомая разность

integer Amax ! максимальный элемент

integer Amin ! минимальный элемент

integer i,j ! счетчики по строкам, столбцам

! ----- Выполняемые операторы -----

CALL ReadFromFile(A,Mmax,m) ! Вводим данные из файла

CALL MaxMin(A,m,Amin,Amax,R,Mmax) ! Расчет результатов

CALL SaveToFile(A,m,Amin,Amax,R,Mmax) ! Выводим информацию в файл

CALL ShowToScreen(A,m,Amin,Amax,R,Mmax) ! Вывод информации на экран

end program Lab8_V1

  1. Файл исходных данных.

  1. Окно консольного приложения с результатами расчета.

  1. Файл с результатами расчета.

  1. Выводы:

  • изучены общие характеристики и основные различия между подпрограммой и функцией;

  • составлена программа с использованием подпрограмм;

  • решена задача, связанная с операциями над массивами;

  • получены навыки передачи массивов в качестве параметров в подпрограммы.