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

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

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

> неверно работает процедура сортировки из FAQ
atella
сообщение 2.12.2007 11:21
Сообщение #1





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

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


в общем , была поставлена задача : есть два массива упорядоченных по убыванию, создать массив ,состоящий из всех элементов исходных массивов , также упорядоченный по убыванию ...
было решено тупо скопировать все элементы , а задем применить стандартную процедуру сортировки , выбран метод пузырька...

Const
n = 8;
m = 7;

Type
TType = Integer;
arrType1 = Array[1 .. n] Of TType;
arrType2 = Array[1 .. m] Of TType;
arrType3 = Array[1 .. n+m] Of TType;

Const
a: arrType1 =
(99, 77, 55, 33, 11, 9, 7, 5);

b: arrType2 =
(88, 66, 44, 22, 10, 8, 6);


Procedure Bubble(Var source, sorted: arrType3);

Procedure SwapIndex(i, j: Integer);
Var
T: TType;
Begin
move(sorted[i], T, SizeOf(TType));
move(sorted[j], sorted[i], SizeOf(TType));
move(T, sorted[j], SizeOf(TType));
End;

Var
i, j: Integer;
Begin
move(source, sorted, SizeOf(arrType3));
For i := 1 To n+m Do
For j := n+m DownTo i Do
If sorted[Pred(j)] < sorted[j] { change here }
Then SwapIndex(Pred(j), j);
End;


Var
c,d: arrType3;
k: integer;

Begin

for k := 1 to n do
begin
c[k] := a[k];
end;


for k := 1 to m do
begin
c[k+n] := b[k];
end;

for k:=1 to m+n do write (c[k],' ');



Bubble(c, d);

writeln;
for k:=1 to m+n do write (d[k],' ')

End.
собственно все отрабатывает, но результат несколько странен :
88 77 66 55 44 33 22 11 10 9 8 7 6 6 5

то есть пропало 99 и появилось двойное 6
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
klem4
сообщение 2.12.2007 12:05
Сообщение #2


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Действительно, в приаттаченом файле к тому сообщению имел место небольшой недочет. Ошибка исправлена.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



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