PowerPoint資料

Download Report

Transcript PowerPoint資料

基礎プログラミング
2006年1学期 第8回
メニュー
• 前回の復習
– 繰り返し2(whileループによる繰り返し)
• 挑戦問題7,8の解答
• 配列
• まとめ
2
前回の復習 while文による繰り返し
• 繰り返しには,for 以外に while がある.
– p0701.pl(p0602.plと同じ処理を別方法で実現)
• while文
条件が
成り立っ
ている間
繰り返す
条件
処理
条件が成り立た
なくなったら
繰り返しループを
抜ける
3
前回の復習 while文による繰り返し
• あたるまで繰り返すという場合.
• whileの条件は別の使い方もできる.
while($sw==1) {
$swが1の間処理を繰り返す.
あたったら,$sw=0 とする.
$i++; をしているので,試した回数が入る.
}
最後に,メッセージの中で$iの中身を表示すると,そ
れは試した回数を表している.
4
挑戦問題7 (while文による繰り返し)
• p0702.pl をもっと親切なメッセージつきに.
– 今のチャレンジが何回目なのかを表示する.
第10回目の挑戦です.
コンピュータが1~5の中から1つ数字を選びました.
さあ,いくつでしょうか(1~5)
→
p702a.pl
5
挑戦問題8 (while文による繰り返し)
• p0702.pl の条件を緩和 →p0702b.pl
– 1回あたるか,20回挑戦したら終わりに変更.
– 次のメッセージを使い分ける.
「あたって終了」するときのメッセージ
お疲れ様でした.**回目にあたりました.
「20回の挑戦でもあたらなくて終了」するときのメッセージ
残念でした.20回挑戦しても当たりませんでしたね.
6
練習問題の補足(例外処理)
• 1~5の数字を入力しなかった時
– メッセージを出して,入力のやり直し
p702c.pl
if($user<=0 || $user>5) {
printf(“1~5の数字を入力してください\n”);
next; #今のループを抜けて,次のループに飛ぶ
}
7
昔の練習問題4,ふたたび
• バリューさんはいつもお得を考えて生活をしていますが,
たまにはコンビニでおにぎりとお茶のお昼ごはんを買うこ
とにしました.今日は2件並んだコンビニでそれぞれ以下
のキャンペーンをしています.
おにぎり
お茶
145円,おにぎりも買うと120円
A 全部130円
B 通常130円が120円 145円
4-1 おにぎり2個とお茶を買うとするとどうする?
4-2 おにぎり3個とお茶を買うとするとどうする?
8
昔の練習問題4,ふたたび
for と if をうまく使うと,完全
• バリューさんはいつもお得を考えて生活をしていますが,
たまにはコンビニでおにぎりとお茶のお昼ごはんを買うこ
な答が見つかる!
とにしました.今日は2件並んだコンビニでそれぞれ以下
のキャンペーンをしています.
おにぎり
お茶
145円,おにぎりも買うと120円
A 全部130円
B 通常130円が120円 145円
4-1 おにぎり2個とお茶を買うとするとどうする?
4-2 おにぎり3個とお茶を買うとするとどうする?
9
$OniNum=0;
while($OniNum==0) {
printf("おにぎりの数は? ");
$OniNum=<>;
}
for($i=0; $i<=$OniNum; $i++) {
$OniANum=$i;
# コンビニAで買うおにぎりの数
$OniBNum=$OniNum-$OniANum; # コンビニBで買うおにぎりの数
$OniPrice=$OniANum*130+$OniBNum*120; # おにぎりの値段
for($j=0; $j<=1; $j++) {
if($j==0) { # $j==0の時は,コンビニAでお茶を買う
if($OniANum>=1) { # コンビニAで買うおにぎりの数が1以上
$ChaPrice=120;# おにぎりも買うのでお茶は120円
} else {
$ChaPrice=145;# おにぎりを買わないので145円
}
$Cha="コンビニA";
} else { # $j!=0の時は,コンビニBでお茶を買う
$ChaPrice=145;
# コンビニBではお茶は常に145円
$Cha="コンビニB";
}
$TotalPrice=$OniPrice+$ChaPrice; # 全体の価格を計算
printf("おにぎりをAで%d個, Bで%d個と茶を%sで買う場合の合計%d\n",
$OniANum, $OniBNum, $Cha,$TotalPrice);
}
}
ふたたび
mondai4b.pl
10
配列(変数の確認)
(確認)
• 変数-「値」を入れて保持するための器(入れ物)
– $で始めて名前をつける.
– perlでは,数値,文字列を代入することができる.
$a=“はい”;
$a=10;
10
はい
a
a
11
配列
• 「値」を入れて保持するための器(入れ物)
• 同じ名前の変数をいくつも並べたようなもの
– 配列には@に続けて名前をつける.
例:
@array; という名前の配列
10
5
24
72
要素
(中身)
0
1
2
3
添え字
$array[0]=10
$array[2]=24
(インデックス)
$array[1]=5
$array[3]=72
12
配列(2)
• 配列の使い方(代入 2通りの方法)
– リスト形式での代入(カンマで区切り一気に代入).
@a = (10,5,24,72);
– 各要素に個別に代入
添え字 中身
$a[0]=10;
0
10
$a[1]=5;
1
5
@a
$a[2]=24;
24
2
$a[3]=72;
72
3
13
配列(3)
• 配列の使い方(参照)
– 一括参照(中身を全部まとめて参照).
print(“@a \n”); ダブルクォーテーションの中に配列を入れる
– 各要素を個別に参照
添え字 中身
print (“0番目の要素は” . $a[0] . “\n”);
print (“1番目の要素は” . $a[1] . “\n”);
print (“2番目の要素は” . $a[2] . “\n”);
print (“3番目の要素は” . $a[3] . “\n”);
0
10
1
5
2
24
3
72
@a
14
配列(4)
• 練習 p0801.pl をダウンロードして実行
– y:\perl> perl p0801.pl
配列 a と b に違う方法で,同じ値を代入.
結果,どちらも同じ値が代入されているはず.
を確かめる.
15
配列(5)
• 文字列も同じく配列で利用できる
– リスト形式での代入(カンマで区切り一気に代入).
@menu = (“カレー”,”おにぎり”, “ラーメン”,”ハン
バーガー);
@menu
添え字 中身
– 各要素に個別に代入
0
カレー
$menu[0]=“カレー”;
$menu[1]=“おにぎり”;
1
おにぎり
$menu[2]=“ラーメン”;
ラーメン
2
$menu[3]=“ハンバーガー”;
3 ハンバーガー
16
配列(6)
• 文字列の入った配列の参照も同じ.
– 一括参照(中身を全部まとめて参照).
print (“@menu \n”);ダブルクォーテーションの中に配列を入れる
@menu
– 各要素に個別に参照
添え字 中身
print(“0番目は” . $menu[0] . “\n”);
print(“1番目は” . $menu[1] . “\n”);
print(“2番目は” . $menu[2] . “\n”);
print(“3番目は” . $menu[3] . “\n”);
0
カレー
1
おにぎり
2
ラーメン
3 ハンバーガー
17
配列(7)
• 練習 p0802.pl をダウンロードして実行
– y:\perl> perl p0802.pl
配列 menuに文字列を代入.
結果,ちゃんと代入されて,参照できるはず.
を確かめる.
18
配列を使った練習問題
• 課題:3択クイズを作る
– 配列を使う練習
– データとアルゴリズムの考え方を整理
19
3択クイズとは何か?
20
3択クイズとは何か?
• 問題とその答として3つの
選択肢のあるクイズ
21
3択クイズに必要なものは?
22
3択クイズに必要なものは?
1. 問題
2. 選択肢3つ(3択なので)
3. 答
23
3択クイズ達成の手順は?
24
3択クイズ達成の手順は?
1. 問題を出力(表示)
25
3択クイズ達成の手順は?
1. 問題を出力(表示)
2. 選択肢を出力(表示)
26
3択クイズ達成の手順は?
1. 問題を出力(表示)
2. 選択肢を出力(表示)
3. 答を入力
27
3択クイズ達成の手順は?
1.
2.
3.
4.
問題を出力(表示)
選択肢を出力(表示)
答を入力
3の入力と答の一致を調べる
28
3択クイズ達成の手順は?
1. 問題を出力(表示)
2. 選択肢を出力(表示)
3. 答を入力
4. 3の入力と答の一致を調べる
4-1.一致していれば「正解」を表示
4-2.一致しなければ「残念」を表示
29
さて作成しよう
1. 問題
$QUE=“~”;
2. 選択肢3つ(3択なので)
$SEL[0]=“~”;
$SEL[1]=“~”;
$SEL[2]=“~”;
3. 答
$ANS=数字;
30
さて作成しよう
1. 問題
$QUE=“~”;
2. 選択肢3つ(3択なので)
$SEL[0]=“~”;
$SEL[1]=“~”;
$SEL[2]=“~”;
3. 答
$ANS=数字;
これらは
データ
31
さて作成しよう
1.問題を出力(表示)
2.選択肢を出力(表示)
3. 答を入力
4. 3の入力と答の一致を調べる
4-1.一致していれば「正解」を表示
4-2.一致しなければ「残念」を表示
32
さて作成しよう
1.問題を出力(表示) → print(“$QUE\n”);
2.選択肢を出力(表示)
3. 答を入力
4. 3の入力と答の一致を調べる
4-1.一致していれば「正解」を表示
4-2.一致しなければ「残念」を表示
33
さて作成しよう
1.問題を出力(表示)
for と printを使って
2.選択肢を出力(表示)
$SEL[?]を表示
3. 答を入力
4. 3の入力と答の一致を調べる
4-1.一致していれば「正解」を表示
4-2.一致しなければ「残念」を表示
34
さて作成しよう
1.問題を出力(表示)
2.選択肢を出力(表示)
3. 答を入力
→ $input=<>;
4. 3の入力と答の一致を調べる
4-1.一致していれば「正解」を表示
4-2.一致しなければ「残念」を表示
35
さて作成しよう
if文による条件分岐
1.問題を出力(表示)
if (
)
2.選択肢を出力(表示)
条件は数値の比較
3. 答を入力
4. 3の入力と答の一致を調べる
4-1.一致していれば「正解」を表示
4-2.一致しなければ「残念」を表示
36
さて作成しよう
1.問題を出力(表示)
2.選択肢を出力(表示) if ( ) { # then
~
3. 答を入力
4. 3の入力と答の一致を調べる
}
4-1.一致していれば「正解」を表示
4-2.一致しなければ「残念」を表示
37
さて作成しよう
if (
) { # then
1.問題を出力(表示)
~
2.選択肢を出力(表示)
} else {
3. 答を入力
~
4. 3の入力と答の一致を調べる
}
4-1.一致していれば「正解」を表示
4-2.一致しなければ「残念」を表示
38
さて作成しよう
1.問題を出力(表示)
2.選択肢を出力(表示)
3. 答を入力
4. 3の入力と答の一致を調べる
4-1.一致していれば「正解」を表示
4-2.一致しなければ「残念」を表示
これが アルゴリズム!
39
出来上がったら保存して実行
• 出来上がったであろうプログラムを保存
– TeraPadの
「ファイル」→「名前をつけて保存」
ファイル名を santaku.pl
• 実行
– y:\perl> perl santaku.pl
40
今日のまとめ
• 配列:「値」を入れて保持するための器
• 同じ名前の変数をいくつも並べたようなもの
– 配列には@に続けて名前をつける.
例:
@array; という名前の配列
10
5
24
72
要素
(中身)
0
1
2
3
添え字
$array[0]=10
$array[2]=24
(インデックス)
$array[1]=5
$array[3]=72
41
今日のまとめ(2)
• 配列は変数の集合みたいなもの
– 添え字で個々の要素を区別
• 特徴は
– 配列の添え字は「0」からはじまる整数
• $array[0], $array[1], ...
42