Lecture on Programming I 6/1
Menu Menu
先週の復習
発見的プログラミング 配列 連想配列
Typing の練習
今日も typing の練習をすること (20分)
結果をscript でメールすること。
整形した結果を、
Subject: Report on Programming I 6/1-typistというサブジェクトで、kono@ie.u-ryukyu.ac.jp までメールを出すこと。
Turtle Graphics の復習
前に進む $turtle->forward($length) 方向を変える $turtle->turn($degree)を使って、酔っ払いの動きをシミュレーションしてみよう。
drunken.pl Turtle.pm 2次元配列 $visit[$x][$y] を使って、酔っ払いがどこにどれだけいたかを積算してみる。Perl の配列にはマイナスの添字が使えないので、ちょっとオフセットを足すのが良い。
亀の位置 $turtle->{-x},$turtle->{-y}亀の位置は、浮動小数点の数値なので、int()を使って整数に直す。
2次元配列の内容を、gnuplot で表示できるように以下の形式で出力する。
X Y Countgnuplot の splot コマンドで表示してみよう
2次元配列
DB<2> $a[0][0]=1 DB<3> $a[0][1]=2 DB<4> $a[1][0]=3 DB<5> $a[1][1]=4 DB<6> p $a[0] ARRAY(0x813ba94)Perl の2次元配列は、配列の配列になっている。この、
ARRAY(0x813ba94)とななんだろうか?
Perlの参照
ARRAY(0x813ba94)は、Perl の参照と呼ばれるスカラの値である。スカラなので、普通の変数に代入することができる。
DB<8> $b = $a[1] DB<9> p $b ARRAY(0x813b43c) DB<10> p $b[1] DB<11> p $b->[1] 4$b[1] は、配列@b の2番目の値であって、$b の値とは違う。$b に入った配列への参照は、-> を使ってアクセスすることができる。
-> 参照へのアクセスPerl のデータ構造は、\ を使って参照に変えることができる。
DB<12> @c=(1,2,3,4,5) DB<13> $b->[3] = \@c DB<14> p $b->[3] ARRAY(0x813be4c) DB<15> p $b->[3]->[2] 3
問題
参照を使って、-> が4つ以上続くデータアクセスの例を作成せよ。正しく動くことを perl5 -de 0 のデバッガで確認すること。
DB<9> p $b ARRAY(0x813b43c)であるときに、
$b = 0;とすると、どうなるか? $b から参照されていた配列はどうなるのか考察せよ。
$c = $b; $b = 0;ならばどうか?
1次元配列を使って2次元配列を表す
2次元配列は、以下のように1次元配列を使って表すこともできる。
$col_size = 10; $a[$x * $col_size + $y]
問題
酔っ払いの位置を積算する場合について、この1次元配列による2次元配列を実装する方法と、配列の配列で2次元配列を実装する方法を比較し、双方の良い点と悪い点をそれぞれ2つづつあげよ。
Perl の構文について
正しい文の作り方式とは何か?
文とは何か?
文法構造とはなにか?
if-statement : if ( condition ) { statement } | if ( condition ) { statement } else { statement } | if ( condition ) { statement } else-if-statement ; else-if-statement : elsif ( condition ) { statement } | elsif ( condition ) { statement } else { statement } | elsif ( condition ) else-if-statement ;このことについてはコンパイラの授業で詳しく習う。
Perl のmy について
$i = 4; print "1: $i\n"; &test(); print "2: $i\n"; sub test { my $i; print "3: $i\n"; $i = 3; print "4: $i\n"; &test2(); } sub test2 { print "5: $i\n"; }以上のプログラムを実行し、my の役割と、$i の意味について、自分の言葉で100文字程度で、 説明せよ。
test を以下のものに置き換えたらどうなるか?
sub test { my $i; print "3: $i\n"; $i = 3; $j = \$i; print "4: $i\n"; &test2(); } print "6: $j\n"; print "7: $$j\n";
Perlのパターンと文字列処理について
このプログラム は、 メールを読んで、そこから、 速度と正答率を抜き出すものである。
これから、gnuplot 向きのデータを作成するプログラムを生成し、表示させて、データについて分析せよ。
宿題
以上の問題を
Subject: Report on Programming I 6/1というサブジェクトで、kono@ie.u-ryukyu.ac.jp までメールを出すこと。