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 ;================================================= ======== Дело в том что функция сортирует не так как мне надо, а наоборот, по возрастанию. Пожалуйста обьясните мне как это работает, и если можно подскажите что сделать (ну это так, если недоганю ;) ) |
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 ) вроде должно работать :) |
Re: GRay[s]
Неа, так неработает вообще. Вот скопируйте код, и проверте. Но сразу предупержду, там в функции InsertionSortSentinel обьявляется тип sItem.Item, так вот его надо без первой буквы т.е. Item.Item, или тогда везде поставить s
|
Re: GRay[s]
А если не p = Before p а p = After p ? Или я мимолётно прочитав ступил? ;)
|
Re: GRay[s]
Бесплатный совет. Если не можешь понять как работает чужой код, то рядом с каждой строкой напиши комментарий что она делает, как закоментируешь все строки, так и поймешь как оно устроено и работает.
|
Re: GRay[s]
dimanche13 я так уже и сделал, но что мне делать если я даже незнаю :
--------------------------------------------------- NextItem=After After First Item - как работает это If NextItem = Null Then Return - что проверяет это --------------------------------------------------- |
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