Вопрос № 40978: Здравствуйте, уважаемые эксперты!!!
у меня такой вопрос ...
как написать процедуру,что бы оно провериала две матрицы,одинакови ли они или нет, с помощю обмена горизонтальниx и вертикальниx строк ...
ЗАРАНЕ ОГРОМНОЕ СПАСИБО...
Вопрос № 40.978
Здравствуйте, уважаемые эксперты!!!
у меня такой вопрос ...
как написать процедуру,что бы оно провериала две матрицы,одинакови ли они или нет, с помощю обмена горизонтальниx и вертикальниx строк ...
ЗАРАНЕ ОГРОМНОЕ СПАСИБО
Отвечает: Форсман Павел Вячеславович
Здравствуйте, Grigoryan Harut /Harutik!
Непонятен вопрос. Что такое "вертикальные строки"?
Предлагаю две функции:
1) Сравнение двух матриц - функция вернет True, если матрицы равны и False, если нет (CheckEq).
2) Если вы имеете в виду транспонирование матрицы, то воспользуйтесь этим вариантом (CheckEqT).
Функции оптимизированы по времени выполнения, хотя можно вместо конструкций while применить банальный for, но это будет не совсем правильно.
С уважением Форсман.
Приложение:
--------- Научить нельзя, но можно попробовать научиться!!!
Ответ отправил: Форсман Павел Вячеславович (статус: 1-ый класс)
Ответ отправлен: 22.04.2006, 06:53 Оценка за ответ: 5 Комментарий оценки: спасибо за ответ , но мне не етого было нужен,наверное я не xорошо обеснил
Отвечает: Полховский Александр Владимирович
Здравствуйте, Grigoryan Harut /Harutik! надо данная матрица (nxn, n всегда равна 4 , const n=4) проверять совпадаед ли он только с етой матрицой
0 1 1 0
1 0 1 1
1 1 0 1
0 1 1 0
с помощю обмена строк ето делается так
например если даная матрица такава
0 1 1 1
1 0 0 1
1 0 0 1
1 1 1 0
если у етого матрици обменим строки(горизонтальниx) 1 с 2-ой,3 с 4-ой,
1 0 0 1
0 1 1 1
1 1 1 0
1 0 0 1
потом обменим строки (вертикальниx) 1 с 2-ой,3 с 4-ой,
0 1 1 0
1 0 1 1
1 1 0 1
0 1 1 0
мы увижем что ета матрица совпадает с той матрицой ...
Задача довольно простая.
Нужно несколько преобразовать исходную матрицу и поэлементно сравнить её с "эталонной".
Для начала объявим все переменные, которые нам понадобятся:
program matrixcomparer;
uses
crt;
var
matrix1, matrix2: array[1..4, 1..4] of byte;
k1, k2:byte;
Теперь организуем ввод с клавиатуры элементов обеих матриц:
begin
clrscr;
for k1:=1 to 4 do
begin
write('Enter elements of the ', k1, ' row of the 1st matrix: ');
read(matrix1[1, k1]);
read(matrix1[2, k1]);
read(matrix1[3, k1]);
read(matrix1[4, k1]);
readln;
end;
writeln;
for k1:=1 to 4 do
begin
write('Enter elements of the ', k1, ' row of the 2nd matrix: ');
read(matrix2[1, k1]);
read(matrix2[2, k1]);
read(matrix2[3, k1]);
read(matrix2[4, k1]);
readln;
end;
writeln;
Меняем первую и вторую строки:
for k1:=1 to 4 do
begin
k2:=matrix2[k1, 1];
matrix2[k1, 1]:=matrix2[k1, 2];
matrix2[k1, 2]:=k2;
end;
Меняем третью и четвёртую строки:
for k1:=1 to 4 do
begin
k2:=matrix2[k1, 4];
matrix2[k1, 4]:=matrix2[k1, 3];
matrix2[k1, 3]:=k2;
end;
Меняем первый и второй столбцы:
for k1:=1 to 4 do
begin
k2:=matrix2[1, k1];
matrix2[1, k1]:=matrix2[2, k1];
matrix2[2, k1]:=k2;
end;
Меняем третий и четвртый столбцы:
for k1:=1 to 4 do
begin
k2:=matrix2[4, k1];
matrix2[4, k1]:=matrix2[3, k1];
matrix2[3, k1]:=k2;
end;
Проводим сравнение элементов (выводим сообщение, если какие-то элементы не равны):
for k1:=1 to 4 do
for k2:=1 to 4 do
if matrix1[k1, k2]=matrix2[k1, k2]
then writeln('[', k1, ':', k2, '] don''t match');
Завершаем:
writeln('Finished');
readln;
end.
Можно было бы не менять местами элементы, а сравнивать исходную матрицу с теми элементами, которые появляются в нужном месте после замены строк/столбцов. Но это не так понятно.
--------- Спасём нашу хрупкую планету !
Ответ отправил: Полховский Александр Владимирович (статус: Практикант)
Ответ отправлен: 23.04.2006, 15:38 Оценка за ответ: 5 Комментарий оценки: ето тоже не то что я xотел,но все равно спасибо