# 第８回課題

## プロフィール

氏名:安達 一貴
学籍番号:C1190067
クラス:IB

### 問題の答えとその説明

#### 各設問の答えと説明

##### 問１、自分の誕生日の西暦年、月、日を全部足した数を 2進数と16進数に直せ

自分の誕生日の西暦2001年01月01日を全部足した数
2001+01+01=2003
＜答え＞
2進数・・・11111010011　　　　　16進数・・・7d3
＜説明＞
「2進数」・・・１０進数の値から２進数を求める場合には、２進数に変換したい１０進数の商が０になるまで２で割っていき余りの値を求める。
そして、その際に求められた余りの値を下から上に読むと「１１１１１０１００１１」となる。

       ２)２００３　　 余り

       ２)１００１・・・１

    　 ２)　５００・・・１

       ２)　２５０・・・０

       ２)　１２５・・・０

       ２)　　６２・・・１

       ２)　　３１・・・０

       ２)　　１５・・・１

       ２)　　　７・・・１

       ２)　　　３・・・１

       ２)　　　１・・・１

       ２)　　　０・・・１　　↑　下から上に読む

「16進数」・・・２進数の計算にて求められた値「１１１１１０１００１１」を右から4桁ごとに区切と「１１１，１１０１，００１１」というように分けられる。
分けた２進数の値を１６進数に直すと「７ｄ３」となる。
０１１１→７
１１０１→ｄ
００１１→３

##### 字で書いた自分の名前の文字列の 各文字の文字コードを１６進数で表記せよ。

    自分の名前「Adachi　Kazuki」

    ＜答え＞

    　「A」・・・０ｘ４１

    　「d」・・・０ｘ６４

    　「a」・・・０ｘ６１

    　「c」・・・０ｘ６３

    　「h」・・・０ｘ６８

    　「i」・・・０ｘ６９

    　「K」・・・０ｘ４Ｂ

    　「a」・・・０ｘ６１

    　「z」・・・０ｘ７Ａ

    　「u」・・・０ｘ７５

    　「k」・・・０ｘ６Ｂ

    　「i」・・・０ｘ６９

＜説明＞
課題であるローマ字で書いた自分の名前「Adachi Kazuki」を１６進数で表記するために講義にて説明されたＡＳＣＩＩコード表を使用した。
表から「Ａ」は4行目の1列目にあるため「４１」、「ｄ」は6行目の4列目にあるため「６４」、「a」は6行目の1列目にあるため「６１」
「ｃ」は6行目の3列目にあるため「６３」、「ｈ」は6行目の8列目にあるため「６８」、「 i 」は6行目の9列目にあるため「６９」
「Ｋ」は4行目のB列目にあるため「４Ｂ」、「a」は6行目の1列目にあるため「６１」、「ｚ」は7行目のＡ列にあるため「７Ａ」
「u 」は7行目の5列目にあるため「７５」、「ｋ」は6行目のＢ列にあるため「６Ｂ」、「i」は6行目の9列目にあるため「６９」となる。
（2進数を表記する場合には「０ｂ」、16進数を表記する場合には「０ｘ」、8進数を表記する場合には「０」を数値の先頭に付ける。10進数の場合には何もつけない。）

##### 新しく作成したプログラム

課題番号...第7回の6番の問題
「作成プログラム」

    #!/usr/koeki/bin/ruby
    #-*- coding: utf-8*-

    name=[]
    bunrui=[]
    syouhin=[]
    kakaku=[]
    i= 0
    sum=0
    a=0
    open("receipt.txt","r")do|rece|
      open("result.txt","w")do|kotae|
      kotae.puts"      公益スーパー"
      kotae.puts""
      kotae.puts"        <領収書>"
      kotae.puts""
      kotae.puts"         公益店"
      kotae.puts"TEL:090-1234-5678     レジ:2番"
      kotae.puts"2020年6月30日"
      kotae.puts"<商品>"
      while line = rece.gets
        if/(\S+\s*+\S+)\s+(\d+)\s+(.+)\s+(\d+)/=~ line
          name[i]= $1
          bunrui[i]= $2.to_i
          syouhin[i] = $3
          kakaku[i] = $4.to_i
          printf("%d %s %d円\n",i,$1,$4.to_i)
          i+=1
        end
      end
     while true
      print"注文?(qで終了)\n"
      line=gets.chomp!
      if line =="q"
        break
      end
      number = line.to_i
      if number<0 ||number>=name.length
        puts"ないです"
        redo
      end
      printf("%sを買いました\n",name[number])
      sum+=kakaku[number]
      kotae.printf("%s %d円\n",name[number],kakaku[number])
     end
     STDOUT.printf("合計金額は%d円です\n",sum)
     kotae.puts"----------------------------"
     kotae.printf("合計金額%d円\n",sum)
      end
    end

