プログラムは以下のようになる。
10 print=print+"mp.txt" 20 print "m/p" : input "m=";M : input "p=";P 30 if M/P>3 then 20 else F=0 40 Sa=int(P/M)+1 : Ea=int(3*P/M) 50 for A=Sa to Ea 60 D=M*A-P : E=P*A : if D=0 then 130 else reduce D,E 70 Sb=max(A,int(E/D)+1) : Eb=int(2*E/D) 80 for B=Sb to Eb 90 G=D*B-E : H=E*B 100 if H@G>0 then 120 else C=H\G : F=1 110 print M,P,A,B,C 120 next B 130 next A 140 if F=0 then print M;"/";P;"has no solutions."
最初の例なので、少し詳しく解説すると、
まず、上から順に実行される。変数は大文字、予約語は小文字で表される。
ただし、これは見やすさの関係でこのように表示されているだけで、
UBASICにおいて、大文字と小文字の区別はない。
10行目は、出力先を画面とファイルにするための命令。
ふだんはコメントにしておき、プログラムが正常動作することが確認できたら、コメントから実行状態にする。
これにより、計算結果をファイルに吐き出すことができる。
20行目は、m,pの入力。m/pが3より大きかったら、再入力となる。
変数Fは解の有無を示すために使う。
int(n)はnの整数値(小数点以下切り捨て)を返す。
reduce D,Eは、D、Eを通分する(最大公約数で割る)ための命令。
A@Bは、AをBで割った余りを返す。
A\Bは、AをBで割った商(整数値)を返す。
100行目で、解が見つかったら、Fに1をセットする。
140行目でFの値を見て、0のままなら、
「解が見つからなかった」という主旨のメッセージを出す。
このプログラムにおいて、m、pをループでまわしてやり、
mについては、m=4,5,6,7
pについては、100以下の素数
についての解を求めるように修正するのは簡単である
(UBASICではn番目の素数を、prm(n)で取得できる)。
実行結果は、以下の表のとおり。
前 | この章の目次 | 次 |
---|