![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
troublesome |
![]() ![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 4 Пол: Женский Репутация: ![]() ![]() ![]() |
Здравствуйте!
Очень срочно нужна ваша помощь. Дан двумерный массив [1..m,1..n]. Нужно сравнить строки так: 1 со всеми, 2 со всеми и т.д. и для каждого написать число не совпадений. У меня все идеи не удались. Получается ОЧЕНЬ громоздко. Если будут хоть какие-то идеи, буду благодарна. |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата У меня все идеи не удались. Получается ОЧЕНЬ громоздко. Я не вижу, КАК именно у тебя получается. Где твое решение? Что именно для тебя - "громоздко"? |
troublesome |
![]()
Сообщение
#3
|
Группа: Пользователи Сообщений: 4 Пол: Женский Репутация: ![]() ![]() ![]() |
моя идея была в том, что бы тупо каждый раз запускать цикл for и проверять все по отдельности a[i,j]=a[i+1,j] и т.д. Но это же глупость!!! я начинающий и мне кажется, что я просто чего-то не знаю, что могло бы мне помочь при решении этой проблемы. поэтому и написала, что нужна идея,а не код. Помогите, если знаете, как делать.
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Понимаешь, в чем дело... Ты не дала достаточно информации, чтобы можно было помочь тебе в решении этой задачи. На данный момент - вопросов больше, чем ответов: Можно ли использовать дополнительную память? Обязана ли исходная матрица остаться неизменной, или она может измениться? Можно ли пользоваться подпрограммами?
Если доп. память использовать можно (или не обязательно сохранять матрицу в том виде, в котором ее получила) - возьми, отсортируй ее любым методом и за один проход посчитаешь количество повторений каждого элемента, никаких вложенных циклов. А вообще, неплохо было бы знать конечную цель всех этих махинаций с подсчетами, а то очень напоминает сагу об X, Y, Z - задача может решаться совсем не так, как ты это себе представляешь... |
troublesome |
![]()
Сообщение
#5
|
Группа: Пользователи Сообщений: 4 Пол: Женский Репутация: ![]() ![]() ![]() |
Можно ли использовать дополнительную память?(если необходимо, то можно)
Обязана ли исходная матрица остаться неизменной, или она может измениться?(изменяться она не должна. если отличий 2-х строк только 1, то в новую матрицу записывается 1 строка-копия тех, которые сравнивали, но на месте отличия пишется любой другой знак)т.е было 23456 и 23457==>23450. в итоге получается новая матрица с нулями на тех местах, где 1 отличий. Можно ли пользоваться подпрограммами?(да) еще ужаснее это то, что с новой матрицей происходит тоже самое. и это все до тех пор, пока не останется матрица со строками, которые имеют больше чем 1 отличий. Добавлено через 11 мин. а нужна мне старая матрица для того, что бы: старая матрица 0001 0010 0011 1001 1010 1011 новая 2021 2012(на месте двоек отличия) их 2 потому что сравнивали строки несколько раз. и получается 101101 011011(матрица покрытия)1-если строка новой матрицы входит в строку старой. 0-наоборот. вот для этого мне и надо понять, как сравнивать строки. |
troublesome |
![]()
Сообщение
#6
|
Группа: Пользователи Сообщений: 4 Пол: Женский Репутация: ![]() ![]() ![]() |
Всем еще раз привет.
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, но тщетно. |
volvo |
![]()
Сообщение
#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 ??? |
![]() ![]() |
![]() |
Текстовая версия | 21.04.2025 11:34 |