プログラムの結果とtxtファイル
「プログラムの結果」

    0 "モコモコスパゲッティ" 880円
    1 "suidou ざ・movie" 3980円
    2 "無邪気白熊" 240円
    3 "ウィリーCUB" 180000円
    4 "恋愛大皿左巻き" 54000円
    注文?(qで終了)
    0
    "モコモコスパゲッティ"を買いました
    注文?(qで終了)
    1
    "suidou ざ・movie"を買いました
    注文?(qで終了)
    2
    "無邪気白熊"を買いました
    注文?(qで終了)
    3
    "ウィリーCUB"を買いました
    注文?(qで終了)
    4
    "恋愛大皿左巻き"を買いました
    注文?(qで終了)
    q
    合計金額は239100円です

「結果txtファイル」

          公益スーパー

            <領収書>

             公益店
    TEL:090-1234-5678     レジ:2番
    2020年6月30日
    <商品>
    "モコモコスパゲッティ" 880円
    "suidou ざ・movie" 3980円
    "無邪気白熊" 240円
    "ウィリーCUB" 180000円
    "恋愛大皿左巻き" 54000円
    ----------------------------
    合計金額239100円

「プログラムの説明」

    6番の課題内容は「receipt.txt にあるデータを入力として 購入したものや合計
    金額などを本物のレシートのような書式で result.txt ファイルに出力するプロ
    グラム 」の作成だったため最初に読みこむファイル「receipt.txt」と、商品名
    と価格を抜きだし書き出すファイル「result.txt」を指定した
          open("receipt.txt","r")do|rece|
          open("result.txt","w")do|kotae|
    今回は読みこむファイルと書き出すファイルの指定だったためモードは読み込みのモードである"r"と書き込みのモードである"w"を使用した。
    その後、open("receipt.txt","r")do|rece|で開いたファイルからデータを読みこみ処理するプログラムとopen("result.txt","w")do|kotae|に抜き出し、書き出す内容を指定し処理するプログラムを作った。
    また、kotae.puts""とすることで出力先に""の中の文字が表示されるようにした。今回の課題では本物のレシートのような形で出力する必要があったためkotae.puts""のようなプログラムを作成した。printやprintfでは改行をするために最後に\nを入れる必要があるが、putsでは\nを入れなくても自然と行の終りに改行が入る形になるため\nを入れる必要がない.
    open("receipt.txt","r")do|rece|
      open("result.txt","w")do|kotae|
      kotae.puts"      公益スーパー"
      kotae.puts""
      kotae.puts"        <領収書>"
      kotae.puts""
      kotae.puts"         公益店"
      kotae.puts"TEL:090-1234-5678     レジ:2番"
      kotae.puts"2020年6月30日"
      kotae.puts"<商品>"
      while line = rece.gets
        if/(\S+\s*+\S+)\s+(\d+)\s+(.+)\s+(\d+)/=~ line
          name[i]= $1
          bunrui[i]= $2.to_i
          syouhin[i] = $3
          kakaku[i] = $4.to_i
          printf("%d %s %d円\n",i,$1,$4.to_i)
          i+=1
        end
      end

    次にお客様に自由に注文してもらうためのプログラムを作成した。まず始めに何
    を注文するかを聞く画面を表示しその後、メニュー番号を入力することでその番
    号の食べ物を注文できるようにしその後、注文を繰り返し取れるようにし、qを
    入力することで注文を終らせる事が出来るプログラムを作成した。
    また、if number<0 ||number>=name.length
        puts"ないです"
        redo
      end
     とすることで０から４番以外の数字が入力された際には「ないです」と表示されるようにした。

    while true
      print"注文?(qで終了)\n"
      line=gets.chomp!
      if line =="q"          #"q"を入力したら
        break                #   終了
      end
      number = line.to_i      #メニューに番号をつける(整数にする)
      if number<0 ||number>=name.length
        puts"ないです"
        redo
      end
      printf("%sを買いました\n",name[number])
      sum+=kakaku[number]
      kotae.printf("%s %d円\n",name[number],kakaku[number])
     end

    そして最後に、標準出力をし注文した商品の合計金額を出力を出来るようにした。

    STDOUT.printf("合計金額は%d円です\n",sum)
     kotae.puts"----------------------------"
     kotae.printf("合計金額%d円\n",sum)
      end
    end

### 今後のプログラム目標

様々なスキルや技名などを用意し、ガチャガチャをする事で出てきたものをステータスに追加することでキャラを強化できるプログラム。

### 参考文献

広瀬雄二 "#07 ファイルの入出力" 2020年基礎プログラミングI
http://roy.e.koeki-u.ac.jp/~yuuji/2020/pf1/07/index.html (2020-06-30参照)
広瀬雄二 "#08 計算機の内部表現" 2020年基礎プログラミングI
http://roy.e.koeki-u.ac.jp/~yuuji/2020/pf1/08/report.html (2020-06-30参照)
"Webページ作成の基礎" 情報リテラシ−II
http://roy/web/ (2020-07-01参照)

### 課題作成時間

約7時間

### 感想

今回の課題では計算問題だけだったためいつもより課題自体はすぐにおわすことが出来
追加課題のHTML作成と過去の課題の作成に取り組むことが出来た。これからの基礎プロ
グラミングも頑張っていきたい。