Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.30;
Скачать: CL | DM;

Вниз

Помогите люди ошибка EInvalidOp, что делать?   Найти похожие ветки 

 
Dimitriy.sd   (2003-01-22 11:48) [0]

//Для single типа ошибок переполения стека нет, а для extended
type

TDynFloatVector = array of Extended;
////----------------------------------------/////
//Пузырьковая сортировка
procedure BubbleSort(TypeSort: boolean; var A: TDynFloatVector);
var
Last_Swap, i, j, min, max: integer;
Tmp: extended;
begin
min := Low(A); max := High(A);
//Повторять пока не будет выполнено
while min < max do
begin
//Пузырек вверх
last_swap := min - 1;
i := min + 1;
while i <= max do
//Находим пузырек
case TypeSort of
True: if A[i - 1] > A[i] Then
begin
//Ищем где окрыть пузырек
tmp := A[i - 1];
j := i;
repeat
A[j - 1] := A[j];
j := j + 1;
until (A[j] > tmp) or (j > max);
A[j - 1] := tmp;
last_swap := j - 1;
i := j + 1;
end else i := i + 1;
False: if A[i - 1] < A[i] Then
begin
//Ищем где окрыть пузырек
tmp := A[i - 1];
j := i;
repeat
A[j - 1] := A[j];
j := j + 1;
until (A[j] < tmp) or (j > max);
A[j - 1] := tmp;
last_swap := j - 1;
i := j + 1;
end else i := i + 1;
end;
//Обновление максимального
max := last_swap - 1;

//Пузырек вниз
last_swap := max + 1;
// For i = max - 1 To min Step -1
i := max - 1;
while i >= min do
//Находим пузырек
case TypeSort of
True: if A[i + 1] < A[i] then //здесь возникает ошибка EInvalidOp при сортировке по возрастанию
begin
//Ищем где открыть пузырек
tmp := A[i + 1];
j := i;
repeat
A[j + 1] := A[j];
dec(j);
until (A[j] < tmp) or (j < min);
A[j + 1] := tmp;
last_swap := j + 1;
i := j - 1;
end else dec(i);
False: if A[i + 1] > A[i] then //здесь возникает ошибка EInvalidOp при сортировке по убыванию
begin
//Ищем где открыть пузырек
tmp := A[i + 1];
j := i;
repeat
A[j + 1] := A[j];
dec(j);
until (A[j] > tmp) or (j < min);
A[j + 1] := tmp;
last_swap := j + 1;
i := j - 1;
end else dec(i);
end;
//Обновляем минимальное
min := last_swap + 1;
end;
end;


Если есть время пожалуйста помогите. С уважением Дмитрий.


 
Digitman ©   (2003-01-22 11:56) [1]

чтой-то ты намудрииил)

вот для образца пузырьковая сортировка по возрастанию
:

TDynFloatVector = array of Extended;

procedure BubbleSortUp(var A: TDynFloatVector);
var
I, J: Integer;
T: Extended
begin
for I := High(A) downto Low(A) do
for J := Low(A) to High(A) - 1 do
if A[J] > A[J + 1] then
begin
T := A[J];
A[J] := A[J + 1];
A[J + 1] := T;
end;
end;


 
dimitriy.sd   (2003-01-22 12:01) [2]

Я эту вещь с Basica переводил. Огромное спасибо Digitman за ответ.


 
Digitman ©   (2003-01-22 12:10) [3]

делать тебе нечего было))
открыл бы демо-проект в составе Делфи (threads.dpr обзывается), там тебе и пузырьковая и быстрая сортировки готовые - как на ладони) ... Заметь - работающие !)


 
han_malign ©   (2003-01-22 12:26) [4]

Offtopic
To min Step -1 = downto min :))))


 
dimitriy.sd   (2003-01-22 12:30) [5]

Han_malign я тебя не особо понял. Поясни.
Digitman я смотрел TThread examples. Thanks a lot.


 
Digitman ©   (2003-01-22 12:55) [6]


> dimitriy.sd


Не за фто)

Просто возьми себе за оч полезную привычку - прежде чем "изобретать велосипед", не поленись и полюбопытствуй, а нет ли аналогичных либо схожих готовых реализаций (фрагментов похоже работающего кода) среди демо-проектов... На то они и демо-проекты !) ... Зря что ли Борланд парился рисовать их для нас с тобой)

В данном случае нужно было всего лишь осуществить сквозной поиск pas-файлов в каталоге ($DELPHI) по кл.слову "bubblesort" как фрагменту текста - и давно бы уже на "велике" катался)))



Страницы: 1 вся ветка

Текущий архив: 2003.01.30;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.027 c
1-96658
Соловьев
2003-01-20 16:03
2003.01.30
Как в StringGrid-e в одной строке разбить столбец?


4-97102
GoldenFILL
2002-12-14 13:28
2003.01.30
Конвертация double и int64 в string


8-96896
Kuljok
2002-10-12 21:12
2003.01.30
Громкость wav файла


1-96664
Артём К
2003-01-21 16:16
2003.01.30
Как определить, что в Edit ни чего не введено!


1-96755
sbz
2003-01-20 14:43
2003.01.30
Переменные