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

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

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

 
 Ответить  Открыть новую тему 
> сравнение строк
сообщение
Сообщение #1





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

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


Здравствуйте!
Очень срочно нужна ваша помощь. Дан двумерный массив [1..m,1..n]. Нужно сравнить строки так: 1 со всеми, 2 со всеми и т.д. и для каждого написать число не совпадений. У меня все идеи не удались. Получается ОЧЕНЬ громоздко. Если будут хоть какие-то идеи, буду благодарна.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
У меня все идеи не удались. Получается ОЧЕНЬ громоздко.
Я не вижу, КАК именно у тебя получается. Где твое решение? Что именно для тебя - "громоздко"?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





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

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


моя идея была в том, что бы тупо каждый раз запускать цикл for и проверять все по отдельности a[i,j]=a[i+1,j] и т.д. Но это же глупость!!! я начинающий и мне кажется, что я просто чего-то не знаю, что могло бы мне помочь при решении этой проблемы. поэтому и написала, что нужна идея,а не код. Помогите, если знаете, как делать.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Понимаешь, в чем дело... Ты не дала достаточно информации, чтобы можно было помочь тебе в решении этой задачи. На данный момент - вопросов больше, чем ответов: Можно ли использовать дополнительную память? Обязана ли исходная матрица остаться неизменной, или она может измениться? Можно ли пользоваться подпрограммами?

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

А вообще, неплохо было бы знать конечную цель всех этих махинаций с подсчетами, а то очень напоминает сагу об X, Y, Z - задача может решаться совсем не так, как ты это себе представляешь...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





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

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


Можно ли использовать дополнительную память?(если необходимо, то можно)
Обязана ли исходная матрица остаться неизменной, или она может измениться?(изменяться она не должна. если отличий 2-х строк только 1, то в новую матрицу записывается 1 строка-копия тех, которые сравнивали, но на месте отличия пишется любой другой знак)т.е было 23456 и 23457==>23450. в итоге получается новая матрица с нулями на тех местах, где 1 отличий.
Можно ли пользоваться подпрограммами?(да)

еще ужаснее это то, что с новой матрицей происходит тоже самое. и это все до тех пор, пока не останется матрица со строками, которые имеют больше чем 1 отличий.


Добавлено через 11 мин.
а нужна мне старая матрица для того, что бы:
старая матрица
0001
0010
0011
1001
1010
1011
новая
2021
2012(на месте двоек отличия) их 2 потому что сравнивали строки несколько раз.
и получается
101101
011011(матрица покрытия)1-если строка новой матрицы входит в строку старой. 0-наоборот.

вот для этого мне и надо понять, как сравнивать строки.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





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

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


Всем еще раз привет.


readln(k);
n:=round(exp(ln(2)*k));
k:=k+1;
for i:=1 to n do
begin
for j:=1 to k do
begin
write('a[',i,',',j,']=');
readln(a[i,j]);
end;
writeln;
end;
m:=0;
for i:=1 to n do begin
if a[i,k]=1 then m:=m+a[i,k];
end;
for i:=1 to n do
if a[i,k]=1 then
begin
for r:=1 to m do
for j:=1 to k do
g[r,j]:=a[i,j];
end;

for r:=1 to m do
begin
for j:=1 to k do
begin
write('g[',r,',',j,']=',g[r,j]);
end;
writeln;
end;
end.



тут вот что происходит. пользователь вводит кл-во переменных, программа создает матрицу(таблицу истинности+еще один столбик для значения F).
....... F
000 1
001 0
010 0 и т.д.
Далее программа отыскивает к-во строк, у которых F=1. за счет этого появляется информ. о к-ве строк в новой матрице, которая будет состоять только из тех строк, в которых F=1.
Проблема в том, что у меня выводится матрица, в которой все строки состоят из последней строки 1-й матрицы(где F=1). Пробовала найти ошибку в Pascal ABC, но тщетно.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Цитата
тут вот что происходит
Тут происходит совсем не то, что ты написала (либо опять что-то недоговаривается). То, что описано постом выше - делается так:
const
max_vars = 5;

var
k, n, i, j: integer;
T, equalOne: integer;

a: array[1 .. 1 shl max_vars, 1 .. max_vars + 1] of integer;

begin
repeat
readln(k);
if k > max_vars then writeln('неверное значение. Попробуйте еще раз');
until k <= max_vars;

n := 1 shl k;
for i := 1 to n do
begin
T := i - 1;
for j := k downto 1 do
begin
a[i, j] := T mod 2;
T := T div 2;

// Здесь можно устанавливать и значения F для строки №i:
a[i, k + 1] := i mod 2; // я просто установил F как признак нечетности строки...
end;
end;

equalOne := 0;
// собственно вывод таблицы истинности:
for i := 1 to n do
begin
for j := 1 to k do
write(a[i, j]:2);
write(a[i, k+1]:4); // Выводим F
if a[i, k+1] = 1 then inc(equalOne);
writeln;
end;

writeln('единичных значений F - ', equalOne, ' шт.');
end.
В результате имеем:
Прикрепленное изображение

Где тут нужно сравнение строк друг с другом? Я просил привести задание ПОЛНОСТЬЮ, кстати, а не кусками... Необходимо знать КОНЕЧНУЮ цель, что ты дальше будешь делать с теми строками, в которых F = 1 ???
 К началу страницы 
+ Ответить 

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

 





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