Farionova_Fortran
.pdfЛАБОРАТОРНАЯ РАБОТА № 5
Образец выполнения задания
Задание 5. Дан двухмерный массив чисел А размерности п×п, которыйнаходитсявфайле"data.txt". Необходимозаменитьвсеотрицательные элементы положительными, если сумма всех элементов массива меньше S, в противном случае все отрицательные элементы уменьшить в два раза. Записать в файл результатов "res.txt" исходный и преобразованный массивы.
Схема алгоритма решения задания 5 приведена на рис. Л5.1. Перед запуском программы необходимо создать и сохранить тек-
стовый файл "data.txt". Формат файла:
–1 |
5 |
–8 |
4 |
2 |
7 |
2 |
–4 |
3 |
15 |
|
|
Текстпрограммы, реализующейалгоритм, приведенныйнарис. Л5.1:
Program lr5
Integer, parameter :: n=3
Real, dimension (1..n,1..n) :: a Real Sum, s
real I,j Sum=0
Open(5,file='data.txt')
!считывание и суммирование элементов массива do i=1, N
Read(5,*), a(I,1:n) Sum=sum+a(I,j) Enddo
!считывание числа S Read(5,*),s Close(5)
!вывод исходной матрицы в файл
Open(6,file='res.dat',status="new") do i=1, N Write(6,20),(a(I,j),j=1,n)
Enddo Write(6,*)
92
Разработка и реализация программ с использованием файлового типа данных.
20 format(nf2.0) If (sum<s) then
!если сумма элементов меньше S, меняем знак у !отрицательных элементов
do i=1, N do j=1, N
If (a(I,j)<0) then A(I,j)=abs(a(I,j)) else
do i=1, N do j=1, N
If (a(I,j)<0) then A(I,j)=a(I,j)/2
!вывод преобразованной матрицы в файл do i=1, N
Write(6,20),(a(I,j),j=1,n) enddo
20 format(nf2.0) Close(6)
End
До запуска программы создается файл "data.txt", в котором содержатся исходная матрица и параметр S:
–1 |
5 |
–8 |
4 |
2 |
7 |
2 |
–4 |
3 |
15 |
|
|
Врезультате работы программы должен быть создан файл "res.txt"
впапке проекта программы.
Содержимоефайла"res.txt":
–1 |
5 |
–8 |
4 |
2 |
7 |
2 |
–4 |
3 |
1 |
5 |
8 |
4 |
2 |
7 |
2 |
4 |
3 |
93
|
|
|
ЛАБОРАТОРНАЯ РАБОТА № 5 |
|||
|
|
|
Начало |
|
|
|
|
|
|
Sum = 0 |
|
|
|
|
|
Открыть файл для чтения data.txt |
|
|
||
|
|
|
I = 1, N |
– |
|
|
|
|
|
+ |
– |
|
|
|
|
|
J = 1,+N |
|
|
|
|
|
|
|
|
|
|
|
|
|
Ввести aij |
|
|
|
|
|
Закрыть файл data.txt |
|
|
||
|
|
Создать файл для записиres.dat |
|
|
||
|
|
|
I = 1, N |
– |
|
|
|
|
|
+ |
– |
|
|
|
|
|
J = 1,+N |
|
|
|
|
|
|
|
|
|
|
|
|
|
Вывести aij |
|
|
|
|
|
– |
Sum < S |
+ |
|
|
|
I = 1, N |
– |
|
I = 1, N |
– |
|
|
+ |
– |
|
+ |
|
– |
|
J = 1, N |
|
J = 1, N |
|
||
– |
+ |
+ |
– |
+ |
|
+ |
ai,j < 0 |
ai,j < 0 |
|
||||
|
|
ai,j = ai,j/2 |
|
|
ai,j |
= ai,j |
I = 1, N |
– |
+ |
– |
J = 1, N |
|
+ |
|
Вывести ai,j |
|
Закрыть файл res.dat |
|
Конец |
|
Рис. Л5.1. Блок-схемырешениязадания5
94
Лабораторная работа № 6
Тема: Разработка и реализация программ с использованием под-
программ и функций.
Цельработы: получитьнавыкисоставленияиреализациипрограмм сиспользованиемпрограммныхкомпонентов: подпрограммифункций.
Задания к лабораторной работе
Задание 6.1. Составить программу табулирования функции по варианту задания 3.2 с использованием программного компонента function.
Задание 6.2. Составить программу обработки одномерного массива согласно варианту задания 4.2 с использованием программного ком-
понента subroutine.
Образец выполнения работы
Задание 6.1. Составить программу табулирования функции y = x –1
сиспользованиемпрограммно- |
Начало |
|
гокомпонентаfunction. Схе- |
||
ма алгоритма приведена на |
Ввод a, b, h |
|
рис. Л6.1, блок-схемафункции |
||
|
f (x) = x − 1 – на рис. Л6.2.
Рис. Л6.1. Блок-схемыреализации задания6.1
X = a; n = b −a +1 |
|
h |
|
I = 1, N |
Нет |
Да |
|
Нет Xi>=0 Да |
|
Вывод хi, у – |
Y = f(xi) |
не существует |
|
Вывод хi, уi |
|
Xi+1 = xi + h |
|
Конец |
|
|
95 |
|
|
|
ЛАБОРАТОРНАЯ РАБОТА № 6 |
|
|
|
Текст программы: |
|
Начало |
Program Lr61 |
|
|
Вход |
real h, a, b |
|
|
|
|
|
f (x) = |
x −1 |
integer i,n |
|
|
|
|
real X(50),y(50) |
|
ВыходКонец |
Write(*,'(a,$)'),'Введите начало про- |
|
|
Рис. Л6.2. |
межутка a=' |
|
Блок-схема |
Read(*,*),a |
||
function f(x) |
Write(*,'(a,$)'),'Введите конец про- |
||
|
|
|
межутка b=' |
|
Read(*,*),b |
||
|
Write(*,'(a,$)'),'Введите шаг табулирования h=' |
||
|
Read(*,*),h |
||
|
X(1)=a |
|
|
|
n=int((int(b)-int(a))/h)+1 |
||
|
do |
i=1, |
n |
|
If |
(x(i)>=0) then |
|
|
Y(i)=f(x(i)) |
||
|
Write(*,'(a,i2,a,f5.2,a,i2,a,f5.2)'),'x(',I,')=',x(i),' |
||
|
y(',I,')=',y(i) |
||
|
Else |
|
|
не |
Write(*,'(a,i2,a,f5.2,a)'),'x(',I,')=',x(i), ' Y |
||
существует' |
|||
|
endif |
|
|
|
x(i+1)=x(i)+h |
||
|
Enddo |
|
|
|
Contains |
f(x) |
|
|
Function |
||
|
Real x |
|
|
|
F=sqrt(x)-1 |
||
|
End |
function f |
|
|
End |
|
|
96 |
|
|
|
Разработка и реализация программ с использованием ...
Результаты работы программы:
Введите начало промежутка a=-2 Введите конец промежутка b=2 Введите шаг табулирования h=0.5 x( 1)=-2.00 Y не существует
x( 2)=-1.50 Y не существует x( 3)=-1.00 Y не существует x( 4)=-0.50 Y не существует x( 5)= 0.00 y( 5)=-1.00
x( 6)= 0.50 y( 6)=-0.29 x( 7)= 1.00 y( 7)= 0.00 x( 8)= 1.50 y( 8)= 0.22 x( 9)= 2.00 y( 9)= 0.41
Задание 6.2. Разработать программу для нахождения произведения положительных элементов одномерного массива размером n с использованием подпрограммы subroutine. Элементы массива считываются из файла. Исходный массив и результат вывести на экран.
Алгоритм основной программы приведен на рис. Л6.3, алгоритм подпрограммы mult для поиска произведения положительных чисел массива – на рис. Л6.4.
Начало |
|
Вход |
|
I = 1, n |
|
|
|
|
P = 1 |
|
|
Вводai |
|
|
|
|
I = 1, n |
|
|
|
|
|
|
Mult(a, p) |
Нет |
ai>=0 |
Да |
I = 1, n |
|
|
P = p*ai |
|
|
|
|
Выводai |
|
|
|
Конец |
|
Выход |
|
Рис. Л6.3. Блок-схемаосновной |
Рис. Л6.4. Блок-схема |
||
программызадания6.2 |
подпрограммы mult |
97
|
|
|
ЛАБОРАТОРНАЯ РАБОТА № 6 |
|
|
||
|
|
||
Текст программы: |
|
||
Program |
lr62; |
:: n=10 |
|
Integer, |
parameter |
||
integer |
a(1:n) |
|
|
integer |
I,p |
|
|
do |
i=1, |
n |
|
print '(a,i2,a,$)', 'a(',і,')=' |
|||
read(*,*), a(i) |
|
||
enddo |
|
|
|
call Mult(a,p) |
|
||
Write(*,'(a,i5)')('p=',p) |
|||
contains |
|
p) |
|
subroutine mult(a, |
|||
integer |
a(1:n) |
|
|
integer |
і,p |
|
|
P=1 |
i=1, |
n |
|
do |
|
||
If |
(a(i)>0) then |
|
|
P=p*a(i) |
|
|
|
Endif |
|
|
|
enddo |
|
|
|
end |
subroutine mult |
||
End |
|
|
|
Результаты работы программы:
a( 1)= |
4 |
a( 2)= |
-7 |
a( 3)= |
5 |
a( 4)= |
7 |
a( 5)= |
-2 |
a( 6)= |
1 |
a( 7)= |
0 |
a( 8)= |
4 |
a( 9)= |
-9 |
a(10)= |
6 |
p= 3360 |
|
98
КОНТРОЛЬНЫЕ ВОПРОСЫ
1.Дайте определение алгоритма и охарактеризуйте его основные свойства.
2.Какие существуют способы задания алгоритмов? Представьте основные элементы блок-схем.
3.Алфавит языка Фортран. Из каких основных элементов состоит языкпрограммированияФортран?
4.Какие типы данных используются в Фортране? Дайте их характеристику.
5.Дайте определение понятия "выражение". Что такое арифметическое выражение? Каковы правила записи и вычисления математическихвыражений?
6.Что такое логическое выражение? Правила записи и вычисления логическихвыражений.
7.Каковприоритетоперацийвлогическом выражении? Представьтетаблицуистинностилогическихопераций.
8.Представьте структуру программы, написанной на языке Фор-
тран.
9.Дайте характеристику базовой управляющей конструкции "следование". Основныеоператорыпрограммыслинейнойструктурой: присваивание, ввод/вывод данных.
10.Дайте характеристику базовой управляющей конструкции "ветвление". ПредставьтеконструкциюиособенностииспользованиявФор- тран-программе оператора условного перехода if.
11.Представьте конструкцию и особенности использования в Фор- тран-программе оператора варианта case.
12.В каких случаях применяется оператор безусловного перехода
goto?
13.Дайте определение базовой управляющей конструкции "цикл". Перечислите основные этапы подготовки и реализации циклических вычислительныхпроцессов.
14.Циклическийвычислительныйпроцесс. Операторциклаdo (бесконечныйцикл). Приведитепримерпрограммнойреализации.
99
КОНТРОЛЬНЫЕ ВОПРОСЫ
15.Циклический вычислительный процесс. Оператор цикла do со счетчиком (или с параметром). Приведите пример программной реализации.
16.Циклический вычислительный процесс. Оператор цикла do while (цикл с предусловием). Приведите пример программной реализации.
17.Вложенные циклы. Задачи, приводящие к использованию вложенныхциклов.
18.Массив как сложный тип данных. Одномерные массивы. Способы описания одномерных массивов
19.Одномерныемассивы. Способыввода/выводаодномерныхмас-
сивов.
20.Типовые задачи, приводящие к необходимости использования одномерных массивов (поиск максимума, минимума, суммы, произведения элементов массива).
21.Массив как сложный тип данных. Многомерные массивы. Способы описания многомерных массивов.
22.Организация ввода/вывода двухмерных массивов.
23.Дайтеопределениепонятияфайл. ЧтотакоевнутреннийивнешнийфайлывФортране?
24.С помощью каких операторов происходит организация работы
сфайлами в Фортран-программе?
25.Дайте характеристику программным единицам, используемым в Фортран-программе.
26.Что такое программная компонента функция? Приведите пример использования в программе.
27.Что такое программная компонента подпрограмма? Приведите примериспользованиявпрограмме.
28.Формальныеифактическиепараметрыподпрограммифункций.
29.Что такое локальные и глобальные переменные? Покажите на примере особенности работы в программе локальных и глобальных переменных.
100
СПИСОК ЛИТЕРАТУРЫ
1.Алгазин, С. Д. Программирование на Visual Fortran [Текст] / С. Д. Алгазин, В. В. Кондратьев. – М. : Диалог МИФИ, 2008. – 472 с.
2.Артемов, И. Л. FORTRAN: основы программирования [Текст] / И. Л. Артемов. – М. : Диалог МИФИ, 2007. – 304 с.
3.Бартеньев, О. В. ФОРТРАН для студентов [Текст] / О. В. Бартеньев. – М. : Диалог МИФИ, 1999. – 400 с.
4.Бартеньев, О. В. Современный Фортран [Текст] / О. В. Бартеньев. – М. : Диалог МИФИ, 1999. – 400 с.
5.Голыничев, В. Н. Практикум по современному Фортрану в курсе Информатики [Текст] : учеб. пособие / В. Н. Голыничев, В. Ф. Звягин, Н. А. Яньшина. – СПб. : Санкт-Петербург. гос. ин-тточноймехани- кииоптики(Техническийуниверситет), 2010. – 134 с.
6.Немнюгин, С. А. Современный Фортран [Текст] / С. А. Немнюгин, О. Л. Стесик. – СПб. : СПбБХВ, 2003. – 496 с.
7.Рыжиков, Ю. И. Программирование на Фортране Power Station для инженеров [Текст] / Ю. И. Рыжиков. – СПб. : Корона принт, 1999. – 160 с.
8.Рыжиков, Ю. И. Современный Фортран [Текст] / Ю. И. Рыжиков. – СПб. : Корона принт, 2004. – 288 с.
9.ФОРТРАН 90. Международный стандарт [Текст] : [пер. с англ.].
–М. : Финансы и статистика, 1998. – 416 с.
101