こんなやりかたも
def f(dex[])
var n = len(dex), tmp[n], index[n]
copy tmp, dex
for i = 0 to n - 1
index[i] = i
next
rsort tmp, index
return index
end
var n=10, dex[n], index[n], i, j
for i = 0 to n - 1: dex[i] = rnd(10): next
index = f(dex)
for i = 0 to n - 1: j = index[i]: ? format$("dex[%d]=%d", j, dex[j]): next
MIKIさんのプログラムを動かせたら、どんな処理をしているか1行ずつ解析していくといろいろ勉強になったりします。
・def f で定義された関数(ユーザ定義命令)は 素早さ配列を引数に渡すと、素早さ配列の何番目が早いかの配列を返してくれる。
・def f の中の var で宣言された index と、 def f の外で var で宣言された index は別の変数で宣言される(最後に代入されて同じ内容になるけど)
・rsort tmp, index は、tmpの並び替え結果で index も同じ並び替えをしてくれる
このへんを意識しておけば、動きはみえてくるかも。
解析して分かったことをプログラムにコメントで書いたり、紙に書いたり、この変数にこの値が入ってるとすると結果はこう動くはず、って感じで考えると理解しやすくなるかもです。