как удалить строку из массива? |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
как удалить строку из массива? |
klik1602 |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 49 Пол: Женский Реальное имя: Натали Репутация: 1 |
Дана матрица А порядка н. Удалить строки содержащие нулевые элементы.
|
-TarasBer- |
Сообщение
#2
|
Гость |
Удалил.
|
klik1602 |
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 49 Пол: Женский Реальное имя: Натали Репутация: 1 |
|
-TarasBer- |
Сообщение
#4
|
Гость |
Ну алгоритм применил.
|
klik1602 |
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 49 Пол: Женский Реальное имя: Натали Репутация: 1 |
а поделиться? целый день бьюсь над этой задачей..((
я уже поняла, что если матрица не динамическая, то из нее в принципе ничего удалить нельзя. Можно сделать какие-то махинации с переносом строк - на одну выше, или можно пропустить при выводе, но как это сделать правильно? у меня какой-то бред получается( даже стыдно код показывать) |
TarasBer |
Сообщение
#6
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
> даже стыдно код показывать
А зря. Именно поэтому я и разговариваю загадками. Тут не любят тех, кто ничего не делает и хочет, чтобы делали за него. > я уже поняла, что если матрица не динамическая, то из нее в принципе ничего удалить нельзя. Можно сделать какие-то махинации с переносом строк - на одну выше, или можно пропустить при выводе Для статической матрицы действительно ничего, кроме сдвига вверх, придумать невозможно. Осводобившуюся область можно занулить, можно уменьшить значение переменной vertSize (которая отвечает за кол-во выводимых и обрабатываемых строк) А алгоритм стандартный, надо только представить матрицу как массив рядов ( type TRow = array [0 .. N-1] of integer; TMatrix = array [0 .. N-1] of TRow; ), также надо написать функцию, которая определяет наличие нулевого элемента в строке. Дальше - применить алгоритм из ЧАВО, только в качестве элемента массива надо взять ряд матрицы: Многократное удаление символов из строки Сообщение отредактировано: TarasBer - -------------------- |
klik1602 |
Сообщение
#7
|
Новичок Группа: Пользователи Сообщений: 49 Пол: Женский Реальное имя: Натали Репутация: 1 |
как-то всё сложно)) а попроще нельзя никак?
Сообщение отредактировано: klik1602 - |
TarasBer |
Сообщение
#8
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Код var A: TMatrix; ... j := 0; Пройти по рядам матрицы с индексом i. Если в ряду i все числа ненулевые, то если j<i то копируем ряд i в ряд j (простыи A[j] := A[i]) увеличить j Вывести на экран первые j строк матрицы. -------------------- |
klik1602 |
Сообщение
#9
|
Новичок Группа: Пользователи Сообщений: 49 Пол: Женский Реальное имя: Натали Репутация: 1 |
я по-другому сделала)) наконец-то заработало!!)))
|
TarasBer |
Сообщение
#10
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
1.
> for p:=1 to m do a[k,p]:=a[k+1,p]; Если бы m совпадало с размером матрицы, то можно было бы писать просто a[k] := a[k + 1]; (для не совпадающего - тоже как бы можно, но не надо так делать) Для динамической матрицы (массив указателей на массивы строк) через a[k] := a[k+1] было бы идеально - копируется не ряд, а только указатель. 2. Алгоритм ужасен, для каждого удаления элемента выполняет сдвиг всей оставшейся таблицы. Именно для этого я и написал статью в ЧАВО, чтобы так не делали. Ужас в том, что эту ошибку делают не только новички. Часто обработчики некоторых форматов, написанные опытными людьми, тоже применяют операцию удаления и сдвига для каждого встреченного комментария. Впрочем, раз работает, то препода это устроит. Когда сдашь задачу преподу, напишу, как бы делал я. -------------------- |
klik1602 |
Сообщение
#11
|
Новичок Группа: Пользователи Сообщений: 49 Пол: Женский Реальное имя: Натали Репутация: 1 |
спасибо за комментарии, как сдам лабу, отпишусь)
|
Текстовая версия | 23.12.2024 20:59 |