発言者: tDB
発言日: 2010 03/03 09:36
発言元: ntchba346067.chba.nt.ftth.ppp.infoweb.ne.jp
無限ループに陥ることがありますね。
脱出を試みました。
% -----------------------------------------------------------
\documentclass{jarticle}
\usepackage{emath}
\usepackage{emathPl}
\usepackage{EMbigint}
\usepackage[perl]{emathRn}
\begin{document}
\hairetusyokika{kisyutu}% 使用した乱数列を保存して重複使用を避ける
\calcval{time()}\seed
\Strsep\seed{.}\seed\dmy
\ransuuretu*[seed=\seed]{1}% 乱数初期化
\noindent
% 表を4個作るループ
\Ifor\tblnumber{0}{10}\Do{%
% 1〜25の乱順列
\Cfor{\edef\kekka{1}}{\kekka>0}{}\do{%
\ranzyunretu<min=1,max=25,kosuu=25>\zstr
\hairetukakunin{kisyutu}\zstr\kekka% 既に使用した乱数列を排除
\ifnum\kekka>0% 重複したら
\bigIAdd\seed{9713}\seed
\ransuuretu*[seed=\seed]{1}% 乱数再初期化
\fi
}%
% tabular 環境の中に置く文字列を初期化
\edef\tmpa{}%
% 列番号
\def\ival{0}%
% 乱順列は csv列ですから,コンマ区切で切り出し,tabular 環境内の文字列を構成
% 乱順列 \zstr が
% 1,3,5,7,9,11,13,15,17,19,21,23,25,2,4,6,8,10,12,14,16,18,20,22,24
% だとすると
% 以下の操作で文字列 \tmpa は
% 1&3&5&7&9\\ \hline 11&13&15&17&19\\ \hline 21&23&25&2&4\\ \hline 6&8&10&12&14\\ \hline16&18&20&22&24\\ \hline
% となります。それを tabular環境に食わせます。
\exfor\tmp:=\zstr\do{%
% 5個ごとに行替え
\IMod\ival{5}\iival
% 行の先頭には & を前置しない
\ifnum\iival=0\EMedefappend\tmpa{\tmp}\else\EMedefappend\tmpa{&\tmp}\fi
% 行末に \\\hline を付加
\ifnum\iival=4\EMedefappend\tmpa{\noexpand\\ \noexpand\hline}\fi
% 列番号をインクリメント
\Incr\ival
}%
% tabular 環境で出力
\begin{tabular}{|r|r|r|r|r|}\hline
\tmpa
\end{tabular}\quad %\\
}%
%\prhairetu{kisyutu}
\end{document}
▼関連発言
│
└◆8685:Re: saloon #790 表の中にランダムな数字を入れる方法 [tDB] 03/02 22:34
├◆8686:Re[2]: saloon #790 表の中にランダムな数字を入れる方法 [tDB] 03/02 22:38
│└◆8688:Re[3]: saloon #790 表の中にランダムな数字を入れる方法 [tDB] 03/03 08:54
│ └◆8689:Re[4]: saloon #790 表の中にランダムな数字を入れる方法.. [tDB] 03/03 09:36
└◆8690:Re[2]: saloon #790 表の中にランダムな数字を入れる方法 [genio] 03/03 10:28<-last