![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
habi |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
Задача. используя динамические списки, найти в массиве последнию группу положительных элементов, и удалить её.
Проблема: не могу установить указатели конца(вроде установил) и начала последней группы положительных элементов. Если есть другие предложения по алгоритму, просьба высказать. Вот набросал за сегодня :
|
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Чтоб найти последний положительный элемент (ведь именно он будет являться концом последней группы, правда?) достаточно пробежать от конца списка назад до тех пор, пока не встретишь положительный элемент или NIL (если NIL - значит выходим из программы, положительных элементов нет)...
А чтоб найти начало этой же группы - от только что найденного указателя (если он ненулевой) - опять же назад, пока элементы положительны (если в результате получишь NIL, значит, начинать удаление с самого начала)... Вот и все... |
habi |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
Вопрос решён, пришлось ввести ещё пару указателей,и рассматривать 4 условия нахождения положительной группы в списке.
Спасибо. |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата пришлось ввести ещё пару указателей ![]() |
habi |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
Нашёлся баг
Если список состоит из элементов типа этих -+++--+-+++-+ то программа просто зависала. Cейчас переделал программу, теперь мы читаем список с конца, и первый встреченный нами элемент, конец последовательности, далее читаем до 1ого отрицательного числа и запоминаем начало последовательности.
Проблема: теперь если список вида -++-+-++-, то конец последовательности находит правильно, а начало, нет. Оно выделено жирным. 2volvo: а как это без указателей начала и конца последовательности? Сообщение отредактировано: habi - 18.05.2008 12:25 |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Значит, смотри, вот твое задание, но без украшательств:
typeРазберись с тем, как оно работает, прежде чем навешивать "рюшечки", иначе потом опять будет сложнее разобраться... |
habi |
![]()
Сообщение
#7
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
Спасибо.Разберусь, но если рюшечки это вывод значений листкон и листнач и фёрст и ласт, то это для отладки =)
А цвета + кол-во памяти , это всё входит в задание. Сообщение отредактировано: habi - 18.05.2008 14:15 |
habi |
![]()
Сообщение
#8
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
Не смог разобраться, как сделать проверку на кол-во элементов в твоём коде.
Группа>2 элементов..
Сделал такую проверку, но всё равно что-то не то. Потом сделал, проверку, не одинаково ли начало и конец. Если он одинаков, то выполняем дальше передвижения..
Сообщение отредактировано: habi - 18.05.2008 16:47 |
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Ну вот расскажи мне, я тебе код привел для чего? Для того, чтоб ты его перековырял, понаписал тут всякого бреда, и потом сказал, что он не работает (пока все идет именно к этому), или чтоб ты РАЗОБРАЛСЯ, как работает МОЙ код?
Цитата Не смог разобраться, как сделать проверку на кол-во элементов в твоём коде. Не имею понятия, ЗАЧЕМ... В условии об этом нет ни слова...Цитата Потом сделал, проверку, не одинаково ли начало и конец. Как сделал, так и убери, ты не имеешь права сравнивать указатели друг с другом, это некорректно... Сравнивать указатели можно только с NIL.А теперь контрольный вопрос: что не так в коде из поста №6? На каких комбинациях он неправильно работает (меня, заметь, не интересует то, что ты добавил от себя, я говорю о задании, озвученном в первом посте)? |
habi |
![]()
Сообщение
#10
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
Спасибо за разъяснение по показателям.
Я разобрался, как работает твой код, в пошаговом режиме. В твоём коде некорректно работают комбинации типа, 1 -21 -3 31 32 -2 2 удаляет 2. Извиняюсь, Я забыл указать, что группа которую надо удалить, это больше 2 положительных элементов. Реализуй пожалуйста проверку на то является ли положительный элемент end_delete^.chisl группой =) т.е. имеется ли рядом с ним ещё один положительный элемент.. Сообщение отредактировано: habi - 18.05.2008 17:34 |
habi |
![]()
Сообщение
#11
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
Всё-таки я не могу в этом коде выделить группу.
Всё сделал. Сообщение отредактировано: habi - 19.05.2008 17:52 |
habi |
![]()
Сообщение
#12
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
Только сейчас заметил мелкий баг =(
Программа удаляет последнию группу(больше 2 элементов) положительных элементов, помогите найти утечку памяти в 16 кб. Ну или преобразовать программу volvo, чтобы она искала группу, а не последний положительный элемент..=(
Сообщение отредактировано: habi - 20.05.2008 16:59 |
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
Цитата Ну или преобразовать программу volvo, чтобы она искала группу, а не последний положительный элемент..=( А сейчас я сделаю нечто такое, чего от меня вряд ли кто-то ждет ![]() Смотри: var Комментарии были выше, так что я их убрал... К добавленному коду есть пояснение... Тестовый прогон: 1 -2 3 4 5 -6 7 -8 -9 10 |
habi |
![]()
Сообщение
#14
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
Спасибо, ты правильно понял мысль.
Но наш препод против лейблов =) я в курсовой их уже убрал =( Сейчас попробую переписать конструкцию через вайл.. п.с. кто модифицировал блок код? я копировать не могу...видел на сайте схоже тематики такую фишку, но над кодом было 2 ссылки, копировать в буфер и распечатать Сообщение отредактировано: habi - 20.05.2008 17:38 |
volvo |
![]()
Сообщение
#15
|
Гость ![]() |
Ну, тогда извращайся другими методами... Я ж не предлагаю тебе Label для организации простого цикла, правда? То, что я написал позволяет убрать сложную конструкцию из If-ов и Repeat/Until-ов, заменив ее одним Goto, в этом случае переход по метке вполне оправдан... Хотя можно попробовать сделать и без метки...
Сообщение отредактировано: volvo - 20.05.2008 17:39 |
habi |
![]()
Сообщение
#16
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
Согласен с тобой, но наш преподователь категорически против лейблов, если есть желание могу показать блоксхему одной процедуры =) там этих вайлов и репит антилов..
п.с. как засечь время выполнения программы? Сообщение отредактировано: habi - 20.05.2008 17:43 |
volvo |
![]()
Сообщение
#17
|
Гость ![]() |
Цитата наш преподователь категорически против лейблов Извращенец...Держи: var Цитата как засечь время выполнения программы? Как замерить время выполнения программы? |
habi |
![]()
Сообщение
#18
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
Что в версии с лейблами, что с ввайлами....то имеет баг =)
-1 -9 8 -1 9 8 7 -1 8 9 удаляет на 8 9, а 9 8 7, т.е. максимальную последовательность =) Противореча всякой логике... Сообщение отредактировано: habi - 20.05.2008 20:15 |
volvo |
![]()
Сообщение
#19
|
Гость ![]() |
Ну, блин... Присвой изначально Count := 1, а не 0...
1 -2 3 4 5 -6 7 -8 9 10 1 -2 3 4 5 -6 7 8 -9 10 |
habi |
![]()
Сообщение
#20
|
Новичок ![]() Группа: Пользователи Сообщений: 44 Пол: Мужской Реальное имя: Артём Репутация: ![]() ![]() ![]() |
ух как всё просто)
а я отлаживал + два условия написал которые работали, только если послед не в конце, спасибо =) надеюсь больше ничего не найду. Для работоспособности добавим проверку на последнее число, от него зависит параметр каунт.. if ( finish^.chisl > 0 ) then count:=1 else count:=0; Сообщение отредактировано: habi - 20.05.2008 20:36 |
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 16:23 |