本日の出席は、講義の中の作品を提出する。
レポート作成に必要な技術を復習する。 添付する文書を作成し、添付する復習を行う。 今学期は来年の演習のゼミを決める大事な学期である。 今回は自分の略歴を作成したり、 連絡を取るときに必要な事項について復習しよう。
連絡する際に略歴データを添付してみたい。 まずは emacs の使い方の復習をする。 添付する略歴データの名前を application.dat としよう。.dat はテキストデータファイルであることを意味する拡張子である。 この中に、簡単な略歴データを作成してみよう。
ファイルを開く | Ctrl-x Ctrl-f |
ファイルを保存する | Ctrl-x Ctrl-s |
Emacs を分裂させる | Ctrl-x 5 2 |
Emacs の数を減らす | Ctrl-x 5 0 |
ファイルを開いたり保存する directory は ˜/Ruby である。 application.dat に、今までの経歴を書いてみよう。
1993 | 2 | 24 | 島根県 | 生まれ |
2011 | 3 | 31 | 島根県 | 松江市立流美易高等学校卒業 |
2011 | 4 | 1 | 山形県 | 私立東北公益文科大学入学 |
2015 | 3 | 31 | 山形県 | 私立東北公益文科大学卒業見込 |
次に、メールを送る準備をする。
To: には multipart 形式を練習する宛先 「本日の出席メールのアドレス」 を指定する。 Subject: には話題となるべき議題を指定する。 ここでは「専門演習の見学について」としよう。
本文には、必要な情報を記す。 メール文書では、必ず改行をして成形する。 添付ファイルがあるときには、ファイル名と概要を知らせておく。 内容の順序としては、自分が誰であるか名乗り、目的について書く。そのあと、細かい説明をする。
今の場合は、面談の時間を効果的に過せるようにするため、 情報提供すべきことを書いておくとよい。 ここでは、面談をオフィスアワーに希望していることを伝え、 卒論の自分なりのテーマ、就職する希望先、後期の当面の目標、 取得単位を知らせるとよいと考えた。 何について質問を行いたいか、も予め知らせておけば、 具体的な情報を得られるとも考えた。 よって以下のように書くことにする。
学籍番号: C101555 氏名: 公益ルビ緒 コース: 素粒子宇宙コース ゼミについて相談したいので、面談を希望します。 ゼミは、XXXX 系のゼミを考えています。 XXXX ゼミや、XXXX ゼミとも面談を相談しました。 環境問題と市場の関係について、調査して卒論を書いてみたいです。 就職先は、環境問題に取り組む企業を中心に回ろうと考えています。 まずは後期は、簿記とか、ミクロ経済の計算に強くなりたいです。 今年度前期を終った時点で XXX 単位を取りました。 演習を取るまでに他に必要な講義や、予め読んでおいたらよい本に ついて、質問があります。来週 10/9 のオフィスアワーに伺いたく、 連絡しました。よろしくお願いします。 追伸: 略歴 (application.dat) を添付しました。
実際に実行し、できた様子を観察してみよう。
To: 出席メールアドレス Subject: 専門演習について From: KOEKI Rubio <ta05001@e.koeki-u.ac.jp> ----: ------------------------------ attachments ------------------------------ Multipart/Mixed 1/ 1 Text/Plain(guess) *Cover.txt!$ 2 Text/Plain(guess) applicatio.. 3 . --------0-1-2-3-4-5-6-7-8-9----------------------------------------------
2 に application.dat が増えたら完成。Ctrl-c Ctrl-c で送信する。 ファイルが送られたかの確認は i を押す。APOP password を入れると、 受信したり送信したファイルの一覧を新しくすることができる。
118 09/22 To:it-r2-1007- multipart 形式の練習
得たメールが送信メールだけであれば、送信できたことが分かる。
119 09/22 To:it-r2-1007- multipart 形式の練習 120 09/22 MAILER-DAEMON@ failure notice
と 2 通あり、そのうち 1 通が MAILER-DAEMON からの failure notice (失敗のお知らせ) の場合は、宛先の綴りが間違っていた場合である。 もう一度宛先を確認して送り直そう。
it-r2-日付-目的@e.koeki-u.ac.jp という宛先に関しては、提出状況を基礎プログラミング II のトップページからたどることができる。 koeki-u.ac.jp 宛てになっていた場合は、 配達されない上にエラーメールも返って来ない。 すなわち提出状況には名前が投函されない。 もう一度送り先を確かめること。
入力した西暦を年号に変換させるプログラムを作ってみよう。
Ruby でプログラムを作るときに必要なことは何だったか、思いだそう。
機械は書かれたプログラムを実行したい。 そこで、人間は実行する言語が何であるかを教えておく必要がある。 また、書かれた言語は日本語 EUC であることを明記する必要がある。 今日は review_print.rb というプログラムを書いていくつか復習しよう。
#!/usr/koeki/bin/ruby #coding: euc-jp
を冒頭に書く。 Emacs で Ctrl-x Ctrl-f (Find File) で ˜/Ruby の下に year_review.rb というプログラムを書きはじめよう。
#!/usr/koeki/bin/ruby
#coding: euc-jp
書いたら Ctrl-x Ctrl-s で保存。
好きな歴史と歴史の年号をいくつか調べ、変換してみよう。
保存されたファイルの属性はどうなっているだろうか。ls -l (LiSt Long formatted, 長めのリスト表示) で確認してみよう。ファイルをしまったのは ˜/Ruby の下だったので、cd (Change Directory) してから ls -l する。
%cd Ruby [˜] %ls -l review.rb -rw-r--r-- 1 madoka st2005 40912 9月 17日 09:44 review.rb
ファイルがない場合は、$HOME ([˜]) に直接書いたか、 他の directory の中に書きこんでしまった場合である。 kterm では、初めて書いたプログラムに対しては、
%cd Ruby %chmod +x review_print.rb
をしなければならなかった。これは、 書いたプログラムを実行可能にする作業である。 一旦ファイルの属性を変えれば、 以降はずっとそのファイルの属性を保ったままである。 ファイルの属性が変わったかどうか ls -l で調べよう。
%ls -l review.rb[˜/Ruby] -rwxr-xr-x 1 madoka st2005 40912 9月 17日 09:44 review.rb*
左端のファイル属性に x がついているか確認しよう。 機械がプログラムを実行できるときは、x がついている。 実行可能ファイルには * (asterisk) をつける機能が pan や roy にはある。 これでも確認することができる。
それでは実行してみよう。実行するには
%./review_print.rb[˜/Ruby]
である。何も表示されなければ OK。
このプログラムは、「Ruby でプログラムを書きます」と宣言しただけで、 何も行なわないプログラム だからである。
%./review_print.rb[˜/Ruby] zsh: アクセス権がありません。: ./review_print.rb
と出る場合には、chmod +x をし忘れた場合である。
%./review_print.rb[˜/Ruby] zsh: ファイルがありません。: ./review_print.rb
と出る場合には、1 行目の綴りがどこか間違っているか、 1 行目が空欄などの場合である。
Ruby は interpreter 型の言語で、interpreter のある場所を 1 行目で教えている。指定場所、名前が間違っていると、 プログラムは動かない。
プログラムを実行すると Kterm に文字が出力されるようにしよう。
print("表示したい文章 \n")
または、
変数="表示したい文章"
printf("%s \n", 変数)
であった。まず print 文, printf 文の復習をしよう。
#!/usr/koeki/bin/ruby
print("西暦を年号に変換します\n")
実行しよう。 Kterm に「西暦を年号に変換します」と出力されただろうか?
何も表示されなければ、
"文字列 \n
"
であるか確認すること。
\n
は改行文字。
変数や配列の定義はプログラムの宣言の次に書く約束なので、 2 行目以降にまず書こう。
#!/usr/koeki/bin/ruby
high_name = "流美易高校"高校名を変数 high_name に代入
high_grad = 2005高校卒業年を変数 high_grad に代入
print("西暦を年号に変換します\n")
printf("%s卒業\t%d年 (平成%d年)\n", high_name, high_grad, high_grad - 1988)
コメント文で、変数に何をしまったか記録しておくとよい。
%./review_print.rb[˜/Ruby] 西暦を年号に変換します 流美易高校卒業 2005年 (平成15年)
と出るだろうか。
文字列を代入するときには " で括る。
%s は文字列 (String)
を出力するときに用いる。
\t
は横幅を空ける。%d
は整数値を出力するときに用いる。
生年月日も表示させるようにしてみよう。
情報を入力して、整形して出力するように変更したい。 情報を入力して出力するには、3 つの実行文を組み合わせた。 文字列の入力を促す部分と、入力された文字列を切り取る部分、 それに文字列を使って表示や計算をする部分から成り立っていた。
STDERR.print("入力を促す文章") | 文字列の入力を促す |
変数 = gets.chomp! | 入力された文字列を切り取る |
入力された文字列は、数字が並んでいても、文字であった。 計算できるように、数値にするためには、to_i (TO Integer, 整数変換) あるいは to_f (TO Fraction, 小数変換) しなければならない。
変数 = gets.to_i |
入力された文字列を切り取って整数に変換 |
変数 = gets.to_f |
入力された文字列を切り取って小数に変換 |
入力した文字列を計算できるように変換しよう。
#!/usr/koeki/bin/ruby
high_name = "流美易高校"高校名を変数 high_name に代入する
high_grad = 2005 高校卒業年を変数 high_grad に代入する
STDERR.print("どこの大学に入学しましたか?")
univ_name = gets.chomp!
STDERR.print("西暦何年に入学しましたか?")
univ_year = gets.to_i
print("西暦を年号に変換します\n")
printf("%s卒業\t%d年 (平成%d年)\n", high_name, high_grad, high_grad - 1988)
printf("%s入学\t%d年 (平成%d年)\n", univ_name, univ_year, univ_year - 1988)
大学卒業予定年度も訊ね、表示させるように変更しよう。
切り取った文字数をどのように処理するかによって、値の型変換が変わる。 変数の中身に合わせて printf (PRINT Formatted) の表示も変わる。
to_i |
%d |
整数値 |
to_f |
%f |
小数値 |
to_s |
%s
| 文字列 |
小数は、%f の間の数値を工夫しないと「単なる数値の羅列」になるので、 表示の美しさを考えるようにしよう。
本学の文字数と、出身高校の年号を揃えたい。 文字列と文字列の間隔を計算して空けるにはどうすればよいか、思いだそう。
%整数s | 整数分だけ箱を空けて、右詰めに文字列を表示 |
%整数d | 整数分だけ箱を空けて、右詰めに文字列を表示 |
%整数.整数f | 全体で空ける箱の数.そのうちの小数点以下の箱の数 |
%負の整数s | 整数分だけ箱を空けて、左詰めに文字列を表示 |
%負の整数d | 整数分だけ箱を空けて、左詰めに文字列を表示 |
全角文字は半角 2 文字分であった 。 学校名の文字列は全角で 20 文字分取ることにし、 左詰めに表示させてみよう。
:
printf("%-20s卒業\t%10d年 (平成%2d年)\n", high_name, high_grad, high_grad - 1988)
printf("%-20s入学\t%10d年 (平成%2d年)\n", univ_name, univ_year, univ_year - 1988)
実行結果が変化することを確認しよう。
%./review_print.rb [˜/Ruby]
とすると
流美易高校 | 卒業 | 2005年 | (平成17年) |
東北公益文科大学 | 入学 | 2008年 | (平成20年) |
を得る。
プログラムを使って数値を計算することができるが、 この計算が一般にも成り立つものであるのかどうか、 調べる必要がある。 電卓 xcalc を呼び出すこともできるが、 bc -l コマンドを使うと、 レポート作成時にはどのように計算したかを示すこともでき、 便利であった。
%bc -l 1990 + 15Enter 2005 1990 + 18Enter 2008 quit
終了は quit とする。