forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=13)
-   -   GRay[s] (http://forum.boolean.name/showthread.php?t=4355)

Miha 05.09.2007 22:37

GRay[s]
 
GRay[s] так называется мой проект, и пока всё идёт в мат. прогрессии.
Но возникают иногда проблемы.
Проблема такая:
Мне надо отсортировать поля в нутри типа по убыванию.
Вот где то здесь нашел код (пример), но ничё непонял.

;================================================= ========
MinStr$ = ""
MinInt% = -(2^31) ; This is $80000000
MinFlt# = -2 * ( 2^127 - 2^103 ) ; Could also use -(2^128) = -Infinity.

; Example uses integers. If this changes then change temp to match.

Type Item
Field Index% ; integer for this example
End Type

t.Item = New Item
t\Index = MinInt ; sentinel, the smallest integer

For n = 1 To 15
t = New Item
t\Index = Rand(9)
Next ; the actual data

ShowData
InsertionSortSentinel
ShowData

Function InsertionSortSentinel()
Local sItem.Item, NextItem.Item, p.Item
Local temp% ; must be same type as the sort field.

NextItem=After First Item
Repeat
If NextItem = Null Then Return
sItem = NextItem
NextItem=After NextItem

temp=Item\Index
p = Before Item

While temp < p\Index
p = Before p
Wend
Insert Item After p
Forever
End Function
Function ShowData( )
For a.Item = Each Item
Write a\Index+" "
Next
Print : Print
End Function
;================================================= ========
Дело в том что функция сортирует не так как мне надо, а наоборот, по возрастанию.
Пожалуйста обьясните мне как это работает, и если можно подскажите что сделать (ну это так, если недоганю ;) )

jimon 06.09.2007 00:03

Re: GRay[s]
 
по идее заменить While temp < p\Index на While temp > p\Index
MinInt% = -(2^31) на MinInt% = +(2^31)
MinFlt# = -2 * ( 2^127 - 2^103 ) на MinFlt# = +2 * ( 2^127 - 2^103 )
вроде должно работать :)

Miha 06.09.2007 15:55

Re: GRay[s]
 
Неа, так неработает вообще. Вот скопируйте код, и проверте. Но сразу предупержду, там в функции InsertionSortSentinel обьявляется тип sItem.Item, так вот его надо без первой буквы т.е. Item.Item, или тогда везде поставить s

moka 06.09.2007 16:10

Re: GRay[s]
 
А если не p = Before p а p = After p ? Или я мимолётно прочитав ступил? ;)

dimanche13 06.09.2007 16:20

Re: GRay[s]
 
Бесплатный совет. Если не можешь понять как работает чужой код, то рядом с каждой строкой напиши комментарий что она делает, как закоментируешь все строки, так и поймешь как оно устроено и работает.

Miha 06.09.2007 16:56

Re: GRay[s]
 
dimanche13 я так уже и сделал, но что мне делать если я даже незнаю :
---------------------------------------------------
NextItem=After After First Item - как работает это
If NextItem = Null Then Return - что проверяет это
---------------------------------------------------

moka 06.09.2007 17:03

Re: GRay[s]
 
NextItem=After After First Item - присваевает NextItem слудующий эллемент, после-после Item в списке эллементов.
If NextItem = Null Then Return - если эллемент NextItem отсутствует, выбросить из функции.


Часовой пояс GMT +4, время: 07:11.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot