!n - размерность матрицы и вектора, m - последний элемент массива ia
!----------------------------------------------------------------------------
subroutine Input2 (Rmem, n, m)
dimension Rmem(*)
open (8, file='F:\l3\Test1\al.txt', status='old')
open (9, file='F:\l3\Test1\di.txt', status='old')
open (11, file='F:\l3\Test1\b.txt', status='old')
read (8, *) (Rmem(i), i=1, m-1)
read (9, *) (Rmem(i), i=i, i+n-1)
read (11, *) (Rmem(i), i=i, i+n-1)
close (8)
close (9)
close (10)
close (10)
end
!---------------------------------------------------------------------------------
!Подпрограмма перемножения матрицы в разреженном формате на вектор:
!n - размерность матрицы и вектора, m - последний элемент массива ia,
!c - вектор, результат умножения, ia, ja, al, di, b - исходные данные
!---------------------------------------------------------------------------------
subroutine Mult (n, m, ia, ja, al, di, b, c)
dimension ia(n+1), c(n)
dimension ja(m-1), al(m-1), di(n), b(n)
do i=1, n
c(i)=0
end do
do i=1, n
i_a=ia(i+1)-ia(i)
j=0
do while (j.lt.i_a)
c(i)=c(i)+al(ia(i)+j)*b(ja(ia(i)+j))
c(ja(ia(i)+j))=c(ja(ia(i)+j))+al(ia(i)+j)*b(i)
j=j+1
end do
c(i)=c(i)+di(i)*b(i)
end do
end
!---------------------------------------------------------------------------------
!Подпрограмма вывода результирующего вектора в файл:
!n - размерность вектора, Rmem - часть массива Rmem для хранения результата
!---------------------------------------------------------------------------------
subroutine Output (n, Rmem)
dimension Rmem(*)
open (2, file='F:\l3\Test1\c.txt', status='old')
write (2, *) (Rmem(i), i=1, n)
close (2)
end
!---------------------------------------------------------------------------------
!Подпрограмма проверки исходных данных на корректность(существование матрицы и вектора,
!возможнось их перемножения):
!n - размерность матрицы, nb - размерность вектора,
!mem - максимальный доступный размер массивов
!---------------------------------------------------------------------------------
subroutine Check1 (n, nb, mem)
if (n.ne.nb.or.n.lt.1.or.nb.lt.1) then !Размерность вектора не равна
print *, 'Nekorrektnie dannie' !размерности матрицы или размерность
pause !вектора или матрицы меньше 1
stop
else
if (n+1.lt.mem) then !Размернось первого
print *, 'Nedostayo4no panyati dlya hraneniya dannih' !исходногомассива
pause !больше, чем
stop !доступная память
end if
end if
end
!---------------------------------------------------------------------------------
!Подпрограмма проверки исходных данных на корректность(не превышают ли исходные данные
!и результат доступный размер памяти):
!n - размерность матрицы, nb - размерность вектора,
!mem - максимальный доступный размер массивов
!---------------------------------------------------------------------------------
subroutine Check2 (n, m, mem)
if (4*n+2*m+1.lt.mem) then !Сумма размерностей
print *, 'Nedostayo4no panyati dlya hraneniya dannih ' !массивов исходных данных
pause !больше, чем доступная память
stop
end if
end
6. Набор тестов
Исходные данные: n(размерность исходной матрицы), ia, ja, al, id, nb(размерность вектора), b |
Результаты, назначение теста |
5 1 1 2 3 5 7 1 1 1 2 1 2 1 1 1 1 1 1 6 1 3 2 4 6 5 |
Неверные данные; проверка на корректность данных (размерности вектора и матрицы не совпадают) |
0 1 1 2 3 5 7 1 1 1 2 1 2 1 1 1 1 1 1 0 1 3 2 4 6 |
Неверные данные; проверка на корректность данных (размерности вектора и матрицы меньше 1) |
108 1 1 2 3 5 7 1 1 1 2 1 2 1 1 1 1 1 1 108 1 3 2 4 6 |
Нехватка памяти |
5 1 1 1 1 1 1 0 0 0 0 0 5 1 1 1 1 1 |
Нулевая матрица 0 0 0 0 0 |
5 1 1 1 1 1 1 1 1 1 1 1 5 1 1 1 1 1 |
Единичная матрица 1 1 1 1 1 |
5 1 1 2 3 5 7 1 1 1 2 1 2 0.5 1.3 5.6 3 2.01 0.9 1 1 1 1 1 1 5 1.4 3 2 4.5 6.1 |
Вещественные элементы матрицы и вектора |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.