PowerPoint資料

Download Report

Transcript PowerPoint資料

基礎プログラミング
2006年1学期 第7回
メニュー
• 前回の復習
– 新・数当てゲーム(ランダム関数と整数化)
– forループによる繰り返し
– 数当てゲームの拡張,正解数のカウント
• レポートの解答
• 繰り返し2
– whileループによる繰り返し
• 挑戦問題
2
前回のおさらい新・数当てゲーム
• ランダム関数を使った数当てゲーム
– p0601.pl をダウンロードして実行
Y:\perl> perl p0601.pl
コンピュータが1~5の中から数字を1つ選びました.
さあ,いくつでしょうか?(1~5)_
と出るので,1~5のどれかを入力して当てる!
3
前回の復習ランダム関数と整数化
• コンピュータが1~5から数字を1つ選ぶ
$com = int(rand(5))+1;
rand(数字) 0~数字を超えない範囲で(擬似)乱
数を返す関数(値は小数あり)
例:$a = rand(5);
0<= $a < 5の範囲の数字が$aに代入される
int(数字) 数字を整数にする(小数点以下切捨て)
例:$b = int(4.56);
4.56を小数点以下切捨てするので,$bは4
4
前回の復習ランダム関数と整数化
• コンピュータが1~5から数字を1つ選ぶ
$com = int(rand(5))+1;
rand(5) で,0~5未満の数字が選ばれる
rand(数字) 0~数字を超えない範囲で(擬似)乱
(ただし小数なので↓)
数を返す関数(値は小数あり)
例:$a
= rand(5);
int( rand(5)
) で,rand(5)の結果を整数にする
0<= $a < 5の範囲の数字が$aに代入される
すると,可能性のある値は0~4になる
int(数字) 数字を整数にする(小数点以下切捨て)
(1~5にしたいので↓)
例:$b = int(4.56);
4.56を小数点以下切捨てするので,$bは4
int(
rand(5) ) +1 で,1を足して1~5にする
5
前回の復習forループによる繰り返し
• p0601.plの数当てゲームを拡張する
– 5回繰り返して答えることに.
p0602.plをダウンロードして実行
y:\perl> perl p0602.pl
コンピュータが1~5の中から1つ数字を選びました.
さあ,いくつでしょうか
問題を5回繰り返した後に...結果表示
正解数は0回でした.
6
前回の復習forループによる繰り返し
• forループによる繰り返しアルゴリズム
条件が
成り立っ
ている間
繰り返す
条件
条件が成り立た
なくなったら
繰り返しループを
抜ける
処理
7
前回の復習forループの繰り返し
• forループの構文
for ($i=0; カウンタとして変数iを用意,初期値0にする
$i<5; ループの終了条件として,iが5未満の間成立
$i++ $i=$i+1と同じ,1つずつ増やす.
カウンタ増減式. 1回の処理が終わったらど
れだけカウンタを動かすかということを指定.
) { 「処理」 }
$iが0から5未満までの間「処理」を繰り返す.
処理が終わった時点で$iを1増やす.
8
前回の復習正解数のカウント
• p0602.plでは正解をカウントするための
• 変数を追加 (bingoという名前にした)
$bingo=0; 最初に初期化 (0に)しておく
– 正解したときにカウントするために1つ増やす
$bingo=$bingo+1;
正解した場合にのみ実行される場所
に記入.値を1つ増やす
9
前回の復習 口でいうと...
1.$bingoという名前の変数を用意して0にする
2.$iという変数を0にする
3.$iが5未満なら3-1へ.そうでなければ4へいく.
3-1.コンピュータがランダムで1~5のどれかを選ぶ
3-2.ユーザがキーボードから1~5のどれかを入力.
3-3.比較して当たっていれば正解と表示し,bingoを1
増やす.外れれば,残念と表示する.
3-4. $iに1を足して3にいく.
4.正解数が$bingoに入っているので,表示する.
5.終了
10
練習問題1の解答
出題
• Aさんは今,成田空港で48000円をUSドルに外貨両替を
しようと思っています.
円→USドル
ある銀行
USドル→円
114.00→1ドル 1ドル→108.00
1-1:何ドルと余り何円になるでしょうか?
1-2:旅行から帰って50%残っていたドルを円に戻すとす
ると,何円になるでしょうか?(レートはそのままとする)
1-3:差額で,いくら銀行に渡したことになるでしょうか?
算術演算子を使ってプログラミングせよ.
mondai01.pl という名前で保存し,実行せよ.
11
練習問題1の解答
出題
1-1: (48000円が)何ドルと余り何円になるでしょうか?
ある銀行
円→USドル
USドル→円
114.00→1ドル 1ドル→108.00
その1.地道に行う方法
48000/114 の整数部分がドル
48000%114の答が余りの円
→この場合,結果を見てから1-2へ進む
その2.intを使う方法
int(48000/114)の結果がドル
48000%114の答が余りの円
→この場合,そのまま1-2を解くことも出来る
12
練習問題1の解答
出題
• 1-2:旅行から帰って50%残っていたドルを円に戻すと
すると,何円になるでしょうか?(レートはそのまま)
ある銀行
円→USドル
USドル→円
114.00→1ドル 1ドル→108.00
その1 1-1の答を見て,421ドルと6円と知って利用する
421*0.50*108 の答が残額の円
その2 1-1の式をそのまま引き継いで答を出す
(int(48000/114))*0.50*10の答が残額の円
13
練習問題1の解答
出題
• 1-3:差額で,いくら銀行に渡したことになるでしょうか?
ある銀行
円→USドル
USドル→円
114.00→1ドル 1ドル→108.00
その1 1-1の答を見て利用する
421*0.50*114-421*0.50*108の答が差額の円
その2 1-1で作った式を利用する
(int(48000/114)*0.5*114-int(48000/114)*0.5*108)
の答が差額
→mondai01a.pl (変数を使う場合は mondai01b.pl)
14
出題 練習問題2の解答
• Aさんは10万円の買い物をしました.今はお金がないけれど,
これからアルバイトでバンバン稼ぐ予定なのでカードローンを
利用しました.
– 返済は毎月5000円ずつの固定額にしました.
– 利息は年利率24%(ひと月2%)の複利で計算されます.
– Aさんは,1ヶ月後から返済を開始します.
Q:返済に何ヶ月かかるでしょうか?また,利息をあわせて,いく
ら支払うことになるでしょうか?
1ヵ月後の借金は, 100000*0.02+100000
そこで5000円返済すると 102000 - 5000
2ヵ月後の借金は, 97000*0.02+ 97000
そこで5000円返済すると
98940 - 5000
= 102000
= 97000
= 98940
= 93940 てな感じ
プログラムを書くなり,電卓がわりに使うなり,どうにかして
計算し,その計算過程とその結果を示してください.
15
練習問題2の解答
• Aさんは10万円の買い物をしました.今はお金がないけれど,
プログラムできれいに計算できなくてもよし
これからアルバイトでバンバン稼ぐ予定なのでカードローンを
利用しました.
– 返済は毎月5000円ずつの固定額にしました.
– 利息は年利率24%(ひと月2%)の複利で計算されます.
1ヵ月後の借金は,100000*0.02+100000=102000
– Aさんは,1ヶ月後から返済を開始します.
そこで5000円返済すると102000- 5000 = 97000
Q:返済に何ヶ月かかるでしょうか?また,利息をあわせて,いく
2ヵ月後の借金は,
97000*0.02+ 97000= 98940
ら支払うことになるでしょうか?
1ヵ月後の借金は, 100000*0.02+100000
= 102000
そこで5000円返済すると
98940- 5000
= 93940
そこで5000円返済すると 102000 - 5000 = 97000
てな感じになっていく,これが0になるまでにいったい
2ヵ月後の借金は, 97000*0.02+ 97000 = 98940
そこで5000円返済すると
98940 - 5000 = 93940 てな感じ
いくら払ったことになるかを足していけばよい
プログラムを書くなり,電卓がわりに使うなり,どうにかして
計算し,その計算過程とその結果を示してください.
16
練習問題2の解答
$shakkin=100000;
$riritsu=0.02;
$hensai=5000;
$hensaiG=0;
print ("1回目:");
$shakkin=$shakkin+$shakkin*$riritsu;
print ("借金額 " . $shakkin);
$shakkin=$shakkin-$hensai;
$hensaiG=$hensaiG+$hensai;
print (" 残額 " . $shakkin . " 返済合計 " . $hensaiG . "\n");
#
こんな感じで作って,後はコピーして増やす
17
練習問題2の解答
print (“26回目:");
$shakkin=$shakkin+$shakkin*$riritsu;
print ("借金額 " . $shakkin);
$shakkin=$shakkin-$hensai;
$hensaiG=$hensaiG+$hensai;
print (" 残額 " . $shakkin . " 返済合計 " . $hensaiG . "\n");
#
こんな感じで26回目までコピーして増やすと...残額が-になる.
→mondai02a.pl
25回目までで,125000円で,26回目で3987.28...円残っているので,
26回目(26ヶ月)で,元金,利息合計 約128988円
18
繰り返し2
• 同じ処理を別の方法によっても実現できる.
• 繰り返しには,for 以外に while がある.
• p0701.pl をダウンロードして実行
y:\perl> perl p0701.pl
動きはp0602.pl と同じ(はず)
19
whileによる繰り返し
• while文
while(条件式) { 処理の内容 }
– 条件が成立している間,処理を繰り返す
条件が
成り立っ
ている間
繰り返す
条件
処理
条件が成り立た
なくなったら
繰り返しループを
抜ける
20
while文による繰り返し(2)
• while文の記述例1
while( $i < 5) {
...
if (●▲){
...
}else{
...
}
$i++;
変数iの中身が5未満である
間処理を繰り返す
}
21
while文による繰り返し(3)
• 違った使い方.p0702.pl
– 今度はあたるまで繰り返すプログラムに.
– とりあえずダウンロードして実行.
Y:\perl> perl p0702.pl
– あたると,
お疲れ様でした.**回目にあたりました.
(途中で止めるには,Ctrl+c)
22
while文による繰り返し(4)
• whileの条件が違います.
while($sw==1) {
$swが1の間処理を繰り返す.
あたったら,$sw=0 とする.
$i++; をしているので,試した回数が入る.
}
最後に,メッセージの中で$iの中身を表示すると,そ
れは試した回数を表している.
23
while文による繰り返し(問題7)
• p0702.pl をもっと親切なメッセージつきに.
– 今のチャレンジが何回目なのかを表示する.
第10回目の挑戦です.
コンピュータが1~5の中から1つ数字を選びました.
さあ,いくつでしょうか(1~5)
24
while文による繰り返し(問題8)
• p0702.pl の条件を緩和.
– 1回あたるか,20回挑戦したら終わりに変更.
– 次のメッセージを使い分ける.
「あたって終了」するときのメッセージ
お疲れ様でした.**回目にあたりました.
「20回の挑戦でもあたらなくて終了」するときのメッセージ
残念でした.20回挑戦しても当たりませんでしたね.
25
今日のまとめ
• p0602.plと同じ処理を別の方法で実現できる.
• 繰り返しには,for 以外に while がある.
• p0701.pl をダウンロードして実行
• y:\perl> perl p701.pl
•
動きはp0602.pl と同じ(はず)
26
今日のまとめ whileによる繰り返し
• while文
while(条件式) { 処理の内容 }
– 条件が成立している間,処理を繰り返す
条件が
成り立っ
ている間
繰り返す
条件
処理
条件が成り立た
なくなったら
繰り返しループを
抜ける
27
今日のまとめ while文による繰り返し
• あたるまで繰り返すという場合.
• whileの条件は別の使い方もできる.
while($sw==1) {
$swが1の間処理を繰り返す.
あたったら,$sw=0 とする.
$i++; をしているので,試した回数が入る.
}
最後に,メッセージの中で$iの中身を表示すると,そ
れは試した回数を表している.
28