Lecture on Programming I 4/26

Menu Menu

% で始まる行は Unix のコマンドです。


復習

Linux の login の方法

xterm の起動の仕方

pw への slogin の方法

Mail/News の出し方


typist

typist を動かしてみよう。

    % typist

pw で動かしても良い。


typist の結果を記録する

script の使い方

	% script
	% typist
	% exit
	% less typescript

script を二重に起動しないように。

    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/j00003

pw の 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 $a

typist の課題を
        標準コース     (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 hoge

hogeは、なんでもいい。保存したい情報を残しておくためのファイル名です。省略したときには、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

Shinji KONO / Sun May 20 01:04:08 2001