Удаление повторяющихся строк матрицы, Удаление всей строки. которая повторяется и сжатие матрицы. |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Удаление повторяющихся строк матрицы, Удаление всей строки. которая повторяется и сжатие матрицы. |
Vasya_linux |
9.10.2012 12:31
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 17 Пол: Мужской Реальное имя: Вася Репутация: 0 |
Доброго времени суток, уважаемые форумчане.
Задача. В матрице mxn есть столбец (скажем первый), где элементы повторяются нужно удалить повторяющиеся строки. Ввод - вывод в файл. Кажется я запутася в циклах. Вот что у меня получилось. Если у Вас будет время, пожалуйста, помогите найти ошибку. Код Program date_term; const e=5; g=3; Type mas=array[1..e,1..g] of integer; var X,Y:mas; k,i,j,n,m:integer; f:text; name,name1:string [10]; BEGIN writeln ('Write name data file'); readln(name); assign(f,name); reset(f); for i:=1 to n do for j:=1 to m do read(f,X[i,j]); readln(f); close(f); writeln ('Write 2 name output file'); readln(name1); assign(f,name1); rewrite(f); writeln ('matr X'); for i:=1 to n do begin for j:=1 to m do write (X[i,j]:3); writeln; i:=1; while ( i<=n ) do {Esli o4erednoi element massiva X[i] raven posledyysemy, to} if X[i,j]=X[i+1,j] then begin {delete element massiva s nomerom i} for k:=i+1 to n+1 do Y[i,j]:=X[i,j+1]; {Ymensaem razmer massiva} n:=n-1 end else i:=i+1; writeln ('Izmenenniy matr Y'); for i:=1 to n do begin for j:=1 to m do write(f,Y[i,j]:3); writeln(f); end; end; close(f); END. |
TarasBer |
9.10.2012 14:56
Сообщение
#2
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Если строка плохая, то вы в Y копируете весь хвост X, а если строка хорошая, то в Y ничего не пишется, это ошибка.
-------------------- |
Vasya_linux |
9.10.2012 15:37
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 17 Пол: Мужской Реальное имя: Вася Репутация: 0 |
Подскажите, где она, эта ошибка? Что исправить?
Сообщение отредактировано: Vasya_linux - 9.10.2012 15:39 |
TarasBer |
10.10.2012 9:37
Сообщение
#4
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Ошибка примерно тут:
{Esli o4erednoi element massiva X[i] raven posledyysemy, to} Исправить надо этот участок кода на правильный. Может это пригодится: Многократное удаление символов из строки -------------------- |
Vasya_linux |
10.10.2012 10:39
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 17 Пол: Мужской Реальное имя: Вася Репутация: 0 |
Я немного упростил код, но все равно ничего не пойму.
Я постоянно путаюсь в индексах. Логически все понятно: если 1-й элемент в 1-й строке не равен 2-му в 1-й строке, тогда запишем его в новую матрицу под тем же номером(а следовательно и всю строку с ним), если нет, то проигнорируем (а следовательно всю эту строку выкинем из матрицы). Но в итоге ничего не работает. Помогите пожалуйста. Вот новый код.
|
TarasBer |
10.10.2012 13:42
Сообщение
#6
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Так ты же в коде ничего не поменял, только n:=n-1 убрал.
Давай как в статье, напиши функцию Good (i) (проверка строки на "хорошесть" - нужно ли её сохранять), функцию копирования одной строки... Сообщение отредактировано: TarasBer - 10.10.2012 13:46 -------------------- |
Текстовая версия | 29.09.2024 11:43 |