1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Привет всем!! Обращаюсь к вам за помощью: нужно решить прогу: две строки матрицы назовем похожими, если совпадают множества чисел, встречающихся в этих строках (не обязательно в том же порядке), найти количество строк в максимальном множестве попарно не похожих строк заданной матрицы. Заранее очень благодарна!
Есть только начало проги: ввод и вывод матрицы, а с остальным большие проблемы... PR_MNOJE.PAS ( 864 байт )
Кол-во скачиваний: 519
uses crt;
const
n = 5;
m = 4;
type
TMx = array [1..n, 1..m] of Integer;
{ вернет TRUE если строки p и q матрицы mx похожи }function CompareRows(const p, q: Integer;
const mx: TMx): Boolean;
var
i, j: Integer;
begin
i := 1;
while (i <= m) dobegin
j := 1;
while (j <= m) andnot(mx[p, i] = mx[q, j])
do inc(j);
if (j <= m) then inc(i) else i := m + 2;
end;
CompareRows := (i = m + 1);
end;
var
Mx: TMx = (
(1, 2, 3, 4),
(1, 2, 3, 5),
(4, 3, 2, 1),
(2, 3, 1, 5),
(1, 2, 2, 2)
);
p, q: Integer;
beginfor p := 1to n - 1dofor q := p + 1to n doif CompareRows(p, q, Mx) then writeln(p, ' : ', q);
end.
--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
Хм... Меня посетила бредовая мысль: если работать с целочисленными значениями, то будет ли вот ЭТО корректно всегда, или только для частных случаев?
function my_compare(const p, q: integer;
const mx: Tmx): boolean;
var i, test: integer;
begin
test := 0;
for i := 1to m do
test := test xor mx[p, i] xor mx[q, i];
my_compare := (test = 0);
end;
klem4, спасибо большое! но у меня к тебе пара вопросов: если оставить const n = 5; m = 4; , то результат все время один и тот же, т.е. он только указывает какие строки надо сравнивать: 1:2 1:3 1:4 2:3 2:4 3:4 как сделать, чтобы сравнить эти строки и вывести результат,и еще: он не понимал var Mx: TMx = ( (1, 2, 3, 4), (1, 2, 3, 5), (4, 3, 2, 1), (2, 3, 1, 5), (1, 2, 2, 2) ); и я сделала ввод через random MTX.PAS ( 1.31 килобайт )
Кол-во скачиваний: 494
то есть строки №1 и №3 также как строки №2 и №4 признаны "совпадающими"... Почему у тебя выдается такой результат, как ты привела - непонятно...
Я тоже не поняла, а если еще и константы поменять на боьшие, то там ТАКОЕ творися.... И еще мне сделали замечание, что Надо найти количество строк в максимальном множестве попарно не похожих строк заданной матрицы
А как изменить программу не догадываешься ? Надо в одном месте поставить not ...
Нее... уже не догадываюсь... Я надеялась, что забудут про эту прогу и отстанут от меня, но не тут-то было... Эта задачка уже в печенках сидит!!! Сданы последующие 4, а эта все еще висит над душой!!! Может есть еще какие-нибудь идейки?!
Еще раз прикреплю то, что надо модернизировать: PR_MNOJE.PAS ( 1.41 килобайт )
Кол-во скачиваний: 506
А вообще меня достают имено из-за этой строки: найти количество строк в максимальном множестве попарно не похожих строк заданной матрицы. как над ней тока не извращались