списки-динамическая структура |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
списки-динамическая структура |
reboot |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 15 Пол: Мужской Репутация: 0 |
помогите с такой задачей:
Дан список, состоящий из N вещественных чисел. Удалить из него те звенья, значения которых меньше следующих. Организовать вывод начальной и конечной последовательности значений в списке. вопрос первый: сдесь нужен массив записей, или можно обойтись нетипизированным файлом? вопрос второй: если использовать массив то как обращаться к элементу списка при его заполнении рандомными числами? понимаю что вопросы глупые и легкие(для кого-то), но у меня просто не очень хорошо общение со списками идет. |
volvo |
Сообщение
#2
|
Гость |
Список - это список. Если ты хочешь реализовать его на массиве, он теряет все преимущества. Так что никаких массивов и файлов тебе не надо, просто получай как-то очередное значение (ну, или генерируй рандомно), потом выделяй память под элемент списка и устанавливай указатели. Примеров на списки было очень много, в FAQ-е есть модули для работы со списками. Что именно у тебя вызывает затруднение?
|
reboot |
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 15 Пол: Мужской Репутация: 0 |
прошу прощения, я понял свою ошибку. У меня просто в голове не укладывалось понимание самой структуры списка, и поэтому я думал что ее можно построить на основе массива(дурак). Вобщем я разобрался.
|
reboot |
Сообщение
#4
|
Новичок Группа: Пользователи Сообщений: 15 Пол: Мужской Репутация: 0 |
вобщем проблем не избежал, задача такая: Дан список, состоящий из N вещественных чисел. Удалить из него те звенья, значения которых меньше следующих. Организовать вывод начальной и конечной последовательности значений в списке.
проблема как раз в части кода которая отвечает за поиск и удаление... можите поправить ?? uses crt; |
volvo |
Сообщение
#5
|
Гость |
for i:=1 to number do beginВот так делать нежелательно... У тебя список, который заполнять можно циклом For, а обрабатывать потом нужно по-другому: "пока указатель не станет Nil" (запомни указатель на начало списка, иначе его потеряешь)... |
reboot |
Сообщение
#6
|
Новичок Группа: Пользователи Сообщений: 15 Пол: Мужской Репутация: 0 |
дело в том, что при выполнении условия мне надо передвинуть указатель так, чтобы предыдущий элемент списка указывал на следующий за следующим...то есть возвращаться к предыдущему и указывать на следующий за следующим....но как так сделать я не знаю.
Сообщение отредактировано: reboot - |
volvo |
Сообщение
#7
|
Гость |
Смотри. Тебе надо идти на один элемент "позади" проверяемой пары, чтобы ты мог контролировать указатель текущего элемента, и (если надо), перебросить его через один элемент:
temp := root;Но... При таком проходе по списку одна пара от тебя ускользнет: это самый первый и второй элементы, они не будут сравниваться, сравнение начнется с пары "второй - третий". Это нехорошо. Чтоб решить проблему - введи еще одну переменную, типа Boolean, и перед проходом, который я показал, присвой ей True если root^.znach < root^.sled^.znach... Иначе - False. Что это тебе даст? Потом, после прохода, и удаления меньших элементов в паре, тебе надо напечатать список? Вот если переменная равна True, удалишь из списка первый элемент, а потом начнешь печатать. Если False - ничего делать не надо, первый элемент не меньше второго, и его удалять не надо. Теперь о печати списка. Опять же, не делается это через цикл For, вот так надо: temp := root; Попробуй реализовать... Это не сложно, просто надо понять алгоритм. Начерти список со связями на бумаге, и разберись, что делается в том алгоритме, который я привел, что чему присваивается... Когда разберешься - будешь щелкать такие задачи как семечки |
reboot |
Сообщение
#8
|
Новичок Группа: Пользователи Сообщений: 15 Пол: Мужской Репутация: 0 |
спасибо огромное! ты тут описал как раз то что мне было не понятно=) впринципе стало все более яснее, но разбираться еще придется много..
|
reboot |
Сообщение
#9
|
Новичок Группа: Пользователи Сообщений: 15 Пол: Мужской Репутация: 0 |
появился новый вопрос: когда я "корню" присваиваю ссылку на второй элемент то ни чего не происходит...
но первый элемент удаляется же так?? Добавлено через 2 мин. появился новый вопрос: когда я "корню" присваиваю ссылку на второй элемент то ни чего не происходит... но первый элемент удаляется же так?? простите..проблема была в паскале...стоило поменять версию как все заработало+) Сообщение отредактировано: reboot - |
Текстовая версия | 18.04.2024 18:42 |