Как отсортировать?, двусторонний динамич. список |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Как отсортировать?, двусторонний динамич. список |
volvo |
3.05.2005 23:07
Сообщение
#21
|
Гость |
В-общем, с такими файлами данных ты замучаешься делать что-либо... Тем более, что используется array of char вместо string. Что я могу сказать? Вывод не отработан, очень трудно следить за результатами. Кстати, я добился того что она начала сортировать ( для этого достаточно передавать BubbleList(nachalo); ), но при пошаговом прогоне обратил внимание, что в первой же паре, которая меняется местами, есть отрицательное значение стоимости (= -17536). Глюк? Сначала отрабатывается алгоритм, а уже потом - сортировка... :yes:
|
Pukelis |
3.05.2005 23:34
Сообщение
#22
|
Новичок Группа: Пользователи Сообщений: 18 Пол: Мужской Репутация: 0 |
Цитата Вывод не отработан, очень трудно следить за результатами. поетому я и не хотел ее сразу выкладывать ;) Она переделывалась из статической, где все было гладенько Цитата Кстати, я добился того что она начала сортировать ( для этого достаточно передавать BubbleList(nachalo); ), но при пошаговом прогоне обратил внимание, что в первой же паре, которая меняется местами, есть отрицательное значение стоимости (= -17536). Глюк? Сначала отрабатывается алгоритм, а уже потом - сортировка... BubbleList(nachalo); - ето куда? Алгоритм еще попробую причесать.. Иначе в пятницу звиздец настанет (( :o Сообщение отредактировано: Pukelis - 3.05.2005 23:35 |
volvo |
4.05.2005 1:53
Сообщение
#23
|
Гость |
Значится, так... Вот что мне удалось сделать после длительного прыгания с бубном около монитора :D
Прикрепленные файлы proga.rar ( 2.17 килобайт ) Кол-во скачиваний: 197 |
Pukelis |
4.05.2005 7:09
Сообщение
#24
|
Новичок Группа: Пользователи Сообщений: 18 Пол: Мужской Репутация: 0 |
Цитата(volvo @ 4.05.05 1:53) Значится, так... Вот что мне удалось сделать после длительного прыгания с бубном около монитора :D ПАСИБ!!! :molitva: Ты - просто супер!!! :yes: Я еще ближе к вечеру несколько вопросов по етой проге задам, чтоб во все окончательно въехать, ок? ;) Даж не знаю как благодарить.. :p2: Глянь вот на такую штуку, что ли.. ;) Мож не видел такую оболочку, авось для твоего сайта пригодится ))) http://aldona.mii.lt/pms/fps/en/gallery.html http://ims.mii.lt/fps/download/0.8.5/en/ ps: и еще раз: СПА-СИ-БО!!!!!! |
Pukelis |
5.05.2005 20:59
Сообщение
#25
|
Новичок Группа: Пользователи Сообщений: 18 Пол: Мужской Репутация: 0 |
Ну а вот и вопросы, которые я собирался тебе задать:
Зачем каждый раз в цикле перед присваиванием arr[i] значения переменной ch присваивать ей пробел? И что конкретно делает предпоследняя строчка? procedure get_array(var f: text; var arr: myArray; а вот ето нужно, чтоб потом нормально пользоваться методом пузырька, да? type вот ето еще немного неясно, особенно то, что в скобках: r.tip_komnaty := komType(ord(ch) - ord('1')); а так же ето: chr(ord('1') + byte(tip_komnaty)) Еще непонятно, зачем кое-где ты прописывал типы: byte(p^.data.tip_komnaty) longint(p^.data.cena) Вот пока что все вопросы Ответь до 12 завтрашнего дня, ок? :P |
volvo |
5.05.2005 22:12
Сообщение
#26
|
Гость |
Значит, по-порядку:
Цитата(Pukelis @ 5.05.05 20:59) Зачем каждый раз в цикле перед присваиванием arr[i] значения переменной ch присваивать ей пробел? И что конкретно делает предпоследняя строчка? Пробел - это для гарантии того, что ни при каких условиях старое значение элемента массива не сохранится. А предпоследняя строчка делает вот что: если в процедуру передана константа N, равная размеру массива arr, то ничего не происходит, т.е. сразу же после прочтения из файла всех элементов массива выполнение процедуры заканчивается. А вот если мне нужно кроме строки прочесть еще и несколько символов, чтобы при следующем заходе опять спокойно считывать саму строку, то я передам в N не 10, а большее число, и процедура считает из файла дополнительно N - high(arr) символов. Кстати, high(arr) это верхняя граница массива Arr, то есть 10 Есть такая функция в Паскале. Цитата(Pukelis @ 5.05.05 20:59) а вот ето нужно, чтоб потом нормально пользоваться методом пузырька, да? Именно. Чтобы проще было менять записи местами...Цитата(Pukelis @ 5.05.05 20:59) вот ето еще немного неясно, особенно то, что в скобках: r.tip_komnaty := komType(ord(ch) - ord('1')); а так же ето: chr(ord('1') + byte(tip_komnaty)) У тебя читается символ от '1' до '4' как признак типа комнаты, правда? А сами k1, k2, k3, k4 в описании komType = (k1,k2,k3,k4); чему равны, ты знаешь? Для компилятора 0, 1, 2 и 3 соответственно. Вот и пользуемся этим. Берем порядковый номер символа и вычитаем из него номер '1' - цы. Результат приводим к нужному типу, чтобы не было сообщений о несовместимости. Вторая строка - то же самое, только обратный процесс... Цитата(Pukelis @ 5.05.05 20:59) Еще непонятно, зачем кое-где ты прописывал типы: byte(p^.data.tip_komnaty) longint(p^.data.cena) Первый случай - чтобы избежать несовместимости... Если там не поставить byte(), то программа даже не скомпилируется. Но это не страшно, потому что проблема явная, и ты знаешь, что она есть. А значит - решишь. Вот вторая строка - ГОРАЗДО опаснее. В Паскале есть очень нехорошая особенность - Тип результата приводится к самому емкому из типов операндов. Так вот если у тебя есть: Var a, b: Word; c: LongInt; То ты вроде бы должен получить 90000, но ты их не получишь. Почему? Объясняю: сначала тип результата устанавливается в самый емкий из типов операндов (в этом случае - Word), потом производится умножение, результат "запихивается" в Word... Все что не поместилось - усекается. Что имеем после усечения - 24464. А потом этот результат запишется в LongInt ( переменную C ). Вот эту ошибку ОЧЕНЬ трудно найти, она никак компилятором не определяется Как ее избежать? Правильно: Var a, b: Word; c: LongInt; Теперь результат будет заноситься в LongInt, как более емкий, и усечения не произойдет... Что-то много получилось... |
Pukelis |
5.05.2005 22:21
Сообщение
#27
|
Новичок Группа: Пользователи Сообщений: 18 Пол: Мужской Репутация: 0 |
спасибо, ВСЕ понял! Узнал много нового для себя! теперь бы ето хорошенько запомнить и сказать-по литовски завтра ))) Мож еще к завтру каких вопросов придумаю ^_^
|
sheka |
1.06.2011 16:43
Сообщение
#28
|
Я. Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: 11 |
я бы использовал не пузырьковую, а гибридную: тот же пузырек, но индексы чуть другие:
for i := 1 to n-1 do вместо for использовать while, і : integer использовать pmin: spis j : integer использовать pelse: spis ГЫ: на даты не посмотрел Сообщение отредактировано: sheka - 1.06.2011 16:45 |
Текстовая версия | 23.04.2024 11:21 |