<< На главную

Вычисление определителя целочисленной матрицы 3x3

На вход подаются 18 натуральных чисел, соответствующих девяти целым числам.
Так, последовательность:

1 0 2 0 0 3 4 0 5 0 6 0 7 0 8 0 9 0
трактуется как матрица:
+1 +2 -3
+4 +5 +6
+7 +8 +9

Результатом работы алгоритма является пара чисел в ячейках 1 и 2.
При этом пара чисел "x | 0" трактуется как положительное число +x, пара чисел "0 | x" трактуется как отрицательное число -x.


// ИНИЦИАЛИЗАЦИЯ основная программа




	// КОНСТАНТЫ: ячейки 100-...

	// константа 0, оно же "пустой оператор"
	Z(100)

	// константа 1
	Z(101)
	S(101)

	// константа 2
	T(101,102)
	S(102)

	// константа 3
	T(102,103)
	S(103)

	// константа 4
	T(103,104)
	S(104)

	// константа 5
	T(104,105)
	S(105)

	// константа 6
	T(105,106)
	S(106)

	// константа 7
	T(106,107)
	S(107)

	// константа 8
	T(107,108)
	S(108)

	// константа 9
	T(108,109)
	S(109)

	// константа 10
	T(109,110)
	S(110)

	// константа 11
	T(110,111)
	S(111)

	// константа 12
	T(111,112)
	S(112)

	// константа 13
	T(112,113)
	S(113)

	// константа 14
	T(113,114)
	S(114)

	// константа 15
	T(114,115)
	S(115)

	// константа 16
	T(115,116)
	S(116)

	// константа 17
	T(116,117)
	S(117)

	// константа 18
	T(117,118)
	S(118)

	// константа 19
	T(118,119)
	S(119)

	// константа 20
	T(119,120)
	S(120)

	// константа 21
	T(120,121)
	S(121)

	// константа 22
	T(121,122)
	S(122)

	// константа 23
	T(122,123)
	S(123)


	// ПЕРЕХОДЫ: ячейка 99
	ПЕРЕХОД:
	J(99,101,основная_программа-1)
	J(99,102,нормализация_Z_числа-1)
	J(99,103,сложение_двух_Z_чисел-1)
	J(99,104,сложение_двух_Z_чисел-2)
	J(99,105,сложение_двух_Z_чисел-3)
	J(99,106,умножение_двух_Z_чисел-1)
	J(99,107,умножение_двух_Z_чисел-2)
	J(99,108,умножение_двух_Z_чисел-3)
	J(99,109,умножение_двух_Z_чисел-4)
	J(99,110,умножение_двух_Z_чисел-5)
	J(99,111,умножение_двух_Z_чисел-6)
	J(99,112,умножение_двух_Z_чисел-7)
	J(99,113,определитель_Z_матрицы_2x2-1)
	J(99,114,определитель_Z_матрицы_2x2-2)
	J(99,115,определитель_Z_матрицы_2x2-3)
	J(99,116,определитель_Z_матрицы_3x3-1)
	J(99,117,определитель_Z_матрицы_3x3-2)
	J(99,118,определитель_Z_матрицы_3x3-3)
	J(99,119,определитель_Z_матрицы_3x3-4)
	J(99,120,определитель_Z_матрицы_3x3-5)
	J(99,121,определитель_Z_матрицы_3x3-6)
	J(99,122,определитель_Z_матрицы_3x3-7)
	J(99,123,определитель_Z_матрицы_3x3-8)




// НАЧАЛО основная программа

Z(151)
T(101, 151)

T(1, 152)
T(2, 153)
T(3, 154)
T(4, 155)
T(5, 156)
T(6, 157)
T(7, 158)
T(8, 159)
T(9, 160)
T(10, 161)
T(11, 162)
T(12, 163)
T(13, 164)
T(14, 165)
T(15, 166)
T(16, 167)
T(17, 168)
T(18, 169)
J(1,1,определитель_Z_матрицы_3x3)
основная_программа-1:
T(170,1)
T(171,2)
J(1,1,основная_программа-ЗАВЕРШЕНИЕ)

