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

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

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





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

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


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

Есть только начало проги: ввод и вывод матрицы, а с остальным большие проблемы...
Прикрепленный файл  PR_MNOJE.PAS ( 864 байт ) Кол-во скачиваний: 493
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Что-то вроде этого:
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) do begin
j := 1;
while (j <= m) and not(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;
begin
for p := 1 to n - 1 do
for q := p + 1 to n do
if CompareRows(p, q, Mx) then writeln(p, ' : ', q);
end.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Хм... Меня посетила бредовая мысль: если работать с целочисленными значениями, то будет ли вот ЭТО корректно всегда, или только для частных случаев?

function my_compare(const p, q: integer;
const mx: Tmx): boolean;
var i, test: integer;
begin
test := 0;
for i := 1 to m do
test := test xor mx[p, i] xor mx[q, i];
my_compare := (test = 0);
end;

 К началу страницы 
+ Ответить 
сообщение
Сообщение #4





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

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


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 килобайт ) Кол-во скачиваний: 465
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Цитата
и еще: он не понимал
var
Mx: TMx
Это код не для Турбо Паскаля... Поменяй Var на Const - все должно работать...

Цитата
результат все время один и тот же, т.е. он только указывает какие строки надо сравнивать:


Вот результат запуска исходной программы:
Цитата(Console)
Running <...>
1 : 3
2 : 4
, то есть строки №1 и №3 также как строки №2 и №4 признаны "совпадающими"... Почему у тебя выдается такой результат, как ты привела - непонятно...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата(volvo @ 5.04.2007 22:53) *

то есть строки №1 и №3 также как строки №2 и №4 признаны "совпадающими"... Почему у тебя выдается такой результат, как ты привела - непонятно...


Я тоже не поняла, а если еще и константы поменять на боьшие, то там ТАКОЕ творися....
И еще мне сделали замечание, что Надо найти количество строк в максимальном множестве попарно не похожих строк заданной матрицы
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Цитата
Надо найти количество строк в максимальном множестве попарно не похожих строк заданной матрицы


А как изменить программу не догадываешься ? Надо в одном месте поставить not ...


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8





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

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


Привет!!! Как настроение?

Цитата(klem4 @ 6.04.2007 12:21) *

А как изменить программу не догадываешься ? Надо в одном месте поставить not ...

Нее... no1.gif уже не догадываюсь... Я надеялась, что забудут про эту прогу и отстанут от меня, но не тут-то было... nea.gif Эта задачка уже в печенках сидит!!! Сданы последующие 4, а эта все еще висит над душой!!! Может есть еще какие-нибудь идейки?!

Еще раз прикреплю то, что надо модернизировать:
Прикрепленный файл  PR_MNOJE.PAS ( 1.41 килобайт ) Кол-во скачиваний: 480


А вообще меня достают имено из-за этой строки: найти количество строк в максимальном множестве попарно не похожих строк заданной матрицы. как над ней тока не извращались lol.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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