Lecture on Programming I 4/26
Menu Menu% で始まる行は Unix のコマンドです。
復習
Linux の login の方法xterm の起動の仕方
pw への slogin の方法
Mail/News の出し方
typist
typist を動かしてみよう。
% typistpw で動かしても良い。
typist の結果を記録する
script の使い方
% script % typist % exit % less typescriptscript を二重に起動しないように。
Subject: Report on Programming I 4/27-typistというサブジェクトで、kono@ie.u-ryukyu.ac.jp までメールを出します。
% rsh pw006 "Mail -s 'Report on Programming I 4/27-typist' kono@ie.u-ryukyu.ac.jp" < typescript(この行は cut & paste で実行してみよう)
これは、毎週、授業の最初に 10分間練習してください。
こんな Perl のプログラムで表示してみよう。 slow.pl
Emacs の使い方
cut & paste の使い方下を押しながら 両方を同時に押す
Netscape の使い方
重要なURL
http://www.ie.u-ryukyu.ac.jp/ 琉大のホームページ
http://rananim.ie.u-ryukyu.ac.jp/ 河野のホームページ
http://www.cr.ie.u-ryukyu.ac.jp/ 並列研のホームページ
Netscape での日本語の入力の方法
Unix Basics
tcsh の編集機能 (Emacs と同じ)
ファイルの作り方 ファイルの見方 less cp cd ls rm mkdir rmdir
Directory
Emacs の日本語チュートリアルを保存する
チュートリアルを cp で二つ作る
less で中身を確認する
mkdir で新しいディレクトリを作る
cd で、そこに移る
先に作ったチュートリアルをそのディレクトリに移す
ls を使って、
自分のホームディレクトリ 今作ったディレクトリを表示する。ls の -R オプションを試して見る
ファイルを消す
cd で一つ上のディレクトリに移る
rmdir でディレクトリを消す
全ての作業は、ディレクトリを作ることから始めること
Netscape v47
日本語入力の方法単語登録の方法
単語はどこに登録されるのか?
辞書をコピーする
マニュアルの読み方
man と man-k 、whatis など。nirai/kanai には日本語マニュアルがあります。
マニュアルがないときは?
info の使い方
Emacs から コマンドからPerl のマニュアル
Perl5 man Perl5 のマニュアル(日本語) (注) 最新版ではありません
Unix の勉強の方法
マニュアルだけではわからない。しかし、マニュアルを読まなければわからない。カレンダーコマンドを探してみる
man -k calendar
Emacs の技
サーチを使う
incremental-search search-forward整形コマンド M-q
pw/nw の使い分け
/net/home を使ってみようpw から、
cp file /net/home/y00/j00003pw の emacs を nw の ウィンドウに表示する
ssh pw006 emacs
始めてのPerl
Perl のマニュアルの場所計算機を作ってみる
perl5 -e 1+3+4 perl5 としてから、 print 1+2+3 ^D (control-D)デバッガを動かす
perl5 -de 0 p 式の結果を表示する q デバッガから抜ける変数に値を代入する。デバッガから
$a = 1 p $atypist の課題を
標準コース (t1 - t16) 標準ドリル (u1 - u13) 集中ドリル (v1 - v20) 実戦ドリル (m1 - m11)すべておこなうこと。
Unix Basic を一通り行い、ディレクトリを理解すること
Perlの課題
Perl で以下の計算をおこない、実行した結果を、cut & paste を使って、Subject: Report on Programming I 4/20というサブジェクトで、kono@ie.u-ryukyu.ac.jp までメールを出すこと。
123+1243+123
$a = 0.2345 として、sin($a)*sin($a) + cos($a)*cos($a)
1から30までの和
以下の表のクロス集計
123 234 2342 898 898 987 234 234 234(クロス集計とは、縦横の行と列ごとに和を計算することです)
Perl の read/eval loop
#!/usr/bin/perl5 while(<>) { print eval; }というファイルを eval-loop.pl という名前で作成する。
perl5 eval-loop.plで実行する。
さまざまな Perl スクリプトの実行方法
chmod 755 eval-loop.plで、
./eval-loop.plとして実行する。
mkdir ~/bin cp eval-loop.pl ~/bin rehashとして、
eval-loop.plで実行する。
eval-loop.pl の説明
#!/usr/bin/perl5 | どのコマンドで実行するスクリプトなのかの指定 (Unixのみ) |
while(<>) { | 入力を一行読んで $_ に入れる。もし、入力がもうなければ(End of File) while loop を終了する |
print eval; | print(eval($_)) と同じ。$_ の内容を Perl の文として実行した結果を表示する |
} | while 文の条件に戻る |
while(<>) { ... } は良く使う idiom (慣用句)です。
引数を省略すると $_ が使われることが多い。(要確認)
Perl の基本的な構文を理解しよう。
print 文
print "test"; print "test\n";\n は改行を表す。Unix の場合、ファイルからの入力には必ずこれがついている。
print;だと、$_ を表示します。
(1) 自分の名前を Perl に表示させてみよう。
セミコロン; を付けずに、print 文を二つ並べるとどうなるか?
条件文
以下のプログラムをcut & paste を使って実行して条件文に付いて理解せよ。
$_ = <>; chop; # 改行を切り落とす if ($_ eq "Hello") { print "Nice to see you.\n"; }{} はどういう役割を果たしているか考えよ。() はどうか? 省略すると、どうなるか?
以下のプログラムを実行して条件文に付いて理解せよ。
$answer = int(rand(100)); # 乱数を発生する $_ = <>; if ($_ > $answer) { print "Too large.\n"; } elsif ($_ < $answer) { print "Too small.\n"; } else { print "Correct.\n"; }数字として比較するには、>,<,== を使う。文字列として比較する場合は、eq, ne, gt, lt を使う。
(2) "1234345"と"31234" を数字として比較する場合と、文字列で比較する場合の結果を表示し、結果を説明せよ。
(3) 数字として解釈できない文字列を数字として比較するとどうなるか? 試してみて、結果を説明せよ。
(4) while(<>) { ... } を使って、二つ目のプログラムから数字当てゲームを作ってみよ。
当てるまでにかかった回数を表示するにはどうすれば良いか。(ヒント:$i++ を使う)
ループ
Perl には3種類のループがある。
while(条件) { ... } for($i=0;$i<10;$i=$i+1) { ... } do { ... } until (条件);この三種のループを使って、以下のプログラムを作成せよ。一題につき、三つのプログラムを作成する。
(5) 1 から 100 までを一行ずつに表示するプログラム
(6) 100 から 0 までを一行ずつに表示するプログラム
(7) 1,2,3 と順に足していって、10000 を越えた最初の値を表示するプログラム
(8) 数当てゲームの逆。ユーザにhigh またはlow を答えさせ、コンピュータが
数を当てるプログラム余裕がある人は以下の問題も解くこと
(9)
2分法で、$x*$x - 14 * $x + 9 == 0 の近似解を求めるプログラム $min, $max 最初に人間が決めておく。 $min, $max で、与えられた式の値の符号が異なっていることが前提。 そうでなければ、エラーメッセージを表示する。 (8) と同じ手法で近似解に到達する。 $min, $max のちょうど中間は、求める解よりも大きいのか小さいのか? $result == 0 で判定しないで、絶対値がある値(0.00001 など) より小さくなった時点で止める
typist に似たプログラムを Perl で作成する。
ヒント
Main Loop は、 for($i=0;$i<10;$i=$i+1) { ... } を使う。 レッスン用のテキストは、前もって変数に入れておく。 if 文を使って、テキストを選択する。(配列を使っても良い) テキストの表示には print 文を使う。 ユーザの入力の Loop は、while(<>) {...} を使う。 正しく入力されたかどうかは一行毎に if 文で判定する。 正解でなければ、同じ文を繰り返す。余裕があったら
時間を測りたいときには、どうすれば良いか? perlfunc から探してみよう。 採点はどうすべきか? 一文字ずつ判定するためには、stty などの特殊な操作が必要です。 (僕だったら、stty cbreak を使う) fortune を入力テキストとして使うと面白い。プログラムと実行の様子をscriptでとって整形したものを、
Subject: Report on Programming I 4/27というサブジェクトで、kono@ie.u-ryukyu.ac.jp までメールを出すこと。
付録
script の使い方
% script hogehogeは、なんでもいい。保存したい情報を残しておくためのファイル名です。省略したときには、typescriptというファイルに保存されます。
これをうった直後から、
% exitまでの、コマンドとその結果がhogeに保存されます。
たとえば、
% script hoge % ls MH hoge homework tutorial % mule % perl5 print "test"; % exitとかすると、hogeには、
% ls MH hoge homework tutorial % mule % perl5 print "test";という情報がのこる。
このhogeファイルをメールでおくれば、OK。
chmod の使い方
chmodの使い方を簡単載せます。詳しい使い方は、教科書やmanを使って調べてください。
------<< ls -l コマンドの出力 >>------- (1) (2) (3) (4) (5) (6) (7) drwxrwxr-x 8 j96007 y96j 512 Feb 19 1999 OpenGL -rw-rw-r-- 1 j96007 y96j 2208 Mar 9 1999 swing1.txt (1) ファイルの種類と可能な操作 d / - : ディレクトリ / ファイル r / - : 読み出し可能 / 読みだし禁止 w / - : 書き込み可能 / 書き出し禁止 x / - : read 可能 / write 可能 / 実行可能 1文字目 : ディレクトリかファイルかを示す。 u(2 〜 4) : ユーザ(ファイルの所有者) g(5 〜 7) : グループ(同じグループの利用者) o(8 〜 10) : その他 (2) 被参照数 (3) 所有者 (4) グループ名 (5) ファイルサイズ (6) 更新日時 (7) ファイル名 -----<< mode の変更 >>----- 使用方法 % chmod [Option] <file> ---全てのユーザに全ての操作を許可--- pw007: {9} % chmod ugo+rwx swing1.txt pw007: {10} % ls -l swing1.txt -rwxrwxrwx 1 j96007 y96j 2208 Mar 9 1999 swing1.txt ---グループユーザとその他のユーザの全ての操作を禁止--- pw007: {11} % chmod go-rwx swing1.txt pw007: {12} % ls -l swing1.txt -rwx------ 1 j96007 y96j 2208 Mar 9 1999 swing1.txt