open (15,File='E:\fortran\l3\rez.txt',status='old')
do i=1,n,1
rez(i)=i*(i+n-3)+1+n
end do
write(15,*)(rez(i),i=1,n,1)
close(15)
end
!------------------------------------------------------------------------------------------------------------
!подпрограмма вывода плотной матрицы по исходной профильной матрице
!параметры: ai,di,al,au-массивы исходных данных
!------------------------------------------------------------------------------------------------------------
subroutine writematrx(ai,di,al,au)
common/m/ka,kia
dimension Ai(kia)
dimension di(kia-1)
dimension Al(ka)
dimension Au(ka)
dimension x(100,100)
open (17,File='E:\fortran\l3\outmatrix.txt',status='old')
iz=0
do i=1,kia-2,1
k=ai(i+2)-ai(i+1)
do j=1,i-k,1
x(j,i)=0.0
end do
do j=i-k+1,i,1
iz=iz+1
x(j,i)=au(iz)
end do
do j=i+1,kia-2,1
x(j,i)=0.0
end do
end do
!print *,((x(i,j),i=1,kia-2,1),j=1,kia-2,1)
l=0
do i=1,kia-1,1
k=ai(i+1)-ai(i)
write(17,*)(0.0,j=1,i-k-1,1),(al(j),j=l+1,l+k,1),di(i),
*(x(i,j),j=i,kia-2,1)
l=l+k
end do
close(17)
end
program main
parameter(ir=2000000)
common/m/ka,kia
dimension A(ir)
open (10,File='E:\fortran\l3\in.txt',status='old')
open (11,File='E:\fortran\l3\invec.txt',status='old')
open (12,File='E:\fortran\l3\out.txt',status='old')
open (13,File='E:\fortran\l3\inp.txt',access='direct',
*recl=4,status='old')
open (14,File='E:\fortran\l3\inpv.txt',access='direct',
*recl=4,status='old')
print *,'Enter the action: 1 - convertor; 2 - generator'
read *,k !вызов генератора или конвертора
if (k.eq.1)then
call convertor(a)
else
print *,'vvedite n'
read *,n
call generator(n)
print *,'generated'
pause
end if
call vvod(A,is,ir)
print *,is
pause
if(is.eq.0) stop !если данные некорректны, остановка программы
call mult(A(1),a(kia+1),a(2*kia),a(2*kia+ka), !записьрезультатоввфайл
*a(2*ka+2*kia),a(2*ka+3*kia-1))
print *,'multed'
call writematrx(A(1),a(kia+1),a(2*kia),a(2*kia+ka))
if (k.eq.2)then
call rezult(n,a(1))
print *,'rezulted'
pause
end if
write(12,*)(a(i),i=2*ka+3*kia-1,2*ka+4*kia-3,1)
print *,'writed'
pause
close(10)
close(11)
close(13)
close(14)
close(12)
end
6. Набор тестов
Исходные данные:n(размерность исходной матрицы), ia, a, id, kv(размерность вектора), vec |
Результаты, назначение |
4 1 2 3 4 5 1 1 1 1 1 1 1 1 5 1 2 3 4 5 |
Неверные данные; проверка на корректность данных (размерности вектора и матрицы не совпадают) |
0 1 2 3 4 5 1 1 1 1 1 1 1 1 0 1 2 3 4 5 |
Неверные данные; проверка на корректность данных (размерности вектора и матрицы меньше 1) |
108 1 2 3 4 5 1 1 1 1 1 1 1 1 108 1 2 3 4 5 |
Нехватка памяти, проверка (kia+kv<ir) |
4 1 2 3 4 5 0 0 0 0 1 1 1 1 4 1 2 3 4 |
Rez={0,0,0,0} Нуль – матрица, диагональная |
4 1 2 3 4 5 1 1 1 1 1 1 1 1 4 1 2 3 4 |
Rez={1,2,3,4} Единичная матрица, диагональная |
4 1 3 5 8 12 11 12 22 23 31 32 33 41 42 0 44 1 1 3 4 4 1 2 3 4 |
Rez={35,113,194,301} Профильная матрица с целыми числами; назначение: в профилях находится разное число элементов, большее единицы, диагональный элемент в профилях пробегает позиции от первой до последней, в профилях есть нули и элементы как до диагонального, так и после |
5 1 4 8 10 14 17 1.3 0 6.9 5.46 21.908 0 1.1 33 4.87 54.9 7.8 6.098 4.76 3.2 0 5.33 1 1 2 3 3 5 1.09 2.78 3.6 4.5432 1.09 |
Rez={26.2570000, 95.2465973, 109.2719955, 213.5948486, 17.3297005} Тест аналогичен предыдущему, но с вещественными числами |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.