Профильный формат симметричной матрицы с выделением диагонали
Автор: Brickers • Май 26, 2021 • Лабораторная работа • 1,578 Слов (7 Страниц) • 386 Просмотры
Лабораторная работа №3
Вариант 10.1
Профильный формат симметричной матрицы с выделением диагонали.
Тесты:
Исходные данные: | Ожидаемый результат: | Реальный результат: | |
1. Вектор недопустимой размерности | [pic 1] | Неправильный вектор | [pic 2] |
2. Перемножение с вещественными числами | [pic 3] | [pic 4] | [pic 5] |
3. Вещественные числа в векторе | [pic 6] | [pic 7] | [pic 8] |
4. Отрицательные числа | [pic 9] | [pic 10] | [pic 11] |
5. Умножение на нулевой вектор | [pic 12] | [pic 13] | [pic 14] |
Текст программы:
PROGRAM MAIN
COMMON /size/ N, nodes
DIMENSION mem(1000000)
CALL readSizes(1000000)
CALL readMatrix(mem(1), mem(N + 2), mem(2 * N + 3),
& mem(2 * N + nodes + 4))
CALL readVector(mem(2 * N + 2 * nodes + 5))
CALL mult(mem(1), mem(N + 2), mem(2 * N + 3),
& mem(2 * N + nodes + 4), mem(2 * N + 2 * nodes + 5),
& mem(3 * N + 2 * nodes + 6))
END
SUBROUTINE readSizes(mem_size)
COMMON /size/ N, nodes
OPEN(1, FILE = 'matrix_size.txt', STATUS = 'OLD', ERR=1)
READ(1, *) N
CLOSE(1)
OPEN(1, FILE = 'vector_size.txt', STATUS = 'OLD', ERR=2)
READ(1, *) Nv
CLOSE(1)
IF (N .NE. Nv) GOTO 3
OPEN(1, FILE = 'ia.txt', STATUS = 'OLD', ERR = 4)
READ(1, *) (values, i = 1, N + 1)
nodes = INT(values) - 1
CLOSE(1)
IF (mem_size .LT. (4 * N + 2 * nodes + 2 + 100)) GOTO 5
PRINT *, 'Sizes reading success.'
RETURN
1 PRINT *, 'matrix_size.txt file does not exist!'
PAUSE
STOP
2 PRINT *, 'vector_size.txt does not exist!'
PAUSE
STOP
3 PRINT *, 'Incorrect size of matrix/vector!'
PAUSE
STOP
4 PRINT *, 'ia.txt does not exist!'
PAUSE
STOP
5 PRINT *, 'Out of memory!'
PAUSE
STOP
END
SUBROUTINE readMatrix(iA, Di, Al, Au)
COMMON /size/ N, nodes
DIMENSION iA(*), Di(*), Al(*), Au(*)
OPEN(1, FILE = 'ia.txt', STATUS = 'OLD', ERR = 1)
...