1.Basic
-------------------------------------
10 dim Q(20)
20 input "a=";A
30 input "b=";B
40 for I=0 to 20
50 Q(I)=int(A/B)
60 R=A-Q(I)*B
70 A=R*100000
80 next I
90 for J=0 to 20
100 print Q(J)
120 next J
130 end
------------------------------------
5桁ずつまとめてるのがすごいです。
UBasicなら1行で書けるそうです。
私は、まずCで挑戦してみました。
2 C
------------------------------------
#include <stdio.h>
int a,b,r,i,q[20];
int main(void)
{
a=1;
while(a!=0){
printf("a=");
scanf("%d",&a);
printf("b=");
scanf("%d",&b);
for (i=0;i<=20;i++){
q[i]=a/b;
r=a-q[i]*b;
a=r*100000;
}
printf("%d.",q[0]);
for (i=1;i<=20;i++){
printf("%d",q[i]);
}
printf("\n");
}
}
----------------------------------
結構長いです。
次は、広瀬さんがLogo坊で書いてくれました。
Logo坊 は 兼宗さんによるLogoです。MS Windws 用とMSDOS用があります。
3. LogoB
--------------------------------------------------------------------
手順は 分数小数
絵を元へ
(書け ”分数を小数にする。
"10 "/ "7 "の形で入力。)
変数は "X 読んだリスト
変数は "A (最初 :X)
変数は "B (最後 :X)
続けて書け 整数 (:A / :B)
続けて書け ".
変数は "R (余り :A :B)
変数は "A (:R * 100000)
繰り返せ 100「
続けて書け 整数 (:A / :B)
変数は "R (余り :A :B)
変数は "A (:R * 100000)
」
書け ”
終り
-------------------------------------------------------------------
次は広瀬さんによる、Visual Basic版(MSWindows用)です。
4.VB
--------------------------------
Private Sub Command1_Click()
a = Text1.Text
pos = InStr(a, "/")
p = Mid(a, 1, pos - 1)
q = Mid(a, pos + 1)
Print p \ q; "."
p = (p Mod q) * 100000
For i = 1 To 100
Print p \ q
p = (p Mod q) * 100000
Next i
End Sub
Private Sub Command2_Click()
End
End Sub
-------------------------------
次は私がLinux でPerl でやってみました。
コマンドライン引数を利用してます。
5.Perl
-------------------------------
#!/usr/bin/perl
$a=$ARGV[0];
$b=$ARGV[1];
for ($i = 0;$i <= 20;$i++){
$q[$i]=int($a / $b);
$r=$a - $q[$i]*$b;
$a=$r*100000;
}
print "$q[0].";
for ($i = 1;$i <= 20;$i++){
print "$q[$i]";
}
print "\n";
-------------------------------
Tclでもやってみました。
6. tcl
---------------------------------------
#!/bin/sh
# the next line restarts using wish \
exec wish "$0" "$@"
set a [lindex $argv 0]
set b [lindex $argv 1]
for {set i 0} {$i <= 20} {incr i} {
set q($i) [expr $a / $b]
set r [expr $a - $q($i)*$b]
set a [expr $r*100000]
}
puts -nonewline $q(0)
set dot .
puts -nonewline $dot
for {set i 1} {$i <= 19} {incr i} {
puts -nonewline $q($i)
}
puts $q(20)
exit
-------------------------------------
まつもとさんと言う方が作られた、オブジェクト指向
スクリプト言語Rubyでやってみました。
7.Ruby
-------------------------------------
#!/usr/local/bin/ruby
q = Array.new(0)
a=1
while a!=0
print "a="
a=readline().to_i
if a!=0
print "b="
b=readline().to_i
for i in 0..20
q[i]=a / b
r=a-q[i]*b
a=r*100000
end
print q[0],"."
for i in 1..20
print q[i]
end
print "\n"
end
print "\n"
end
-----------------------------------
Rubyって、初心者にも本当に馴染みやすいです。
8.Lisp
次は、高橋さんによる Emacs Lisp版です。
(1) 再帰による方法
---------------------------------------------------------------------------
(defun bunsu (a b n)
(setq sho (int-to-string (/ a b)))
(setq amari (* (mod a b) 100000))
(cond ((equal n 0) (bunsu amari b (+ n 1)))
((<
n 20) (concat sho (bunsu amari b (+ n 1))))
((=
n
20) nil)))
この文末で、C-x,C-eとして、関数 bunsu をインストール。
(bunsu 22 7 0)の文末でC-x,C-eとして評価すると、結果が下に出ます。
(2) whileを使った繰り返し
---------------------------------------------------------------------------
(defun bunsu3 (a b)
; (interactive "P")
(setq a (* (mod a b) 100000))
(setq ans ())
(setq n 0)
(while (< n 21)
(setq sho (int-to-string (/ a b)))
(setq ans (concat ans sho))
(setq a (* (mod a b) 100000))
(setq n (1+ n)))
(message "Ans = %s" ans))
---------------------------------------------------------------------------