IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Как отсортировать?, двусторонний динамич. список
volvo
сообщение 3.05.2005 23:07
Сообщение #21


Гость






В-общем, с такими файлами данных ты замучаешься делать что-либо... Тем более, что используется array of char вместо string. Что я могу сказать? Вывод не отработан, очень трудно следить за результатами. Кстати, я добился того что она начала сортировать ( для этого достаточно передавать BubbleList(nachalo); ), но при пошаговом прогоне обратил внимание, что в первой же паре, которая меняется местами, есть отрицательное значение стоимости (= -17536). Глюк? Сначала отрабатывается алгоритм, а уже потом - сортировка... :yes:
 К началу страницы 
+ Ответить 
Pukelis
сообщение 3.05.2005 23:34
Сообщение #22


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской

Репутация: -  0  +


Цитата
Вывод не отработан, очень трудно следить за результатами.

unsure.gif поетому я и не хотел ее сразу выкладывать ;) Она переделывалась из статической, где все было гладенько smile.gif

Цитата
Кстати, я добился того что она начала сортировать ( для этого достаточно передавать BubbleList(nachalo); ), но при пошаговом прогоне обратил внимание, что в первой же паре, которая меняется местами, есть отрицательное значение стоимости (= -17536). Глюк? Сначала отрабатывается алгоритм, а уже потом - сортировка...


BubbleList(nachalo); - ето куда? Алгоритм еще попробую причесать.. Иначе в пятницу звиздец настанет (( :o

Сообщение отредактировано: Pukelis - 3.05.2005 23:35
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 4.05.2005 1:53
Сообщение #23


Гость






Значится, так... smile.gif Вот что мне удалось сделать после длительного прыгания с бубном около монитора :D


Прикрепленные файлы
Прикрепленный файл  proga.rar ( 2.17 килобайт ) Кол-во скачиваний: 197
 К началу страницы 
+ Ответить 
Pukelis
сообщение 4.05.2005 7:09
Сообщение #24


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 4.05.05 1:53)
Значится, так...  smile.gif Вот что мне удалось сделать после длительного прыгания с бубном около монитора  :D

smile.gif ПАСИБ!!! :molitva: Ты - просто супер!!! :yes:
Я еще ближе к вечеру несколько вопросов по етой проге задам, чтоб во все окончательно въехать, ок? ;)

Даж не знаю как благодарить.. :p2: Глянь вот на такую штуку, что ли.. ;) Мож не видел такую оболочку, авось для твоего сайта пригодится )))
http://aldona.mii.lt/pms/fps/en/gallery.html
http://ims.mii.lt/fps/download/0.8.5/en/

ps: и еще раз: СПА-СИ-БО!!!!!! rolleyes.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Pukelis
сообщение 5.05.2005 20:59
Сообщение #25


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской

Репутация: -  0  +


Ну а вот и вопросы, которые я собирался тебе задать:

Зачем каждый раз в цикле перед присваиванием arr[i] значения переменной ch присваивать ей пробел? И что конкретно делает предпоследняя строчка?

procedure get_array(var f: text; var arr: myArray;
const n: integer);
var
i: integer;
ch: char;
begin
for i := low(arr) to high(arr) do begin
arr[i] := #32;
read(f, ch);
arr[i] := ch;
end;
for i := succ(high(arr)) to n do read(f, ch)
end;


а вот ето нужно, чтоб потом нормально пользоваться методом пузырька, да?

type
clients = ^node;
node = record
data: recType;
next, back: clients;
end;

tlist = record
first, last: clients;
end;


вот ето еще немного неясно, особенно то, что в скобках:
r.tip_komnaty := komType(ord(ch) - ord('1'));
а так же ето:
chr(ord('1') + byte(tip_komnaty))

Еще непонятно, зачем кое-где ты прописывал типы:
byte(p^.data.tip_komnaty)
longint(p^.data.cena)

Вот пока что все вопросы smile.gif Ответь до 12 завтрашнего дня, ок? :P
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 5.05.2005 22:12
Сообщение #26


Гость






Значит, по-порядку: smile.gif
Цитата(Pukelis @ 5.05.05 20:59)
Зачем каждый раз в цикле перед присваиванием arr[i] значения переменной ch присваивать ей пробел? И что конкретно делает предпоследняя строчка?

Пробел - это для гарантии того, что ни при каких условиях старое значение элемента массива не сохранится.

А предпоследняя строчка делает вот что: если в процедуру передана константа N, равная размеру массива arr, то ничего не происходит, т.е. сразу же после прочтения из файла всех элементов массива выполнение процедуры заканчивается.
А вот если мне нужно кроме строки прочесть еще и несколько символов, чтобы при следующем заходе опять спокойно считывать саму строку, то я передам в N не 10, а большее число, и процедура считает из файла дополнительно
N - high(arr) символов. Кстати, high(arr) это верхняя граница массива Arr, то есть 10 smile.gif Есть такая функция в Паскале.


Цитата(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' как признак типа комнаты, правда? smile.gif
А сами 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;
{ и ты сделаешь так: }
begin
a := 300; b := 300;
c := a * b;
WriteLn( c );
end.

То ты вроде бы должен получить 90000, но ты их не получишь. Почему? Объясняю: сначала тип результата устанавливается в самый емкий из типов операндов (в этом случае - Word), потом производится умножение, результат "запихивается" в Word... Все что не поместилось - усекается. Что имеем после усечения - 24464. А потом этот результат запишется в LongInt ( переменную C ). Вот эту ошибку ОЧЕНЬ трудно найти, она никак компилятором не определяется sad.gif

Как ее избежать? Правильно:
Var a, b: Word; c: LongInt;
begin
a := 300; b := 300;
c := LongInt( a ) * b;
WriteLn( c );
end.

Теперь результат будет заноситься в LongInt, как более емкий, и усечения не произойдет...

smile.gif Что-то много получилось...
 К началу страницы 
+ Ответить 
Pukelis
сообщение 5.05.2005 22:21
Сообщение #27


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской

Репутация: -  0  +


спасибо, ВСЕ понял! smile.gif Узнал много нового для себя! теперь бы ето хорошенько запомнить и сказать-по литовски завтра ))) Мож еще к завтру каких вопросов придумаю ^_^
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
sheka
сообщение 1.06.2011 16:43
Сообщение #28


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


я бы использовал не пузырьковую, а гибридную: тот же пузырек, но индексы чуть другие:
for i := 1 to n-1 do
for j := i+1 to n do
if a[ i ] < a[ j ] then
begin
//...
end;

вместо
for использовать while,
і : integer использовать pmin: spis
j : integer использовать pelse: spis

ГЫ: на даты не посмотрел smile.gif

Сообщение отредактировано: sheka - 1.06.2011 16:45
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V < 1 2
 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 23.04.2024 11:21
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"