![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
лоен |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Репутация: ![]() ![]() ![]() |
а собственно как удалять и дублировать элементы массива?
![]() |
мисс_граффити |
![]()
Сообщение
#2
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
как массив описан? динамический, статический - какой?
в такой формулировке ответить невозможно. -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
лоен |
![]()
Сообщение
#3
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Репутация: ![]() ![]() ![]() |
ок, статический, например
const Nmax=10000; |
Client |
![]()
Сообщение
#4
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
for j:= i to n-1 do a[j]:=a[j+1] Сообщение отредактировано: Client - 19.01.2008 16:48 |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Так будет гораздо быстрее:
move(a[j + 1], a[j], (n - j)*sizeof(a[j])); { удаляем J-ый элемент } |
Client |
![]()
Сообщение
#6
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
(n - j)*sizeof(a[j])А можно пояснение? Как я понял, move это процедура, в которой 1-й параметр заменит 2-й, а вот 3-й параметр-сколько раз это повторить? Сообщение отредактировано: Client - 19.01.2008 17:11 |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Не совсем... Это процедура, которая с адреса задаваемого первым параметром переносит число байт, заданных третьим параметром в другое место, адрес которого задан вторым параметром...
Чем удобнее: тебе не надо волноваться, какой цикл поставить, по возрастанию или по убыванию, Move прекрасно справляется с этим сама: { Процедура Move тебя от таких ошибок избавляет, она сама правильно выбирает направление копирования... |
Client |
![]()
Сообщение
#8
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
А как на этом примере удалить 2-й элемент(-2-й элемент)?
uses crt; Теперь понял. Сделал так for i:=-2 to 2 do move(a[i + 1], a[i], sizeof(a[i]));А если сделать цикл до 3-х, то почему последний элемент стал 3, если ввести 1 2 3 4 5 6 7? Сообщение отредактировано: Client - 19.01.2008 18:22 |
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Ну, и в чем здесь сложность?
uses crt; Добавлено через 1 мин. Блин... Да не надо никаких циклов... Move для того и придумали, чтобы от циклов избавиться!!! |
Client |
![]()
Сообщение
#10
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
Цитата Блин... Да не надо никаких циклов... Move для того и придумали, чтобы от циклов избавиться!!! Мда, накосячил я...А что такое sizeof? И почему move(a[to_delete + 1], a[to_delete], (high(a) - to_delete)*sizeof(a[to_delete]));и move(a[to_delete + 1], a[to_delete],sizeof(a));отработали одинаково? |
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Цитата отработали одинаково? Ну, допустим, отработали они совсем не одинаково, во втором случае ты залез в области памяти, занятой другой переменной, просто не видишь этого (а компилятор тебе это не показывает). Нужно копировать столько элементов, сколько осталось с to_delete до конца массива, а размер каждого элемента в байтах - это sizeof(a[какой_нибудь_индекс])... |
Client |
![]()
Сообщение
#12
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
То-то он мне вывел sizeof(a)=14
Теперь все понял БОЛЬШОЕ СПАСИБО ![]() |
Rian |
![]()
Сообщение
#13
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 394 Пол: Мужской Репутация: ![]() ![]() ![]() |
а компилятор тебе это не показывает Кстати, смех, код протестировал на делфях. Хотел, чтобы ругнулось, а оно отработало и не заметило 1234567 1234674221616 -------------------- Objective-C, Unity3d
|
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
Цитата Хотел, чтобы ругнулось Читал бы доки внимательно - перестал бы хотеть:Цитата(D2007 Help) Description Вся ответственность за нарушение границ при использовании Move ложится на программиста. Вот, смотри, здесь явно видно, что происходит "переход" границы массива:Move copies Count bytes from Source to Dest. No range checking is performed. Move compensates for overlaps between the source and destination blocks. varЧему равен первый элемент b? |
лоен |
![]()
Сообщение
#15
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Репутация: ![]() ![]() ![]() |
гм, а дублировать?
|
Client |
![]()
Сообщение
#16
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
Цитата гм, а дублировать? Поточнее скажи, что дублировать. Пример напиши |
лоен |
![]()
Сообщение
#17
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 23 Пол: Мужской Репутация: ![]() ![]() ![]() |
ну допустим из соседнего топика)
среди оставшихся чисел нужно продублировать простые const Nmax=10000; |
Client |
![]()
Сообщение
#18
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
Проверяешь число, простое ли оно, если да, то пользуешься процедурой move
|
![]() ![]() |
![]() |
Текстовая версия | 19.07.2025 18:17 |