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