- •Типовой вариант
- •Порядок выполнения работы
- •Варианты заданий взять из лабораторной работы № 6 (для задачи 2).
- •Лабораторная работа № 7 подпрограммы
- •Цель работы – уяснение общего и основных различий между процедурой и функцией; составление программ с использованием процедур; решение задач, связанных с операциями над массивами.
- •Вариант № 1
- •Содержание работы
- •Подпрограммы (Контрольные вопросы – правильные варианты)
Лабораторная работа № 7 подпрограммы
Выполнил |
ст. 211 гр. |
Иванов А.П. |
|
Проверил |
доцент каф. 304 |
Скоб Ю.А. |
|
Цель работы – уяснение общего и основных различий между процедурой и функцией; составление программ с использованием процедур; решение задач, связанных с операциями над массивами.
Постановка задачи:
Выполнить задание с использованием процедур.
Исходные данные (кроме размерности массивов) ввести из текстового файла, который представить вместе с листингом программы и результатами счета. Ввод данных оформить как процедуру.
Решение задачи оформить в виде процедуры.
Исходную матрицу и результаты вывести в другой текстовый файл. Вывод данных в файл оформить в виде процедуры.
Весь обмен данными между основной программой и процедурами организовать через список формальных/фактических параметров.
Вариант № 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
Файл исходных данных.
Окно консольного приложения с результатами расчета.
Файл с результатами расчета.
Выводы:
изучены общие характеристики и основные различия между подпрограммой и функцией;
составлена программа с использованием подпрограмм;
решена задача, связанная с операциями над массивами;
получены навыки передачи массивов в качестве параметров в подпрограммы.
