こんにちは。ECF代表のヒガです。
本記事では初心者向けアルゴリズムの演習問題を紹介しています。日頃のプログラミング学習にご活用ください。
はじめに
アルゴリズムとは、コンピューターに行わせる計算手順のことです。自在にプログラムを作るには、プログラム言語の文法の知識とともにアルゴリズムの考え方を身につけることが必要になります。
アルゴリズム技法習得の肝は「繰り返し」の活用です。この連載では、簡単な題材で繰り返しを使うアルゴリズムの基本パターンを練習していきます。
演習問題の一覧や勉強スタイルについてのアドバイスはこちらからどうぞ。
Q028 指定範囲のデータのみ表示
配列に格納された複数の数値データについて、指定した範囲(最小値と最大値を指定)のデータのみを先頭から順に表示させてください。ただし、操作対象の配列はプログラムの先頭で宣言し、適当な初期値を代入してください。また、範囲の最小値と最大値についても、プログラムの先頭でそれぞれ変数に代入することで指定してください。
初期値として {40, 10, 30, 50, 20} を使って整数型(Javaではint型)配列を準備し、さらに最小値に「20」、最大値に「39」を指定した場合の実行例は次のとおりです。
指定の範囲内(20≦x≦39)である「30」と「20」が表示対象となっています。
ヒント
Q025の「条件を満たしていれば表示」と同じパターンです。表示するときの条件式を考えましょう。
なお、プログラム実装で数値範囲を条件式で表すには「最小値≦対象データ かつ 対象データ≦最大値」のように、論理演算を使います。論理演算(かつ、または、〜でない)についての詳細は、使用しているプログラム言語の解説サイトや解説書を参照してください。
解答例と解説
考え方
まず最初に「何を繰り返す」かを考えます。今回の場合は
- 配列のデータ要素を表示する
を繰り返すことになります。ただし今回は無条件に表示するわけではありません。指定の範囲内のものだけです。つまり、指定の最小値・最大値で表現した条件式で判断を行った上で表示を行います。
箇条書きでまとめると、
- 次の動作を配列の要素数の分繰り返す
- 「指定の最小値≦【カウンタ変数】番目のデータ要素≦指定の最大値」となっているか
- 真(Yes)の場合、以下の処理を行う
- 【カウンタ変数】番目のデータ要素を表示する
- 改行する
- 真(Yes)の場合、以下の処理を行う
- 「指定の最小値≦【カウンタ変数】番目のデータ要素≦指定の最大値」となっているか
という流れになります。
フローチャート例
データ要素を表示する・しないの条件分岐を繰り返す、という形になっています。
Javaでの実装例
public class Q028 { public static void main(String[] args) { int[] a = {40, 10, 30, 50, 20}; // 操作対象配列の宣言と初期化 int min = 20; // 指定の範囲(最小) int max = 39; // 指定の範囲(最大) for (int i = 0; i < a.length; i++) { if (min <= a[i] && a[i] <= max) { // 指定の範囲か System.out.println(a[i]); } } } }
Javaでは配列の添字は「0」からスタートしますので、カウンタ変数iの初期化や継続条件式は、上記のフローチャートからはそのように変更しています。配列の要素の添字は0から4(要素数 - 1)なので、0から4までの5回の繰り返しです。
8行目の条件式では、数値の範囲を判断するために、2つの比較演算を論理演算で結びつける形で表現しています。
おわりに
前回のQ027に引き続き、繰り返しと条件分岐の組み合わせでした。
今回は数値範囲を表す条件式を紹介しましたが、判断アルゴリズムに使える「条件式」のパターンもいろいろあります。単純な比較の条件式に慣れてきたら、複数の比較を組み合わせる論理演算(かつ、または、〜でない)の練習にも挑戦していきましょう。
次回はこちらです。
合同会社イー・シー・エフでは、子ども向けプログラミングなどの教育講座を実施しています。プログラミング教室の案内や教育教材の情報、また関連するご相談・問い合わせにつきましては下記よりご確認ください。