第9回 基礎プログラミング I レポート課題 氏名:久保田 瑛一郎 学籍番号:c109058 語学クラス:英語1 コース:社会福祉 1 筆記問題 以下の問題を解答するにあたり、以下の表を用いる。 10進数 16進数対応表 10進 16進 2進 0 0 0 1 1 1 2 2 10 3 3 11 4 4 100 5 5 101 6 6 110 7 7 111 8 8 1000 9 9 1001 10 a 1010 11 b 1011 12 c 1100 13 d 1101 14 e 1110 15 f 1111 16 10 10000 17 11 10001 18 12 10010 19 13 10011 20 14 10100 21 15 10101 22 16 10110 23 17 10111 24 18 11000 25 19 11001 26 1a 11010 なお解答方法は16進数を10進数に変換し、そこで求めた2つの10進数を足し、そ の和を16進数に変換するものとする。 A 0x13を10進数に変換する 1 / 3ーーー(1) 1 / 3ーーー(2) * *ーーー(4) 16の1乗 / 16の0乗ーーー(3) 16 + 3 =19ーーー(5) 説明 ( )内の数字の順番で解く (1)16進数を1文字ずつ分ける (2) (1)で分けた16進数を対応表を用いて、10進数に変換 (3) (1)で分けた桁数分だけ後ろから16の累乗の指数を0から1ずつ足して書く。 例えば … 16の3乗、16の2乗、16の1乗、16の0乗 (4) (2)の累乗の値を求め、それを(1)で分けた数字と掛ける。 ただし0乗は0であるため「無視をして」その前の数字を書く。 例 1*16**0 =1 ↑ 上で述べた「その前の数字」 例 5*16**0 =5 ↑ 上で述べた「その前の数字」 (5) (3)で並べた数字をたす よって0x13=0d19となる 0x24を10進数に変換する。 2 / 4ーーー(1) 2 / 4ーーー(2) * *ーーー(4) 16の1乗 / 16の0乗ーーー(3) 32 / 4 =36ーーー(5) 説明 ( )内の数字の順番で解く (1)16進数を1文字ずつ分ける (2) (1)で分けた16進数を対応表を用いて、10進数に変換 (3) (1)で分けた桁数分だけ後ろから16の累乗の指数を0から1ずつ足して書く。 例えば … 16の3乗、16の2乗、16の1乗、16の0乗 (4) (2)の累乗の値を求め、それを(1)で分けた数字と掛ける。 ただし0乗は0であるため「無視をして」その前の数字を書く。 (5) (3)で並べた数字をたす よって0x24=0d36となる よってこの2つの数字を足せば19+36=55となる 0x55を16進数に変換 16 /55 16 /3----7↑ 0----3↑ 手順 基本的には2進数でなく、16進数に変換するので「16」で割る 後は2進数と同じように求めていく 最後に16より小さく割れなくなった場合、答えを[0あまり「前までに残っている 数」]として終了 矢印の方向に数字を読む よって0d24=0x37となる 解答 0x37 B 0x23を10進数に変換する 2 / 3ーーー(1) 2 / 3ーーー(2) * *ーーー(4) 16の1乗 / 16の0乗ーーー(3) 32 + 3 =35ーーー(5) 説明 ( )内の数字の順番で解く (1)16進数を1文字ずつ分ける (2) (1)で分けた16進数を対応表を用いて、10進数に変換 (3) (1)で分けた桁数分だけ後ろから16の累乗の指数を0から1ずつ足して書く。 例えば … 16の3乗、16の2乗、16の1乗、16の0乗 (4) (2)の累乗の値を求め、それを(1)で分けた数字と掛ける。 ただし0乗は0であるため「無視をして」その前の数字を書く。 例 1*16**0 =1 ↑ 上で述べた「その前の数字」 例 5*16**0 =5 ↑ 上で述べた「その前の数字」 (5) (3)で並べた数字をたす よって0x23=0d35となる 0x1eを10進数に変換する。 1 / eーーー(1) 1 / 14ーーー(2) * *ーーー(4) 16の1乗 / 16の0乗ーーー(3) 16 / 14 =30ーーー(5) 説明 ( )内の数字の順番で解く (1)16進数を1文字ずつ分ける (2) (1)で分けた16進数を対応表を用いて、10進数に変換 (3) (1)で分けた桁数分だけ後ろから16の累乗の指数を0から1ずつ足して書く。 例えば … 16の3乗、16の2乗、16の1乗、16の0乗 (4) (2)の累乗の値を求め、それを(1)で分けた数字と掛ける。 ただし0乗は0であるため「無視をして」その前の数字を書く。 (5) (3)で並べた数字をたす よって0x1e=0d30となる よってこの2つの数字を足せば35+30=65となる 0d65を16進数に変換 16 /65 16 /4----1↑ 0----4↑ 手順 基本的には2進数でなく、16進数に変換するので「16」で割る 後は2進数と同じように求めていく 最後に16より小さく割れなくなった場合、答えを[0あまり「前までに残っている 数」]として終了 矢印の方向に数字を読む よって0d65=0x41となる 解答 0x41 c 0xaaを10進数に変換する a / aーーー(1) 10 / 10ーーー(2) * *ーーー(4) 16の1乗 / 16の0乗ーーー(3) 160 + 10 =170ーーー(5) 説明 ( )内の数字の順番で解く (1)16進数を1文字ずつ分ける (2) (1)で分けた16進数を対応表を用いて、10進数に変換 (3) (1)で分けた桁数分だけ後ろから16の累乗の指数を0から1ずつ足して書く。 例えば … 16の3乗、16の2乗、16の1乗、16の0乗 (4) (2)の累乗の値を求め、それを(1)で分けた数字と掛ける。 ただし0乗は0であるため「無視をして」その前の数字を書く。 例 1*16**0 =1 ↑ 上で述べた「その前の数字」 例 5*16**0 =5 ↑ 上で述べた「その前の数字」 (5) (3)で並べた数字をたす よって0xaa=0d170となる 0x33を10進数に変換する。 3 / 3ーーー(1) 3 / 3ーーー(2) * *ーーー(4) 16の1乗 / 16の0乗ーーー(3) 48 + 3 =51ーーー(5) 説明 ( )内の数字の順番で解く (1)16進数を1文字ずつ分ける (2) (1)で分けた16進数を対応表を用いて、10進数に変換 (3) (1)で分けた桁数分だけ後ろから16の累乗の指数を0から1ずつ足して書く。 例えば … 16の3乗、16の2乗、16の1乗、16の0乗 (4) (2)の累乗の値を求め、それを(1)で分けた数字と掛ける。 ただし0乗は0であるため「無視をして」その前の数字を書く。 (5) (3)で並べた数字をたす よって0x33=0d51となる よってこの2つの数字を足せば170-51=119となる 0d65を16進数に変換 16 /119 16 /7----7↑ 0----7↑ 手順 基本的には2進数でなく、16進数に変換するので「16」で割る 後は2進数と同じように求めていく 最後に16より小さく割れなくなった場合、答えを[0あまり「前までに残っている 数」]として終了 矢印の方向に数字を読む よって0d119=0x77となる 解答 0x77 プログラム問題 A 広告ホームページは http://roy/~c109058/advertise/ である なお実用部門にエントリーする。 B a 考えた設定 最近は簿記検定も人気がある。更に最近は経理も「コンピューター化」が進んで いる。そうした背景からオンラインで損益計算書を作成できる0615_bl.rbと結果 をhtmlで表示するときに使用するoption.cssを作成した。 b もとにしたプログラム あまり「もとにした」というようなプログラムは無いが、argv_ticet.rbは参照 した。 c作成したプログラム 0615_pl.rb #!/usr/koeki/bin/ruby #インタプリタ宣言文 hiyoutotal =0 syuuekitotal = 0 print("会計期間開始日を入力します\n") #これからすることを表示 STDERR.print("商店名を入力して下さい:") syouten=gets.chomp STDERR.print("会計期間西暦年を入力して下さい:") #質問表示 kikanyear = gets.chomp.to_i #その数字の改行文字をとり、整数に見なす STDERR.print("会計期間の開始の月を入力して下さい:") #質問表示 biginmonth =gets.chomp.to_i #その数字の改行文字をとり、整数に見なす if biginmonth>12 #もし12以上の文字が入力されたら(12月以上はないから) print("無効です\n") #結果表示 exit(0) #異常終了 end #ifの終わ STDERR.print("会計期間の開始の日を入力して下さい:") #質問表示 biginday =gets.chomp.to_i #その数字の改行文字をとり、整数に見なす if biginmonth==1 #もし1とbiginmonth入力されたら(1月だったら) if biginday >31 #もし31以上入力されたら(1月は31日以上はないから) print("無効です\n") #結果表示 exit(0) #異常終了 end #ifの終わり elsif biginmonth==2 #もし2とbiginmonth入力されたら(2月だったら) if biginday >30 #もし30以上入力されたら(2月は30日以上はないから) print("無効です\n") #結果表示 exit(0) #異常終了 end #ifの終わり elsif biginmonth==3 #もし3とbiginmonth入力されたら(3月だったら) if biginday>31 #もし31以上入力されたら(3月は31日以上はないから) print("無効です/n") #結果表示 exit(0) #異常終了 end #ifの終わり elsif biginmonth==4 #もし4とbiginmonth入力されたら(4月だったら) if biginday >30 #もし30以上入力されたら(4月は30日以上はないから) print("無効です\n") #結果表示 exit(0) #異常終了 end #ifの終わり elsif biginmonth==5 #もし5とbiginmonth入力されたら(5月だったら) if biginday>31 #もし31以上入力されたら(5月は31日以上はないから) print("無効です\n") #結果表示 exit(0) #異常終了 end #ifの終わり elsif biginmonth==6 #もし6とbiginmonth入力されたら(6月だったら) if biginday >30 #もし30以上入力されたら(6月は30日以上はないから) print("無効です\n") #結果表示 exit(0) #異常終了 end #ifの終わり elsif biginmonth==7 #もし7とbiginmonth入力されたら(7月だったら) if biginday>31 #もし31以上入力されたら(7月は31日以上はないから) print("無効です/n") #結果表示 exit(0) #異常終了 end #ifの終わり elsif biginmonth==8 #もし8とbiginmonth入力されたら(1月だったら) if biginday>31 #もし31以上入力されたら(8月は31日以上はないから) print("無効です\n") #結果表示 exit(0) #異常終了 end #ifの終わり elsif biginmonth==9 #もし9とbiginmonth入力されたら(9月だったら) if biginday >30 #もし30以上入力されたら(9月は30日以上はないから) print("無効です\n") #結果表示 exit(0) #異常終了 end #ifの終わり elsif biginmonth==10 #もし10とbiginmonth入力されたら(10月だったら) if biginday>31 #もし31以上入力されたら(10月は31日以上はないから) print("無効です\n") #結果表示 exit(0) #異常終了 end #ifの終わり elsif biginmonth==11 #もし11とbiginmonth入力されたら(11月だったら) if biginday >30 #もし30以上入力されたら(11月は30日以上はないから) print("無効です\n") #結果表示 exit(0) #異常終了 end #ifの終わり elsif biginmonth==12 #もし12とbiginmonth入力されたら(12月だったら) if biginday>31 #もし31以上入力されたら(12月は31日以上はないから) print("無効です\n") #結果表示 exit(0) #異常終了 end #ifの終わり end #2つめのifの終わり STDERR.print("会計期間の終了の月を入力して下さい:") #質問表示 finishmonth =gets.chomp.to_i #その数字の改行文字をとり、整数に見なす if finishmonth >13 #もし12以上の文字が入力されたら(12月以上はないから) print("無効です\n") #結果表示 exit(0) #異常終了 end #ifの終わり STDERR.print("会計期間の終了の日を入力して下さい:") #質問表示 finishday =gets.chomp.to_i #その数字の改行文字をとり、整数に見なす if finishmonth==1 #もし1とfinishmontに入力されたら(1月だったら) if finishday >31 #もし31以上入力されたら(1月は31日以上はないから) print("無効です\n") #結果表示 exit(0) #異常終了 end #ifの終わり elsif finishmonth==2 #もし2とfinishmonthに入力されたら(2月だったら) if finishday >30 #もし30以上入力されたら(2月は30日以上はないから) print("無効です\n") #結果表示 exit(0) #異常終了 end #ifの終わり elsif finishmonth==3 #もし3とfinishmonthに入力されたら(3月だったら) if finishday>31 #もし31以上入力されたら(3月は31日以上はないから) print("無効です/n") #結果表示 exit(0) #異常終了 end #ifの終わり elsif finishmonth==4 #もし4とfinishmontに入力されたら(4月だったら) if finishday >30 #もし30以上入力されたら(4月は30日以上はないから) print("無効です\n") #結果表示 exit(0) #異常終了 end #ifの終わり elsif finishmonth==5 #もし5とbiginmonth入力されたら(5月だったら) if finishday>31 #もし31以上入力されたら(5月は31日以上はないから) print("無効です\n") #結果表示 exit(0) #異常終了 end #ifの終わり elsif finishmonth==6 #もし6とfinishmonth入力されたら(6月だったら) if finishday >30 #もし30以上入力されたら(6月は30日以上はないから) print("無効です\n") #結果表示 exit(0) #異常終了 end #ifの終わり elsif finishmonth==7 #もし7ととfinishmonth入力されたら(7月だったら) if finishday>31 #もし31以上入力されたら(7月は31日以上はないから) print("無効です/n") #結果表示 exit(0) #異常終了 end #ifの終わり elsif finishmonth==8 #もし8とfinishmonthに入力されたら(1月だったら) if finishday>31 #もし31以上入力されたら(8月は31日以上はないから) print("無効です\n") #結果表示 exit(0) #異常終了 end #ifの終わり elsif finishmonth==9 #もし9とfinishmonth入力されたら(9月だったら) if finishday >30 #もし30以上入力されたら(9月は30日以上はないから) print("無効です\n") #結果表示 exit(0) #異常終了 end #ifの終わり elsif finishmonth==10 #もし10とfinishmonthに入力されたら(10月だったら) if finishday>31 #もし31以上入力されたら(10月は31日以上はないから) print("無効です\n") #結果表示 exit(0) #異常終了 end #ifの終わり elsif finishmonth==11 #もし11と入力されたら(11月だったら) if finishday >30 #もし30以上入力されたら(11月は30日以上はないから) print("無効です\n") #結果表示 exit(0) #異常終了 end #ifの終わり elsif finishmonth==12 #もし12とfinishmonthに入力されたら(12月だったら) if finishday>31 #もし31以上入力されたら(12月は31日以上はないから) print("無効です\n") #結果表示 exit(0) #異常終了 p biginmonth biginday finishday end #ifの終わり end #2つ目のifのおわり print("費用を入力します\n") #説明 STDERR.print("売上原価の金額を入力して下さい:") #質問表示 uriagegenka =gets.chomp.to_i #それを10進数と見なし変数に入れる hiyoutotal+=uriagegenka #それを総費用の変数に入れる STDERR.print("給料の金額を入力して下さい:") #質問表示 kyuryou =gets.chomp.to_i #それを10進数と見なし変数に入れる hiyoutotal +=kyuryou #それを総費用の変数に入れる STDERR.print("支払家賃の金額を入力して下さい:") #質問表示 siharaiyatin =gets.chomp.to_i hiyoutotal +=siharaiyatin #それを総費用の変数に入れる STDERR.print("減価償却の金額を入力して下さい:") #質問表示 genkasyoukyaku =gets.chomp.to_i #それを10進数と見なし変数に入れる hiyoutotal +=genkasyoukyaku #それを総費用の変数に入れる STDERR.print("貸倒償却の金額を入力して下さい:") #質問表示 kasidaoresyoukyaku=gets.chomp.to_i #それを10進数と見なし変数に入れる hiyoutotal +=kasidaoresyoukyaku #それを総費用の変数に入れる STDERR.print("有価証券評価損の金額を入力して下さい:") #質問表示 yuukasyoukenhyoukason=gets.chomp.to_i #それを10進数と見なし変数に入れる hiyoutotal +=yuukasyoukenhyoukason #それを10進数と見なし変数に入れる STDERR.print("旅費交通費の金額を入力して下さい:") #質問表示 ryohikoutuuhi =gets.chomp.to_i #それを10進数と見なし変数に入れる hiyoutotal +=ryohikoutuuhi #それを総費用の変数に入れる STDERR.print("水道光熱費の金額を入力して下さい:") #質問表示 suidoukounetuhi =gets.chomp.to_i #それを10進数と見なし変数に入れ hiyoutotal +=suidoukounetuhi #それを総費用の変数に入れる STDERR.print("広告費の金額を入力して下さい:") #質問表示 koukokuhi =gets.chomp.to_i hiyoutotal +=koukokuhi #それを総費用の変数に入れる STDERR.print("雜費の金額を入力して下さい:") #質問表示 zappi =gets.chomp.to_i #それを10進数と見なし変数に入れる hiyoutotal +=zappi #それを総費用の変数に入れる STDERR.print("租税公課の金額を入力して下さい:") #質問表示 sozeikouka =gets.chomp.to_i #それを10進数と見なし変数に入れる hiyoutotal +=sozeikouka #それを総費用の変数に入れる print("収益を入力します\n") #説明 STDERR.print("売上の金額を入力して下さい:") #質問表示 uriage=gets.chomp.to_i #それを10進数とみなし、変数に入れる syuuekitotal+=uriage #それを総収益の変数に入れる STDERR.print("受取手数料の金額を入力して下さい:") #質問表示 uketoritesuuryou =gets.chomp.to_i #それを10進数とみなし、変数に入れる syuuekitotal+=uketoritesuuryou #それを総収益の変数に入れる STDERR.print("受取利息の金額を入力して下さい:") #質問表示 uketoririsoku =gets.chomp.to_i #それを10進数とみなし、変数に入れる syuuekitotal+=uketoririsoku #それを総収益の変数に入れる rieki =syuuekitotal -hiyoutotal #利益計算 open("0615_pl.html","w") do |keisan| #0615_pl.htmlに書込みを始める keisan.print("\n") #css設定 keisan.print("\n") #htmlのはじまりであることを宣言 keisan.print("
\n") keisan.print("\n") #本文であることを宣言 keisan.print("損益計算書
\n") #結果表示 keisan.printf("%d年%d月%d日〜翌年%d月%d日まで
\n",kikanyear,biginmonth,biginday,finishmonth,finishday) #結果表示 keisan.printf("%s\n
",syouten) #結果表示 keisan.print("費用 | 金額 | 収益 | 金額 | \n") #結果表示 keisan.print("||||
売上原価 | %d | 売上 | %d | \n",uriagegenka,uriage) #結果表示 keisan.print("||||
給料 | %d | 受取手数料 | %d | \n",kyuryou,uketoritesuuryou) #結果表示 keisan.print("||||
減価償却費 | %d | 受取利息 | %d | \n",genkasyoukyaku,uketoririsoku) keisan.print("||||
貸倒償却 | %d | \n",kasidaoresyoukyaku) keisan.print(" | |||||
支払家賃 | %d | \n",siharaiyatin) keisan.print(" | |||||
有価証券評価損 | %d | \n",yuukasyoukenhyoukason) keisan.print(" | |||||
旅費交通費 | %d | \n",ryohikoutuuhi) keisan.print(" | |||||
水道光熱費 | %d | \n",suidoukounetuhi) #結果表示 keisan.print(" | |||||
広告費 | %d | \n",koukokuhi) keisan.print(" | |||||
雜費 | %d | \n",zappi) #結果表示 keisan.print(" | |||||
租税公課 | %d | \n",sozeikouka) #結果表示 keisan.print(" | |||||
当期純利益 | %d | \n",rieki) #プラスの結果表示 else #それ以外は keisan.printf(" | 当期純損失 | %d | \n",rieki*-2 /2) #マイナスの結果表示 end #ifのおわり keisan.print("|||
%d | %d | \n",syuuekitotal,syuuekitotal) #結果表示 else #それ以外は keisan.printf("%d | %d | \n",hiyoutotal,hiyoutotal) #結果表示 end #ifのおわり keisan.print("