IPB
ЛогинПароль:

> 

Начальные контакты ТОЛЬКО через личку!!

 
 Ответить  Открыть новую тему 
> Срочно необходимо решить задачу по матрицам, перемножение двух матриц, транспонирование, вычисление определителя, в
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 2
Пол: Мужской

Репутация: -  0  +


дана задача
"Программа работает в текстовом режиме. Пользователь выбирает операцию, вводит с клавиатуры размер матрицы и значения элементов матрицы. Программа выполняет заданную операцию и выводит на экран ее результат. Для реализации в программе предлагаются следующие операции: перемножение двух матриц, транспонирование, вычисление определителя, вычисление обратной матрицы, сложение (вычитание) двух матриц. "


Помогите решить очень срочно, пожалуйста.
Либо помогите найти ошибку в коде:
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. {Конец программы}
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Либо помогите найти ошибку в коде:
Откуда ты знаешь, что там есть ошибка? Вылетает? Тогда скажи, где... Желательно - при каких входных данных...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 2
Пол: Мужской

Репутация: -  0  +


не компилируется.. вылетает ошибка на 3-м кейсе.... Честно, прога не моя.. а брата.. напрягли помочь... парень вылетит с первого курса.. вот морочаюсь.. сама 10 лет назад все это проходила... не могу найти ошибку
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
не компилируется..
Странно... Все прекрасно компилируется..

Что за ошибку тебе выдает?

Сообщение отредактировано: Алена -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


У меня все прекрасно откомпилировалось и даже считает...
Какая у тебя ошибка вылетает?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






В данном коде неправильно написано нахождение обратной матрицы
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.09.2020 17:13
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name