![]() |
Начальные контакты ТОЛЬКО через личку!!
![]() |
k0t |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 2 Пол: Мужской Репутация: ![]() ![]() ![]() |
дана задача
"Программа работает в текстовом режиме. Пользователь выбирает операцию, вводит с клавиатуры размер матрицы и значения элементов матрицы. Программа выполняет заданную операцию и выводит на экран ее результат. Для реализации в программе предлагаются следующие операции: перемножение двух матриц, транспонирование, вычисление определителя, вычисление обратной матрицы, сложение (вычитание) двух матриц. " Помогите решить очень срочно, пожалуйста. Либо помогите найти ошибку в коде: Program MATRIX; {Наименование программы} Uses CRT; VAR i1, i2, i3 : integer; {Счетчик строк} j1, j2, j3 : integer; {Счетчик столбцов} operation: integer; {Вариант развития программы} det : real; {Определитель} k: integer; {Рабочая переменная} m1, m2, m3 : integer; n1, n2, n3 : integer; {Массивы (матрицы), используемые в программе} MAS1, {Матрица А} MAS2, {Матрица В} MAS3 : array [1..10,1..10] of real; {Матрица С} BEGIN {Начало программы} WriteLn ('Что Вы желаете делать с матрицами?'); {Выбор пользователем варианта развития программы} WriteLn ('Если Вы желаете найти определитель матрицы, нажмите 1'); WriteLn ('Если Вы желаете найти обратную матрицу, нажмите 2'); WriteLn ('Если Вы желаете транспонировать матрицу, нажмите 3'); WriteLn ('Если Вы желаете сложить матрицы, нажмите 4'); WriteLn ('Если Вы желаете вычесть матрицы, нажмите 5'); WriteLn ('Если Вы желаете перемножить матрицы, нажмите 6'); ReadLn (operation); {Занесение выбранного варианта в память} WriteLn ('Введите кол-во строк исходной матрицы, не более 10'); ReadLn (m1); WriteLn ('Введите кол-во столбцов исходной матрицы, не более 10'); ReadLn (n1); If ((1>n1) or (n1>10) or (1>m1) or (m1>10)) {Условия ошибки} then begin WriteLn ('ОШИБКА!!!'); Halt; end else begin WriteLn ('Введите исходную матрицу'); {Ввод исходной матрицы} for i1:=1 to m1 do for j1:=1 to n1 do Read (MAS1[i1,j1]); end; for i1:=1 to m1 do {Вывод исходной матрицы} begin for j1:=1 to n1 do Write (MAS1[i1,j1]); WriteLn; end; Case operation of {Оператор выбора «operation»} 1: begin {Определитель} if (m1<>n1) then writeLn ('ОШИБКА!!!') {Условие ошибки} else begin {Формула определителя} det:=(MAS1[1,1]*MAS1[2,2]*MAS1[3,3] +MAS1[2,1]*MAS1[3,2]*MAS1[1,3] +MAS1[1,2]*MAS1[2,3]*MAS1[3,1]) -(MAS1[3,1]*MAS1[2,2]*MAS1[1,3] +MAS1[3,2]*MAS1[2,3]*MAS1[1,1] +MAS1[2,1]*MAS1[1,2]*MAS1[3,3]); WriteLn ('Opredelitel det=',det); {Вывод определителя} end; end; 2: begin {Обратная матрица} if (m1<>n1) then WriteLn ('ОШИБКА!!!') {Условие ошибки} else begin det:=(MAS1[1,1]*MAS1[2,2]*MAS1[3,3] {Определитель} +MAS1[2,1]*MAS1[3,2]*MAS1[1,3] +MAS1[1,2]*MAS1[2,3]*MAS1[3,1]) -(MAS1[3,1]*MAS1[2,2]*MAS1[1,3] +MAS1[3,2]*MAS1[2,3]*MAS1[1,1] +MAS1[2,1]*MAS1[1,2]*MAS1[3,3]); if det = 0 then WriteLn ('ОШИБКА!!!') {Условие ошибки} else begin {Союзная матрица} for i1:=1 to m1 do for j1:=1 to n1 do MAS2[i1,j1]:=MAS1[j1,i1]; {Итоговая формула} for i1:=1 to m1 do for j1:=1 to n1 do MAS3[i1,j1]:=(1/det)*MAS2[i1,j1]; WriteLn; WriteLn ('Обратная матрица:'); for i1:=1 to m1 do begin {Вывод обратной матрицы} for j1:=1 to n1 do Write (MAS3[i1,j1]); WriteLn; end; end; end; end; 3: begin {Транспонирование матрицы} for i1:=1 to m1 do for j1:=1 to n1 do MAS2[i1,j1]:=MAS1[j1,i1]; {Формула} WriteLn ('Транспонированная матрица: '); for i1:=1 to m1 do begin {Вывод транспонированной матрицы} for j1:=1 to n1 do Write (MAS2[i1,j1]); WriteLn; end; end; 4,5: begin {Сложение/вычитание матриц} {Ввод второй матрицы} WriteLn ('Введите кол-во строк второй матрицы'); ReadLn (m2); Writeln ('Введите кол-во столбцов второй матрицы'); ReadLn (n2); If (n2<>n1) or (m2<>m1) then WriteLn ('OSHIBKA!!!') {Условие ошибки} else begin WriteLn ('Введите вторую матрицу'); for i1:=1 to m1 do for j1:=1 to n1 do Read (MAS2[i1,j1]); end; for i1:=1 to m1 do {Вывод второй матрицы} begin for j1:=1 to n1 do Write (MAS2[i1,j1]); WriteLn; end; if operation = 4 then k := 1; if operation = 5 then k := -1; for i1:=1 to m1 do for j1:=1 to n1 do MAS3[i1,j1]:=MAS1[i1,j1]+k*MAS2[i1,j1]; {Итоговая формула} writeln('Сумма/разность:'); for i1:=1 to m1 do begin for j1:=1 to n1 do Write(MAS3[i1,j1]); WriteLn; end; end; 6: begin {Умножение матриц} {Ввод второй матрицы} WriteLn ('Введите кол-во строк второй матрицы'); ReadLn (m2); Writeln ('Введите кол-во столбцов второй матрицы'); ReadLn (n2); If ((1>=m2) or (m2>=10) or (1>=n2) or (n2>=10) {Условие ошибки} or (n2<>m1)) then WriteLn ('ОШИБКА!!!') else begin WriteLn ('Введите вторую матрицу'); for i2:=1 to m2 do for j2:=1 to n2 do Read (MAS2[i2,j2]); end; for i2:=1 to m2 do begin {Вывод второй матрицы} for j2:=1 to n2 do Write (MAS2[i2,j2]); WriteLn; end; m3:=m1; n3:=n2; for i3:=1 to m3 do for j3:=1 to n3 do begin MAS3[i3,j3] := 0; for i2:= 1 to m2 do {Итоговая формула} MAS3[i3,j3] :=MAS3[i3,j3] + MAS1[i3,i2] * MAS2[i2,j3]; end; begin {Вывод произведения} writeln; writeln('Произведение:'); for i3:=1 to m1 do begin for j3:=1 to n2 do Write (MAS3[i3,j3]); WriteLn; end; end; end; End; {End Case} ReadKey; END. {Конец программы} |
![]() ![]() |
![]() |
Текстовая версия | 22.06.2025 14:38 |