データの整列
Posted feedbacks - BASIC
バブルソートってこんな感じだったかな。
see: バブルソート - Wikipedia
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | 100 DATANUM = 5 ' データ個数
110 'データX、データY、並び替え配列
120 dim x(DATANUM), y(DATANUM), idx(DATANUM)
130 '関数:データ0と1が辞書順に整列してない場合に真
140 def fnNoSort0(x0,y0,x1,y1) = (x0 > x1) or ((x0 <= x1) and (y0 > y1))
150 '関数:データ0と1が距離順に整列してない場合に真
160 def fnNoSort1(x0,y0,x1,y1) = (x0 * x0 + y0 * y0 ) > (x1 * x1 + y1 * y1)
170 '関数:整列後のX, Y を取得する
180 def fnX(n) = dx(idx(n))
190 def fnY(n) = dy(idx(n))
200 'メイン
210 gosub *DataLoad
220 mode = 0 : gosub *Sort : print "辞書順" : gosub *PrintData
230 mode = 1 : gosub *Sort : print "距離順" : gosub *PrintData
240 end
250 'データロード
260 *DataLoad
270 for i = 1 to DATANUM
280 read dx(i), dy(i)
290 idx(i) = i
300 next i
310 return
320 'データ表示
330 *PrintData
340 for i = 1 to DATANUM
350 print fnX(i), fnY(i)
360 next i
370 return
380 'ソート
390 *Sort
400 for i = 1 to DATANUM - 1
410 for j = i + 1 to DATANUM
420 if mode = 0 and fnNoSort0(fnX(i),fnY(i),fnX(j),fnY(j)) then *doSwap
430 if mode = 1 and fnNoSort1(fnX(i),fnY(i),fnX(j),fnY(j)) then *doSwap
440 goto *goNext
450 *doSwap
460 swap idx(i), idx(j)
470 *goNext
480 next j
490 next i
500 return
510 'データ
520 data 1,2, 3,4, 1,3, 2,4, 1,8
|

odz #5839() Rating1/1=1.00
(x, y) の座標情報を以下の2種類の方法で整列する機能を実現してください。
データの表現方法はタプルなり構造体/オブジェクトなり各自で適当に選んで下さい。
[ reply ]