![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
volvo |
![]()
Сообщение
#21
|
Гость ![]() |
В-общем, с такими файлами данных ты замучаешься делать что-либо... Тем более, что используется array of char вместо string. Что я могу сказать? Вывод не отработан, очень трудно следить за результатами. Кстати, я добился того что она начала сортировать ( для этого достаточно передавать BubbleList(nachalo); ), но при пошаговом прогоне обратил внимание, что в первой же паре, которая меняется местами, есть отрицательное значение стоимости (= -17536). Глюк? Сначала отрабатывается алгоритм, а уже потом - сортировка... :yes:
|
Pukelis |
![]()
Сообщение
#22
|
Новичок ![]() Группа: Пользователи Сообщений: 18 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата Вывод не отработан, очень трудно следить за результатами. ![]() ![]() Цитата Кстати, я добился того что она начала сортировать ( для этого достаточно передавать BubbleList(nachalo); ), но при пошаговом прогоне обратил внимание, что в первой же паре, которая меняется местами, есть отрицательное значение стоимости (= -17536). Глюк? Сначала отрабатывается алгоритм, а уже потом - сортировка... BubbleList(nachalo); - ето куда? Алгоритм еще попробую причесать.. Иначе в пятницу звиздец настанет (( :o Сообщение отредактировано: Pukelis - |
volvo |
![]()
Сообщение
#23
|
Гость ![]() |
Значится, так...
![]() Прикрепленные файлы ![]() |
Pukelis |
![]()
Сообщение
#24
|
Новичок ![]() Группа: Пользователи Сообщений: 18 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата(volvo @ 4.05.05 1:53) Значится, так... ![]() ![]() Я еще ближе к вечеру несколько вопросов по етой проге задам, чтоб во все окончательно въехать, ок? ;) Даж не знаю как благодарить.. :p2: Глянь вот на такую штуку, что ли.. ;) Мож не видел такую оболочку, авось для твоего сайта пригодится ))) http://aldona.mii.lt/pms/fps/en/gallery.html http://ims.mii.lt/fps/download/0.8.5/en/ ps: и еще раз: СПА-СИ-БО!!!!!! ![]() |
Pukelis |
![]()
Сообщение
#25
|
Новичок ![]() Группа: Пользователи Сообщений: 18 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ну а вот и вопросы, которые я собирался тебе задать:
Зачем каждый раз в цикле перед присваиванием 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) Вот пока что все вопросы ![]() |
volvo |
![]()
Сообщение
#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;
{ и ты сделаешь так: }
begin
a := 300; b := 300;
c := a * b;
WriteLn( c );
end.
То ты вроде бы должен получить 90000, но ты их не получишь. Почему? Объясняю: сначала тип результата устанавливается в самый емкий из типов операндов (в этом случае - Word), потом производится умножение, результат "запихивается" в Word... Все что не поместилось - усекается. Что имеем после усечения - 24464. А потом этот результат запишется в LongInt ( переменную C ). Вот эту ошибку ОЧЕНЬ трудно найти, она никак компилятором не определяется ![]() Как ее избежать? Правильно: Var a, b: Word; c: LongInt;
begin
a := 300; b := 300;
c := LongInt( a ) * b;
WriteLn( c );
end.
Теперь результат будет заноситься в LongInt, как более емкий, и усечения не произойдет... ![]() |
Pukelis |
![]()
Сообщение
#27
|
Новичок ![]() Группа: Пользователи Сообщений: 18 Пол: Мужской Репутация: ![]() ![]() ![]() |
спасибо, ВСЕ понял!
![]() |
sheka |
![]()
Сообщение
#28
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: ![]() ![]() ![]() |
я бы использовал не пузырьковую, а гибридную: тот же пузырек, но индексы чуть другие:
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 ГЫ: на даты не посмотрел ![]() Сообщение отредактировано: sheka - |
![]() ![]() |
![]() |
Текстовая версия | 18.04.2025 0:32 |