Основы информационных технологий и программирования
ДИНАМИЧЕСКИЕ МАССИВЫ
пояснительная записка к расчетному заданию
по дисциплине «Основы информационных технологий и программирования»
Цель работы
Изучение структуры и правил оформления модуля; создание программ с использованием модуля; изучение способов передачи данных в модули.
Постановка задачи
1. Выполнить задание с использованием процедур.
2. Исходные данные (кроме размерности массивов) ввести из текстового файла, который представить вместе с листингом программы и результатами счета. Ввод данных оформить как процедуру.
3. Решение задачи оформить в виде процедуры.
4. Исходную матрицу и результаты вывести в другой текстовый файл. Вывод данных в файл оформить в виде процедуры.
5. Весь обмен данными между основной программой и процедурами организовать через список формальных/фактических параметров.
Вариант № 1
1. Преобразовать вещественный массив Y(N)={0.2, -7.8, 2.5, -6.3, 1.3, 5.9, 4.4, 7.8, 0.3} в массив V по формуле Vj= cos Yj, где N=9. Оформить подпрограмму преобразования массива Y в массив V.
2. Заменить положительные элементы массива V их кубами, а отрицательные – наименьшим элементом массива; расположить элементы в порядке возрастания. Оформить подпрограмму выполнения указанных действий над массивом A (N).
3. Преобразовать одномерный массив V в двумерный W размером 3х3: разрезать условно массив V на три полоски; поместить затем под первой полоской вторую, под второй — третью. Использовать при этом оформленную подпрограмму преобразования одномерного массива A(n) в двумерный массив B(m, m).
4. Составить массив R из произведений элементов каждого столбца матрицы W. Оформить подпрограмму выполнения над массивом B(m, m) указанных действий.
Содержание работы
1. Исходный текст модуля.
module Module_V1
implicit none
CONTAINS
!**************************************
subroutine ReadFile(A, N,M)
real, intent (OUT)::A(:)
integer, intent(OUT)::N, M; integer i;
open(unit=1,file=’DZ1.txt’)
read(1,*) N, M
read(1,*) (A(i),i=1,N)
close(1)
end subroutine ReadFile
!**************************************
subroutine Proc1(Y, V,N)
real, intent (in)::Y(:)
real, intent (out)::V(:)
integer, intent(in)::N; integer i;
do i=1,N
V(i)=cos(Y(i))
enddo
end subroutine Proc1
!**************************************
subroutine Proc2(A, Anew, Amin, N)
real, intent (in)::A(:)
real, intent (out)::Anew(:)
real, intent (out)::Amin
integer, intent(in)::N; integer i;
Amin=A(1)
do i=1,N
if(A(i)<Amin) Amin=A(i)
enddo
do 2 i=1,N,1
if(A(1).GT.0) then
Anew(i)=A(i)**3
else
Anew(i)=Amin
endif
2 continue
end subroutine Proc2
!**************************************
subroutine Proc3(A, W,N, M)
real, intent (in)::A(:)
real, intent (out)::W(:,:)
integer, intent(in)::N, M; integer::i, j,k=0;
do i=1,M
do j=1,M
k=k+1
W(i, j)=A(k)
enddo
enddo
end subroutine Proc3
!**************************************
subroutine Proc4(W, R,M)
real, intent (out)::R(:)
real, intent (in)::W(:,:)
integer, intent(in)::M;
integer::i, j;
real P;
do j=1,M
P=1
do i=1,M
P=P*W(i, j)
enddo
R(j)=P
enddo
end subroutine Proc4
!**************************************
subroutine WriteFile(Y, V,Vnew, N,Vmin, W,R, M)
real, intent (in)::Y(:),V(:),Vnew(:),R(:)
real, intent (in)::W(:,:)
integer, intent(in)::N, M;
real, intent (in)::Vmin
integer::i, j;
open(unit=2,file="DZ1.OUT")
write(2,*) "Домашнее задание №1"
write(2,*) "Выполнили: Байбикова М. А., Снурницын В. А., Сургов А. И., Клемешов Р. С."
write(2,*) "Исходный массив Y:"
write(2,'(100F8.4)’) (Y(i),i=1,N)
write(2,*) "Пункт 1: V="
write(2,'(100F8.4)’) (V(i),i=1,N)
write(2,*) "Пункт 2: Vnew="
write(2,'(100F8.4)’) (Vnew(i),i=1,N)
write(2,'(A, F8.4)’) ‘Vmin = ‘,Vmin
write(2,*) "Пункт 3 : W="
DO I=1,M
Write(2,'(100F8.4)’) (W(I, J),J=1,M)
ENDDO
write(2,*) "Пункт 4: R="
write(2,'(100F8.4)’) (R(i),i=1,M)
close(2)
end subroutine WriteFile
!**************************************
end module Module_V1
2. Исходный текст главной программы:
program DZ1
use Module_V1
implicit none
real, ALLOCATABLE::Y(:),V(:),Vnew(:),R(:),W(:,:)
integer::N, M;
real::Vmin
ALLOCATE(Y(100))
CALL ReadFile(Y, N,M)
ALLOCATE(V(N),Vnew(N),R(M),W(M, M))
CALL Proc1(Y, V,N)
CALL Proc2(V, Vnew, Vmin, N)
CALL Proc3(V, W,N, M)
CALL Proc4(W, R,M)
CALL WriteFile(Y, V,Vnew, N,Vmin, W,R, M)
DEALLOCATE(Y, V,Vnew, R,W)
end program DZ1
3. Файл исходных данных.
4. Файл с результатами расчета.
5. Выводы:
· закреплены навыки работы с подпрограммами и текстовыми файлами данных;
· изучена техника программирования с использованием динамических массивов;
· создана программа с использованием модуля и динамических массивов;
· изучены способы передачи данных в модули.