// КОНЕЦ основная программа




	// подпрограмма "максимум_двух_N_чисел"
	//     точка выхода:
	//                   ячейка 21
	//     параметры:
	//                   ячейка 22
	//                   ячейка 23
	//     результат:
	//                   ячейка 24
	максимум_двух_N_чисел:
	Z(24)
	Z(25)

	J(22,100,максимум_двух_N_чисел-второе_число)
	J(23,100,максимум_двух_N_чисел-первое_число)


	максимум_двух_N_чисел-цикл:
	S(25)
	J(25,22,максимум_двух_N_чисел-второе_число)
	J(25,23,максимум_двух_N_чисел-первое_число)
	
	// продолжение цикла "максимум_двух_N_чисел-цикл"
	J(1,1,максимум_двух_N_чисел-цикл)


	максимум_двух_N_чисел-первое_число:
	T(22,24)
	J(1,1,максимум_двух_N_чисел-КОНЕЦ)

	максимум_двух_N_чисел-второе_число:
	T(23,24)
	J(1,1,максимум_двух_N_чисел-КОНЕЦ)

	максимум_двух_N_чисел-КОНЕЦ:
	T(21, 99)
	J(1,1,ПЕРЕХОД)

	// КОНЕЦ подпрограмма "максимум_двух_N_чисел"




	// подпрограмма "нормализация_Z_числа"
	//     точка выхода:
	//                   ячейка 31
	//     параметры:
	//                   ячейка 32,33 - Z-число
	//     результат:
	//                   ячейка 34,35
	нормализация_Z_числа:
	Z(34)
	Z(35)
	Z(36)
	Z(37)
	Z(38)
	Z(39)

	J(32,33,нормализация_Z_числа-ноль)

	J(32,100,нормализация_Z_числа-ничего_не_делать)
	J(33,100,нормализация_Z_числа-ничего_не_делать)

	T(32,22)
	T(33,23)
	T(102, 21)
	J(1,1,максимум_двух_N_чисел)
	нормализация_Z_числа-1:
	T(24,36)

	S(37)
	S(38)

	нормализация_Z_числа-цикл:

		J(37,100,нормализация_Z_числа-цикл-левая_часть-скип)
		S(34)
		нормализация_Z_числа-цикл-левая_часть-скип:

		J(38,100,нормализация_Z_числа-цикл-правая_часть-скип)
		S(35)
		нормализация_Z_числа-цикл-правая_часть-скип:
		
		J(32,34,нормализация_Z_числа-левая_часть_кончилась)
		J(33,35,нормализация_Z_числа-правая_часть_кончилась)

		J(1,1,нормализация_Z_числа-цикл-продолжение)
		нормализация_Z_числа-левая_часть_кончилась:
		Z(34)
		Z(35)
		Z(37)

		J(1,1,нормализация_Z_числа-цикл-продолжение)
		нормализация_Z_числа-правая_часть_кончилась:
		Z(34)
		Z(35)
		Z(38)
		
	нормализация_Z_числа-цикл-продолжение:
	S(39)
	J(39,36,нормализация_Z_числа-КОНЕЦ)
	J(1,1,нормализация_Z_числа-цикл)
	
	J(1,1,нормализация_Z_числа-КОНЕЦ)
	нормализация_Z_числа-ноль:
	Z(34)
	Z(35)

	J(1,1,нормализация_Z_числа-КОНЕЦ)
	нормализация_Z_числа-ничего_не_делать:
	T(32,34)
	T(33,35)
	
	нормализация_Z_числа-КОНЕЦ:
	T(31, 99)
	J(1,1,ПЕРЕХОД)
	
	// КОНЕЦ подпрограмма "нормализация_Z_числа"




	// подпрограмма "сложение_двух_N_чисел"
	//     точка выхода:
	//                   ячейка 41
	//     параметры:
	//                   ячейка 42
	//                   ячейка 43
	//     результат:
	//                   ячейка 44
	сложение_двух_N_чисел:
	Z(44)
	Z(45)

	J(42,100,сложение_двух_N_чисел-второе_число)
	J(43,100,сложение_двух_N_чисел-первое_число)


	сложение_двух_N_чисел-цикл1:
	S(44)
	S(45)
	J(42,45,сложение_двух_N_чисел-цикл1-конец)
	J(1,1,сложение_двух_N_чисел-цикл1)
	
	сложение_двух_N_чисел-цикл1-конец:
	Z(45)
	
	
	сложение_двух_N_чисел-цикл2:
	S(44)
	S(45)
	J(43,45,сложение_двух_N_чисел-КОНЕЦ)
	J(1,1,сложение_двух_N_чисел-цикл2)
	
	
	сложение_двух_N_чисел-первое_число:
	T(42,44)
	J(1,1,сложение_двух_N_чисел-КОНЕЦ)

	сложение_двух_N_чисел-второе_число:
	T(43,44)
	J(1,1,сложение_двух_N_чисел-КОНЕЦ)

	сложение_двух_N_чисел-КОНЕЦ:
	T(41, 99)
	J(1,1,ПЕРЕХОД)

	// КОНЕЦ подпрограмма "сложение_двух_N_чисел"




	// подпрограмма "сложение_двух_Z_чисел"
	//     точка выхода:
	//                   ячейка 51
	//     параметры:
	//                   ячейка 52,53 - Z-число
	//                   ячейка 54,55 - Z-число
	//     результат:
	//                   ячейка 56,57 - Z-число
	сложение_двух_Z_чисел:

	Z(41)
	T(103,41)
	T(52,42)
	T(54,43)
	J(1,1,сложение_двух_N_чисел)
	сложение_двух_Z_чисел-1:
	T(44,56)
	
	T(104,41)
	T(53,42)
	T(55,43)
	J(1,1,сложение_двух_N_чисел)
	сложение_двух_Z_чисел-2:
	T(44,57)

	Z(31)
	T(105,31)
	T(56,32)
	T(57,33)
	J(1,1,нормализация_Z_числа)
	сложение_двух_Z_чисел-3:
	T(34,56)
	T(35,57)
	
	сложение_двух_Z_чисел-КОНЕЦ:
	T(51, 99)
	J(1,1,ПЕРЕХОД)

	// КОНЕЦ подпрограмма "сложение_двух_Z_чисел"




	// подпрограмма "умножение_двух_N_чисел"
	//     точка выхода:
	//                   ячейка 61
	//     параметры:
	//                   ячейка 62
	//                   ячейка 63
	//     результат:
	//                   ячейка 64
	умножение_двух_N_чисел:
	Z(64)
	Z(65)
	Z(66)

	J(62,100,умножение_двух_N_чисел-ноль)
	J(63,100,умножение_двух_N_чисел-ноль)

	умножение_двух_N_чисел-1:
	Z(65)
	J(66,63,умножение_двух_N_чисел-КОНЕЦ)
	S(66)
	умножение_двух_N_чисел-2:
	S(64)
	S(65)
	J(65,62,умножение_двух_N_чисел-1)
	J(1,1,умножение_двух_N_чисел-2)
	
	умножение_двух_N_чисел-ноль:
	J(1,1,умножение_двух_N_чисел-КОНЕЦ)

	умножение_двух_N_чисел-КОНЕЦ:
	T(61, 99)
	J(1,1,ПЕРЕХОД)

	// КОНЕЦ подпрограмма "умножение_двух_N_чисел"




	// подпрограмма "умножение_двух_Z_чисел"
	//     точка выхода:
	//                   ячейка 71
	//     параметры:
	//                   ячейка 72,73 - Z-число   a  -b
	//                   ячейка 74,75 - Z-число   c  -d
	//     результат:
	//                   ячейка 76,77 - Z-число   ac+bd  -(bc+ad)
	умножение_двух_Z_чисел:

	T(106,61)
	T(72,62)
	T(74,63)
	J(1,1,умножение_двух_N_чисел)
	умножение_двух_Z_чисел-1:
	T(64,78)

	T(107,61)
	T(73,62)
	T(75,63)
	J(1,1,умножение_двух_N_чисел)
	умножение_двух_Z_чисел-2:
	T(64,79)

	T(108,41)
	T(78,42)
	T(79,43)
	J(1,1,сложение_двух_N_чисел)
	умножение_двух_Z_чисел-3:
	T(44,76)

	T(109,61)
	T(73,62)
	T(74,63)
	J(1,1,умножение_двух_N_чисел)
	умножение_двух_Z_чисел-4:
	T(64,78)

	T(110,61)
	T(72,62)
	T(75,63)
	J(1,1,умножение_двух_N_чисел)
	умножение_двух_Z_чисел-5:
	T(64,79)

	T(111,41)
	T(78,42)
	T(79,43)
	J(1,1,сложение_двух_N_чисел)
	умножение_двух_Z_чисел-6:
	T(44,77)

	T(112,31)
	T(76,32)
	T(77,33)
	J(1,1,нормализация_Z_числа)
	умножение_двух_Z_чисел-7:
	T(34,76)
	T(35,77)
	
	умножение_двух_Z_чисел-КОНЕЦ:
	T(71, 99)
	J(1,1,ПЕРЕХОД)

	// КОНЕЦ подпрограмма "умножение_двух_Z_чисел"





	// подпрограмма "определитель_Z_матрицы_2x2"
	//     точка выхода:
	//                   ячейка 81
	//     параметры:
	//                   ячейка 82,83 - Z-число 1,1
	//                   ячейка 84,85 - Z-число 1,2
	//                   ячейка 86,87 - Z-число 2,1
	//                   ячейка 88,89 - Z-число 2,2
	//     результат:
	//                   ячейка 90,91 - Z-число
	определитель_Z_матрицы_2x2:
	
	T(113,71)
	T(82,72)
	T(83,73)
	T(88,74)
	T(89,75)
	J(1,1,умножение_двух_Z_чисел)
	определитель_Z_матрицы_2x2-1:
	T(76,90)
	T(77,91)

	T(114,71)
	T(84,72)
	T(85,73)
	T(86,74)
	T(87,75)
	J(1,1,умножение_двух_Z_чисел)
	определитель_Z_матрицы_2x2-2:
	T(76,55)
	T(77,54)
	T(90,52)
	T(91,53)

	T(115,51)
	J(1,1,сложение_двух_Z_чисел)
	определитель_Z_матрицы_2x2-3:
	T(56,90)
	T(57,91)

	определитель_Z_матрицы_2x2-КОНЕЦ:
	T(81, 99)
	J(1,1,ПЕРЕХОД)

	// КОНЕЦ подпрограмма "определитель_Z_матрицы_2x2"




	// подпрограмма "определитель_Z_матрицы_3x3"
	//     точка выхода:
	//                   ячейка 151
	//     параметры:
	//                   ячейка 152,153 - Z-число 1,1
	//                   ячейка 154,155 - Z-число 1,2
	//                   ячейка 156,157 - Z-число 1,3
	//                   ячейка 158,159 - Z-число 2,1
	//                   ячейка 160,161 - Z-число 2,2
	//                   ячейка 162,163 - Z-число 2,3
	//                   ячейка 164,165 - Z-число 3,1
	//                   ячейка 166,167 - Z-число 3,2
	//                   ячейка 168,169 - Z-число 3,3
	//     результат:
	//                   ячейка 170,171 - Z-число
	определитель_Z_матрицы_3x3:

	T(116,81)
	T(160,82)
	T(161,83)
	T(162,84)
	T(163,85)
	T(166,86)
	T(167,87)
	T(168,88)
	T(169,89)
	J(1,1,определитель_Z_матрицы_2x2)
	определитель_Z_матрицы_3x3-1:
	T(117,71)
	T(90,72)
	T(91,73)
	T(152,74)
	T(153,75)
	J(1,1,умножение_двух_Z_чисел)
	определитель_Z_матрицы_3x3-2:
	T(76,170)
	T(77,171)

	T(118,81)
	T(158,82)
	T(159,83)
	T(162,84)
	T(163,85)
	T(164,86)
	T(165,87)
	T(168,88)
	T(169,89)
	J(1,1,определитель_Z_матрицы_2x2)
	определитель_Z_матрицы_3x3-3:
	T(119,71)
	T(90,72)
	T(91,73)
	T(155,74)
	T(154,75)
	J(1,1,умножение_двух_Z_чисел)
	определитель_Z_матрицы_3x3-4:
	T(120,51)
	T(76,52)
	T(77,53)
	T(170,54)
	T(171,55)
	J(1,1,сложение_двух_Z_чисел)
	определитель_Z_матрицы_3x3-5:
	T(56,170)
	T(57,171)

	T(121,81)
	T(158,82)
	T(159,83)
	T(160,84)
	T(161,85)
	T(164,86)
	T(165,87)
	T(166,88)
	T(167,89)
	J(1,1,определитель_Z_матрицы_2x2)
	определитель_Z_матрицы_3x3-6:
	T(122,71)
	T(90,72)
	T(91,73)
	T(156,74)
	T(157,75)
	J(1,1,умножение_двух_Z_чисел)
	определитель_Z_матрицы_3x3-7:
	T(123,51)
	T(76,52)
	T(77,53)
	T(170,54)
	T(171,55)
	J(1,1,сложение_двух_Z_чисел)
	определитель_Z_матрицы_3x3-8:
	T(56,170)
	T(57,171)

	определитель_Z_матрицы_3x3-КОНЕЦ:
	T(151, 99)
	J(1,1,ПЕРЕХОД)




// ЗАВЕРШЕНИЕ основная программа
основная_программа-ЗАВЕРШЕНИЕ:
Z(100)