リストと for 文などの繰り返しを組み合わせることで、様々なプログラムを作成できます。よくあるパターンを紹介します。
リストの合計値の場所を求めるプログラムを考えましょう。
3 3 7 2
5 100 200 300 400 500
4 10 20 30 40
goukei を 0 で初期化しておきます。for 文でリスト a の各要素 a[i] に順番にアクセスし、その値を goukei に加算しています。ループが終わったときには goukei にリストの合計値が入っています。リストの最小値・最大値の場所を求めるプログラムを考えましょう。
3 3 7 2
5 100 200 300 400 500
4 10 20 30 40
saishochi をリストの先頭の値 a[0] で初期化しておきます。for 文でリスト a の各要素 a[i] に順番にアクセスし、もしその値が saishochi より小さければ、saishochi を上書きします。ループが終わったときには saishochi にリストの最小値が入っています。行目の不等号を逆向きにすると、最大値も求められます。
リストの最小値・最大値の場所(添え字)を求めるプログラムを考えましょう。
3 3 7 2
5 100 200 300 400 500
4 10 20 30 40
basho をリストの先頭を表す 0 で初期化しておきます。for 文でリスト a の各要素 a[i] に順番にアクセスし、もしその値が a[basho] より小さければ、basho を上書きします。ループが終わったときには basho にリストの最小値の場所が入っています。行目の不等号を逆向きにすると、最大値の場所も求められます。
リストにある値が含まれているか探索するプログラムを考えましょう。
3 3 7 2 7
5 100 200 300 400 500 400
4 10 20 30 40 50
n が、 行目には半角スペース区切りで整数のリスト a の各要素が、 行目には探索したい値 x が書かれています。a に値 x が含まれているかを判定し、含まれている場合はその場所を出力するプログラムです。最初、変数 basho をリスト外を表す -1 で初期化しておきます。for 文でリスト a の各要素 a[i] に順番にアクセスし、もしその値が x と等しければ、basho を上書きします。ループが終わったとき、値 x が見つからなかった場合は初期値の -1 のままになっています。値 x が見つかった場合は、最後に見つかった場所で basho の値が上書きされています。リストのうち条件に合うものの個数を数え上げるプログラムを考えましょう。
3 3 -7 2 7
5 100 -200 300 400 -500 400
4 10 -20 30 -40 50
a に正の数が何個含まれているかを求めるプログラムです。最初、変数 kazu を 0 で初期化しておきます。for 文でリスト a の各要素 a[i] に順番にアクセスし、もしその値が正であれば、kazu に 加算します。ループが終わったときには kazu に正の数の個数が入っています。条件式 a[i] > 0 を書き換えることで、他にも様々な条件を満たす値の個数を求める(数え上げる)ことができます。
リストの全部の要素が条件を満たしているか判定するプログラムを考えましょう。
3 3 -7 2 7
5 100 -200 300 400 -500 400
4 10 -20 30 -40 50
3 0 0 0
a の全部の要素がゼロかを判定するプログラムです。最初、変数 answer を「全部ゼロです」で初期化しておきます。for 文でリスト a の各要素 a[i] に順番にアクセスし、 つでもゼロでない値が見つかれば、変数 answer を「ゼロではない値が含まれています」に上書きします。ループが終わるまで一度も上書きが発生しなければ全部ゼロであることが分かります。条件式 a[i] != 0 を書き換えることで、他にも様々な条件で全部の要素が条件を満たしているかを判定することができます。
次のクイズに取り組んでみましょう。ただし、入力欄を読み取って変数に代入するプログラムはもとから書いてあります。その続きを自分で書いてみましょう。
n 人の生徒がテストを受けました。各生徒の得点がリスト tokuten に入っています。平均点を出力するプログラムを作成してください。
6 63 100 71 100 89 76
5 50 90 70 80 80
9 40 60 80 100 20 50 70 90 30
n 人の生徒がテストを受けました。各生徒の得点がリスト tokuten に入っています。最高点を出力するプログラムを作成してください。
6 63 100 71 100 89 76
5 50 90 70 80 80
9 40 60 80 100 20 50 70 90 30
n 人の生徒がテストを受けました。各生徒の得点がリスト tokuten に入っています。 点を取った人数を出力するプログラムを作成してください。
6 63 100 71 100 89 76
5 50 90 70 80 80
9 40 60 80 100 20 50 70 90 30
とあるゲームで遊んでいます。今、n 体の敵モンスターがいて、各モンスターの体力がリスト tairyoku に入っています。あなたは敵モンスターに 回ずつ攻撃します。通常攻撃では tsujo ダメージ、 回だけ使える必殺攻撃では ダメージ与えて必ず倒すことができます。すべてのモンスターを倒す(体力を 以下にする)ことができるか判定し、「すべてのモンスターを倒せます」または「倒せないモンスターがいます」と出力するプログラムを作成してください。
6 63 100 71 100 89 76 90
5 50 90 70 80 80 85
9 40 60 80 100 20 50 70 90 30 150