!データの集合からランダムに重複なく選ぶ(2次元)
!http://d...content-available-to-author-only...o.jp/qa/question_detail/q14136390554
!選んだかどうかを記録する配列を用意し、
!組み合わせを1つ得たらそれがすでに選ばれたものかどうかを判定し、
!選ばれていればループを回して選び直す
!サンプルプログラムとしては100*100=10000では多いので3*2=6にした。
!選ぶ個数(繰り返し回数)は5とした。
!Fortran90以降での乱数の使用は以下のサイトを参考にした
!http://w...content-available-to-author-only...n.jp/main/programming/fortran.html
program randuniq
implicit none
!乱数用
real :: rnd
integer :: seedsize
integer,allocatable :: seed(:)
!データ数定義
integer,parameter :: xsize=3, ysize=2 !範囲内のデータの個数
integer :: n=5 !選ぶ個数(繰り返し回数)
!選んだかどうか記録する配列(0で初期化)
integer :: selected(xsize,ysize)=0
!その他の変数
integer :: xselection,yselection
integer :: i
!乱数初期化
call random_seed(size=seedsize)
allocate(seed(seedsize))
call random_seed(get=seed)
!選ぶ個数(繰り返し回数)のチェック(データ数を超えると無限ループになる)
if (n>xsize*ysize) n=xsize*ysize
!重複なく選んで出力
write(*,*)"x selection","y selection"
do i=1,n
do
call random_number(rnd)
xselection=int(rnd*xsize)
call random_number(rnd)
yselection=int(rnd*ysize)
if (selected(xselection+1,yselection+1)==0) exit
end do
selected(xselection+1,yselection+1)=1
write (*,*)xselection,yselection
end do
stop
end program
IeODh+ODvOOCv+OBrumbhuWQiOOBi+OCieODqeODs+ODgOODoOOBq+mHjeikh+OBquOBj+mBuOOBtu+8iO+8kuasoeWFg++8iQohaHR0cDovL2QuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLm8uanAvcWEvcXVlc3Rpb25fZGV0YWlsL3ExNDEzNjM5MDU1NAoh6YG444KT44Gg44GL44Gp44GG44GL44KS6KiY6Yyy44GZ44KL6YWN5YiX44KS55So5oSP44GX44CBCiHntYTjgb/lkIjjgo/jgZvjgpLvvJHjgaTlvpfjgZ/jgonjgZ3jgozjgYzjgZnjgafjgavpgbjjgbDjgozjgZ/jgoLjga7jgYvjganjgYbjgYvjgpLliKTlrprjgZfjgIEKIemBuOOBsOOCjOOBpuOBhOOCjOOBsOODq+ODvOODl+OCkuWbnuOBl+OBpumBuOOBs+ebtOOBmQoh44K144Oz44OX44Or44OX44Ot44Kw44Op44Og44Go44GX44Gm44GvMTAwKjEwMD0xMDAwMOOBp+OBr+WkmuOBhOOBruOBpzMqMj0244Gr44GX44Gf44CCCiHpgbjjgbblgIvmlbDvvIjnubDjgorov5TjgZflm57mlbDvvInjga8144Go44GX44Gf44CCCiFGb3J0cmFuOTDku6XpmY3jgafjga7kubHmlbDjga7kvb/nlKjjga/ku6XkuIvjga7jgrXjgqTjg4jjgpLlj4LogIPjgavjgZfjgZ8KIWh0dHA6Ly93Li4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5uLmpwL21haW4vcHJvZ3JhbW1pbmcvZm9ydHJhbi5odG1sCnByb2dyYW0gcmFuZHVuaXEKICBpbXBsaWNpdCBub25lCiHkubHmlbDnlKgKICByZWFsIDo6IHJuZAogIGludGVnZXIgOjogc2VlZHNpemUKICBpbnRlZ2VyLGFsbG9jYXRhYmxlIDo6IHNlZWQoOikKIeODh+ODvOOCv+aVsOWumue+qQogIGludGVnZXIscGFyYW1ldGVyIDo6IHhzaXplPTMsIHlzaXplPTIgIeevhOWbsuWGheOBruODh+ODvOOCv+OBruWAi+aVsAogIGludGVnZXIgOjogbj01ICHpgbjjgbblgIvmlbDvvIjnubDjgorov5TjgZflm57mlbDvvIkKIemBuOOCk+OBoOOBi+OBqeOBhuOBi+iomOmMsuOBmeOCi+mFjeWIl++8iDDjgafliJ3mnJ/ljJbvvIkKICBpbnRlZ2VyIDo6IHNlbGVjdGVkKHhzaXplLHlzaXplKT0wCiHjgZ3jga7ku5bjga7lpInmlbAKICBpbnRlZ2VyIDo6IHhzZWxlY3Rpb24seXNlbGVjdGlvbgogIGludGVnZXIgOjogaQoKCiHkubHmlbDliJ3mnJ/ljJYKICBjYWxsIHJhbmRvbV9zZWVkKHNpemU9c2VlZHNpemUpCiAgYWxsb2NhdGUoc2VlZChzZWVkc2l6ZSkpCiAgY2FsbCByYW5kb21fc2VlZChnZXQ9c2VlZCkKCiHpgbjjgbblgIvmlbDvvIjnubDjgorov5TjgZflm57mlbDvvInjga7jg4Hjgqfjg4Pjgq/vvIjjg4fjg7zjgr/mlbDjgpLotoXjgYjjgovjgajnhKHpmZDjg6vjg7zjg5fjgavjgarjgovvvIkKICBpZiAobj54c2l6ZSp5c2l6ZSkgbj14c2l6ZSp5c2l6ZQoKIemHjeikh+OBquOBj+mBuOOCk+OBp+WHuuWKmwogIHdyaXRlKCosKikieCBzZWxlY3Rpb24iLCJ5IHNlbGVjdGlvbiIKICBkbyBpPTEsbgogICAgZG8KICAgICAgY2FsbCByYW5kb21fbnVtYmVyKHJuZCkKICAgICAgeHNlbGVjdGlvbj1pbnQocm5kKnhzaXplKQogICAgICBjYWxsIHJhbmRvbV9udW1iZXIocm5kKQogICAgICB5c2VsZWN0aW9uPWludChybmQqeXNpemUpCiAgICAgIGlmIChzZWxlY3RlZCh4c2VsZWN0aW9uKzEseXNlbGVjdGlvbisxKT09MCkgZXhpdAogICAgZW5kIGRvCiAgICBzZWxlY3RlZCh4c2VsZWN0aW9uKzEseXNlbGVjdGlvbisxKT0xCiAgICB3cml0ZSAoKiwqKXhzZWxlY3Rpb24seXNlbGVjdGlvbgogIGVuZCBkbwogIHN0b3AKZW5kIHByb2dyYW0K