(6)05/25の授業内容
- 値の型変換
- 変換メソッド
- フォーマット出力
- 10進数·2進数·16進数
- まずは,キーボードからの入力を取り込む必要がある.そのためのメソッドは何か?
- 取り込んだ文字列を,値に変換してから2で割る作業を繰り返す.
- 割り算をつづけ,値が1になったら終了する.このための繰り返し表現として,何を使えばよいだろうか
- 繰り返しの割り算を行うと同時に,割り算の剰余(余り)を求めておく必要がある(余りを下から順に結合すると2進数になる).余りを求める四則演算子は何か?
- 余りを求めたら,その値を足していく.数字の場合は1+1は2になってしまう.1+1を11とするためにはどうしたらよいだろうか
- 繰り返しが終了したら,最後に2進数に変換した結果をprintfで表示する.この際に使用する書式制御文字に注意する
- Subjectは「学籍番号-kadai4」とすること
- 本文の1行目ではまず名乗ること
- 2行目以降は下記の構成で記載すること
- 作成したプログラム(メール本文に貼り付ける)
- プログラムの各部の説明
- プログラムの実行結果
- 感想
- emacsで新しいファイルを作成する場合は,C-x C-fを押し,ミニバッファにkensaku/kadai2.rbのようにファイル名を入力する
- ファイルの保存はC-x C-s
- 日本語入力のオンオフの切り替えはC-o
- emacsを起動する
- Escとxを押し,mewと入力しReturn(Escとxを押すことを,一般にM-xと表記します)%<--これでMewが起動します
- Mewを起動するとパスワードがたずねられるので入力しReturn
- 新着メールの確認およびパスワードを間違えた場合はiと入力しReturn
- メールを読む場合は,カーソルキー(矢印キー)で読みたいメールを選びReturn
- メールの新規作成はwと入力
- e-mailの本文にテキストファイルを読み込むには,新規送信メール画面の本文を記入するエリアにカーソルを移動し,Ctrl+x,iとすると,ミニバッファにInsert file: ~/と表示されるので,読み込みたいファイル名を入力する。
- プログラムの実行結果の貼り付けは,kterm上の出力結果部分をマウスで選択し,Mewの本文の貼り付け位置にカーソルを移動し,マウスの真ん中ボタンをクリックする
- メールの送信はC-c C-cと入力するか,もしくはメニューのsendアイコンをクリックする
- Mewを終了するにはqと入力
- emacsを終了する
前回のプログラムで利用したto_iは,文字列を整数に変換するメソッドでした.文字列から数値,数値から文字列に変換する他のメソッドについても確認してみましょう
to_i:文字列を整数に変換.小数部は切捨てになります
to_f:文字列を浮動小数点数へ変換します
to_s:数値を文字列に変換します
item = gets.chomp! #=>100.5が入力されたとする print item.to_i,"\n" #=>100 item = gets.chomp! #=>100.5が入力されたとする print item.to_f,"\n" #=>100.5 item = gets.chomp! #=>100が入力されたとする print item.to_f,"\n" #=>100.0
a = gets.chomp! #=>100が入力されたとする b = gets.chomp! #=>45が入力されたとする c = a.to_i + b.to_i print c,"\n" #=>145 d = a.to_s + b.to_s print d,"\n" #=>10045 e = a + b print e,"\n" #=>10045
printfは,決められたフォーマットで文字列を出力するためのメソッドです.
printf "---%○〜〜〜%△___",X1,X2
printfメソッドの最初の引数である文字列中の%のある位置に,2つ目以降の引数X1,X2が順に埋め込まれます.%のあとに続く1文字(これまで使用してきたのはd)は書式制御文字をあらわし,出力時の書式を規定します.代表的な書式制御文字は下記のとおり
%d:10進整数の文字列に置き換える
%b:2進整数の文字列に置き換える
%x:16進整数の文字列に置き換える
%f:浮動小数点数の文字列に置き換える
%s:文字列に置き換える
なお,%とこれらの書式制御文字の間に出力幅を指定する整数を書くことができます.整数の左にマイナスがついていると左づめになります.fの場合は整数の右にピリオドと整数を続けると小数点以下の幅指定もできます.%fで小数点以下の幅指定をしない場合は,標準の6桁になります
a = 100 printf "10進整数だと%d\n", a #=>100 printf "2進整数だと%b\n", a #=>1100100 printf "16進整数だと%x\n", a #=>64 printf "浮動小数点数だと%f\n", a #=>100.000000 printf "文字列だと%s\n", a #=>100
整数を入れると右づめになります printf "答えは%6dです\n", a #=>___100 整数にマイナスをつけると左づめになります printf "答えは%-6dです\n", a #=>100___ %fでは全体幅,小数部幅の順に指定します ここでは小数を含めて全体が6桁,小数は3桁になっています printf "答えは%6.3fです\n", a #=>_12.500
コンピュータは,数値や文字や画像全てを1と0の2進数として取り扱っています.1と0の2種類の情報であればスイッチのオン/オフや,磁極の向き,光の点滅で表現することが可能です.私たちが日常的に使用している10進数をコンピュータでそのまま取り扱うことを考えた場合,10種類の情報の表現方法を考えなければならず,装置の複雑化,大型化をまねくことになります
10進数では9になると一桁繰り上がって10になりますが,2進数では1になると一桁繰り上がって10になります.10進数と2進数の対応は下記のとおりです
10進数 2進数 0 0 1 1 2 10 3 11 4 100 5 101 6 110 7 111 8 1000 9 1001 10 1010
2進数から10進数への変換は簡単な計算で求めることができます
コンピュータ内では,アルファベットや日本語のひらがな,漢字等も1と0の2進数で表現されます.この対応表が文字コードと呼ばれるものです.UNIXではEUCという文字コードが使われ,Windows,MacintoshuではShift-JISという文字コードが使われています.これらの文字コードでは日本語は16桁の2進数で表されています.コンピュータが取り扱う上では桁数の多さは問題にはなりませんが,人間が扱う上では桁数が多いと間違える可能性があります.このため2進数を16進数に変換することもあります.16進数については後日取り扱います
課題
キーボードから入力された任意の10進数を2進数に変換し,ディスプレイに出力するプログラムを作成する
%bを使えば,簡単に10進数から2進数に変換することができるが,今回はこれを用いずに,上記の割り算をプログラムとして実行できるようにする
プログラムを作成する上でのヒント
まずはこれだけのヒントで考えてみること.どうしてもわからない場合は下記のさらなるヒントを見てみること
作成したプログラムや実行結果をメールでnaoya@e.koeki-u.ac.jp宛に送る.
課題の提出期限は5月28日(土)17:00までです
メール送信時の注意
今回の評価ポイントは,作成されたプログラム自体と,プログラムの各部の説明の双方とする.オリジナルなプログラムであるため,各部についての説明が十分に行われていないと,理解が難しくなる.メールを書いた時点で再度読み直し,他人が読んでも理解できるかどうか考えた上で送信する
レポートのサンプルは下記を参照すること(広瀬先生のページ)