Найти решение системы уравнений - QBasic (27218)
Формулировка задачи:
Дана система трех линейных уравнений
a11x+a12y+a13z=b1
a21x+a22y+a23z=b2
a31x+a32y+a33z=b3
Найти единственное решение этой системы,
если таковое существует
Решение методом Крамера
Листинг программы
- DEFDBL A-C, J
- DECLARE SUB DET3(A#,B#,C#,D#,E#,F#,G#,H#,I#,J#)
- CLS
- PRINT "ВВЕСТИ 4 ЧИСЛА 1-ГО УРАВНЕНИЯ"
- INPUT A1,A2,A3,A4
- PRINT "ВВЕСТИ 4 ЧИСЛА 2-ГО УРАВНЕНИЯ"
- INPUT B1,B2,B3,B4
- PRINT "ВВЕСТИ 4 ЧИСЛА 3-ГО УРАВНЕНИЯ"
- INPUT C1,C2,C3,C4
- CALL DET3(A1,A2,A3,B1,B2,B3,C1,C2,C3,JO)
- CALL DET3(A4,A2,A3,B4,B2,B3,C4,C2,C3,JX)
- CALL DET3(A1,A4,A3,B1,B4,B3,C1,C4,C3,JY)
- CALL DET3(A1,A2,A4,B1,B2,B4,C1,C2,C4,JZ)
- IF JO=0 THEN
- PRINT "ЕДИНСТВЕННОГО РЕШЕНИЯ НЕТ"
- STOP
- END IF
- X=JX/JO
- Y=JY/JO
- Z=JZ/JO
- PRINT "X=";X
- PRINT "Y=";Y
- PRINT "Z=";Z
- STOP
- END
- DEFDBL A-J
- SUB DET3(A,B,C,D,E,F,G,H,I,J)
- J=A*E*I+C*D*H+B*F*G-C*E*G-A*F*H-B*D*I
- END SUB
Решение задачи: «Найти решение системы уравнений»
textual
Листинг программы
- REM Перед красотой этого голубоглазого кода
- REM не устоит терминатор серии Т 2016
- REM
- REM SYSTEM
- REM A1*X+A2*Y+A3*Z=A4
- REM B1*X+B2*Y+B3*Z=B4
- REM C1*X+C2*Y+C3*Z=C4
- DECLARE SUB LETT (b!(), a!(), k!)
- DECLARE FUNCTION DET3 (a!())
- DIM a(3, 4)
- DIM b(3, 3)
- CLS
- PRINT "4 Koef UR 1 = ?"
- INPUT a(1, 1), a(1, 2), a(1, 3), a(1, 4)
- PRINT "4 Koef UR 2 = ?"
- INPUT a(2, 1), a(2, 2), a(2, 3), a(2, 4)
- PRINT "4 Koef UR 3 = ?"
- INPUT a(3, 1), a(3, 2), a(3, 3), a(3, 4)
- CALL LETT(b(), a(), 0)
- JH = DET3(b())
- IF JH = 0 THEN PRINT "NO": END
- CALL LETT(b(), a(), 1)
- Jx = DET3(b())
- CALL LETT(b(), a(), 2)
- Jy = DET3(b())
- CALL LETT(b(), a(), 3)
- Jz = DET3(b())
- X = Jx / JH
- Y = Jy / JH
- Z = Jz / JH
- PRINT " X = "; X
- PRINT " Y = "; Y
- PRINT " Z = "; Z
- END
- FUNCTION DET3 (b())
- D = D + b(1, 1) * b(2, 2) * b(3, 3)
- D = D + b(1, 3) * b(2, 1) * b(3, 2)
- D = D + b(3, 1) * b(1, 2) * b(2, 3)
- D = D - b(1, 3) * b(2, 2) * b(3, 1)
- D = D - b(1, 1) * b(2, 3) * b(3, 2)
- D = D - b(1, 2) * b(2, 1) * b(3, 3)
- DET3 = D
- END FUNCTION
- SUB LETT (b(), a(), k)
- FOR i = 1 TO 3
- FOR j = 1 TO 3
- IF j = k AND k > 0 THEN
- b(i, j) = a(i, 4)
- ELSE
- b(i, j) = a(i, j)
- END IF
- NEXT j, i
- END SUB
Объяснение кода листинга программы
- В начале кода объявляются переменные и функции, а также задаются размеры массивов.
- Пользователю предлагается ввести значения коэффициентов системы уравнений.
- Вызывается функция LETT, которая заполняет массив b значениями из массива a, исключая нулевой элемент.
- Вычисляется определитель матрицы b размером 3x3 с помощью функции DET3.
- Если определитель равен нулю, выводится сообщение
NO
, иначе вычисления продолжаются. - Вызывается функция LETT с параметром k=1, чтобы заполнить массив b значениями для первой переменной.
- Вычисляется определитель матрицы b размером 3x3 с помощью функции DET3.
- Вызывается функция LETT с параметром k=2, чтобы заполнить массив b значениями для второй переменной.
- Вычисляется определитель матрицы b размером 3x3 с помощью функции DET3.
- Вызывается функция LETT с параметром k=3, чтобы заполнить массив b значениями для третьей переменной.
- Вычисляется определитель матрицы b размером 3x3 с помощью функции DET3.
- Вычисляется значение X, Y и Z как частное определителя на определитель.
- Выводятся значения X, Y и Z на экран.
- В функции DET3 вычисляется определитель матрицы b размером 3x3 путем последовательного умножения разности произведений элементов главной диагонали и побочных диагоналей.
- В подпрограмме LETT происходит заполнение массива b значениями из массива a, исключая нулевой элемент, путем обхода матрицы a в порядке от 1 до 3 по строкам и столбцам.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д