漢数字が〇..九だけでもできるようなので書き直し。
with Ada.Wide_Text_Io, Ada.Strings; use Ada.Wide_Text_Io; procedure Kuku is type 漢数字 is (〇, 一, 二, 三, 四, 五, 六, 七, 八, 九); 要素数:constant:=(漢数字'Pos(漢数字'Last)- 漢数字'Pos(漢数字'First)-漢数字'Pos(漢数字'First)+ 漢数字'Pos(漢数字'Succ(漢数字'First))); begin for 左 in 一..九 loop for 右 in 一..九 loop declare 積:Integer:=漢数字'Pos(左)*漢数字'Pos(右); 十の位:漢数字:=漢数字'Val(積/要素数); 一の位:漢数字:=漢数字'Val(積 rem 要素数); begin if 十の位/=〇 then Put(漢数字'Wide_Image(十の位)); else Put(Ada.Strings.Wide_Space&Ada.Strings.Wide_Space); end if; Put(漢数字'Wide_Image(一の位)); Put(Ada.Strings.Wide_Space&Ada.Strings.Wide_Space); end; end loop; New_Line; end loop; end Kuku;
この場合のようにT'Base=T
であれば、T'Pos(T'First)
は常に0だし T'Pos(T'Succ(T'First)))
は常に1なんで、長々と書く意味は無いんですけどね。