アルゴリズム(最大値・最小値)

オレンジのサイコロプログラム

今回は最大の数または最小の数を見つけるアルゴリズムについて説明したいと思います。

考え方(アルゴリズム)

最大値・最小値プログラムを確認あたってのアルゴリズム(考え方)です。まず、比較するための数値データがいりますよね。これは既に勉強している配列で用意します。そして、次に最大値または最小値を格納するための変数 [ num ] 、そしてカウンタとしての変数 [ i ]を用意します。これらを使って次の図のように条件分岐と反復処理を使ってぐるぐると数の比較と交換を繰り返しながら最大または最小の値をみつけていきます。

最大値アルゴリズム

 

この図にあるように数値データの最初の数を最大値の結果を示す変数[ num ]にとりあえず仮でいれてあげ、そのあとと2つめの値の大小を比較して、最初の数の方が大きければ、そのまま、小さかったら2つ目の数を[ num ]にいれて結果を入れ替えます。これをデータの数だけ繰り返して最後に[ num ]に入っているものが最大値です。

よくお笑いやモノマネ番組とかである、最初の人を暫定一位において、次に来る人と戦って負けない限り暫定一位にいて最後まで誰にも負けなかったら、あなたが優勝というやつです。

 

暫定一位交代

フローチャートを書く

さて次はプログラムをするためにフローチャートを書いていきます。それがこちら

最大値のフローチャート

 

先ほど話をした通り暫定一位が本当の一位になるまでに数の大小勝負をおこなっていきます。このフローチャートは最大値プログラムを作るためのものなのですが、オレンジで書いている部分の条件分岐で、num < A[i] を num > A[i] と大小符号を逆にすることで最小値プログラムにすることができます。

プログラミングする

Scratchで書く

最大値、最小値プログラムをScratchで表現します。

Scrachプログラム(最大値)

Scratchでの共有プログラムはこちら

https://scratch.mit.edu/projects/336423293/

さて解説すると基本はフローチャートと同じなのですが、Scratchでつくった場合。比較する数を配列に入れるというのはあらかじめ作ってあります。今回は例題どおり2、5、6、8の4種類としましたがもっと増やしたい場合はあらかじめ作ってください。

そしてScrachの場合は配列の1つ目を指定するのは0番目ではなく、1番目と表現するため、ここがちょっとだけフローチャートとことなります。また今回、Scrachでは繰り返し試す際に変数の値が0にリセットされた方がわかりやすいということで〔スペース〕キーを押したら変数が0になるという機能も合わせて作っておきました。

Pythonで書く

さて、同じものをPythonでつくるとこうなります。

A = [5.8,6,2]
num = A[0]

for i in range(1, len(A)):
    if (num < A[i]):
       num=A[i]

print("最大値は",num)

 

Pythonの場合は変数を宣言する必要はなく、for構文のところで一気に作っちゃいます。そして、Pythonでは配列に入っている数の個数、つまり配列の長さはlen( ) という関数でとれます。配列の名前はAですので、len(A)とすると、配列に入っている数の個数、つまり今回であれば 4 が帰ってきます。つまり、このfor構文の中では i < 4 の条件をみたす限り、反復処理が繰り返されます。なおPythonは一般的なプログラムと同じく配列の1番目はA[0]と指定されますので、この表現になりますね。

まとめ

さて今回は最大値、最小値を求めるプログラムをつくりました。これは基礎的なアルゴリズムなのですが、比較した後、変数numの中身を新しい数で塗り替えるというところが、ちょっと最初につまづくかもしれませんね。何度も試してみて、数を入れ替えるという感覚をつかんでおきましょう。

 

コメント

タイトルとURLをコピーしました