|
92 / 59 / 8
Регистрация: 09.11.2011
Сообщений: 443
|
|||||||||||
сдвиг в массиве состоящим из сложных объектов20.01.2012, 16:49. Показов 1477. Ответов 10
Метки нет (Все метки)
Есть массив
Вопрос Как теперь передвинуть все последующие назад ,те A[3]:=A[4], A[4]:=A[5] и тд Дело в том, что простое приравнивание ничего не дает. Команда
Скажите Как сдвинуть? Добавлено через 1 минуту Еще хочу добавить, что раз была команда Free значит объект надо создать, наверное Добавлено через 24 минуты и еще дело в том что это массив визуальных объектов расположенных на экране, их должно быть видно
0
|
|||||||||||
| 20.01.2012, 16:49 | |
|
Ответы с готовыми решениями:
10
В одномерном массиве, состоящим из n целых элементов, вычислить В однородном массиве, состоящим из n вещественных элементов, вычислить: в одномерном массиве состоящим из веществ элементов вычислить: |
|
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
|
| 20.01.2012, 17:12 | |
|
Cheb, опубликуй код. - Тогда можно будет начать разбираться.
1
|
|
|
brony
77 / 57 / 4
Регистрация: 02.01.2012
Сообщений: 521
|
||
| 20.01.2012, 17:41 | ||
|
i, kk: integer; begin kk:= номер символа, что удалил for i:= kk to длина массива A[i-1]:=i; вроде так. каждый последующий элемент сдвигаешь на 1 назад.
0
|
||
|
92 / 59 / 8
Регистрация: 09.11.2011
Сообщений: 443
|
|||||||
| 20.01.2012, 20:22 [ТС] | |||||||
|
вот код Похоже копирование объектов типа А=В не работает. Чем заменить? Может через указатели или загрузить объект в поток, и вытащить?
0
|
|||||||
|
1591 / 664 / 225
Регистрация: 09.06.2011
Сообщений: 1,334
|
||||||
| 21.01.2012, 02:58 | ||||||
1
|
||||||
|
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
|||||||||||
| 21.01.2012, 14:00 | |||||||||||
|
Cheb, в твоём коде ссылка на тот объект, который надо удалить теряется. А сам этот объект так и остаётся в памяти. Кроме этого, ты удаляешь из памяти другой объект - ссылка на который расположена в конце массива. И при этом получаешь битую ссылку на объект в предпоследнем элементе массива - потому что эта ссылка после сдвига элементов равна ссылке в последнем элементе, а последний элемент уже удалён из памяти. Из-за этого программа начинает работать неправильно.
Метод надо переписать таким образом:
Cheb, расскажу, что было неверного в исходном коде:
2
|
|||||||||||
|
92 / 59 / 8
Регистрация: 09.11.2011
Сообщений: 443
|
||
| 23.01.2012, 08:43 [ТС] | ||
|
Добавлено через 3 минуты Mawrat, спасибо огромное прекрасно работает код. Я ещё не понял что было не так, Думал , что перед удалением объекта нужно его передвинуть и удалить последний. Добавлено через 11 часов 24 минуты Не-е , Mawrat хотя код и работает, но если прогонять через F7 видно, что последний элемент всегда остается (либо ссылка на него- еще не разобрался). Заметил, что когда я эту процедуру в цикле делаю-пытаясь удалить ВСЕ элементы, один-два остаются... Проблема в цикле решилась пока, так, что я цикл делаю с конца до 1-го элемента, тк последний элемент удаляется корректно. Ладно пока так , потом разберусь...
0
|
||
|
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
||
| 23.01.2012, 12:00 | ||
Мы же должны удалить не последний элемент, а тот, у которого индекс равен ID. Последний элемент надо удалять только если ID = Count. Надо помнить, что элементами массива являются указатели на объекты. И мы должны работать и с указателями и с самими объектами. После сдвига элементов массива влево ссылка (указатель) на последний элемент повторится (скопируется) и в последнем и предпоследнем элементах массива окажутся одинаковые указатели, указывающие на один и тот же объект. После этого мы уменьшаем Count - количество значимых элементов и нам не важно какие ссылки (указатели) записаны в элементы с индексами, большими, чем Count.В приложенных рисунках я показал, что происходит при выполнении метода TTableForm.DelObj(). На рисунках: PSt1, PSt2, ... - это элементы массива, т. е., это указатели на экземпляры класса TStaticText. St1, St2, ... - это сами экземпляры класса TStaticText.
1
|
||
|
92 / 59 / 8
Регистрация: 09.11.2011
Сообщений: 443
|
|
| 23.01.2012, 14:08 [ТС] | |
|
Ага. Понятно, просто у меня все привязано к тому существует ли адрес или нет. Поэтому я и использовал FreeAndNil
И во время прогона я видел эту последнюю ссылку. Стало быть надо её просто "обнулить" сделать A[i]=nil Спасибо за картинки. Давно хотел в этом разобраться.
0
|
|
|
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
|
|||
| 23.01.2012, 15:25 | |||
Наверное, лучше к этому не привязываться. Хотя я не знаю особенностей программы и на верняка утверждать не возьмусь.Почему всегда нужно использовать FreeAndNil() вместо Free().
0
|
|||
| 23.01.2012, 15:25 | |
|
Помогаю со студенческими работами здесь
11
В массиве R, состоящим из N элементов заменить все отрицательные элементы на ноль В одномерном массиве, состоящим из N вещественных элементов, найти максимальный элемент Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|