こんにちは。ECF代表のヒガです。
本記事では初心者向けアルゴリズムの演習問題を紹介しています。日頃のプログラミング学習にご活用ください。
はじめに
アルゴリズムとは、コンピューターに行わせる計算手順のことです。自在にプログラムを作るには、プログラム言語の文法の知識とともにアルゴリズムの考え方を身につけることが必要になります。
アルゴリズム技法習得の肝は「繰り返し」の活用です。この連載では、簡単な題材で繰り返しを使うアルゴリズムの基本パターンを練習していきます。
演習問題の一覧や勉強スタイルについてのアドバイスはこちらからどうぞ。
Q027 文字数が指定数以下のデータのみ表示
文字列型の配列に格納された複数の文字列データについて、文字数が指定数以下のデータのみを先頭から順に表示させてください。ただし、操作対象の配列はプログラムの先頭で宣言し、適当な初期値を代入してください。また、文字数もプログラムの先頭で変数に代入することで指定してください。
初期値として {"abc", "abcd", "abcde", "xx", "yyy"} を使って文字列型(JavaではString型)配列を準備し、さらに文字数に「3」を指定した場合の実行例は次のとおりです。
ヒント
文字列の文字数(長さ)を取得する方法はプログラム言語により異なります。Javaの場合は、Stringクラスのlength()メソッドを呼び出すことで、その文字列の文字数を取得できます。
// Javaの例 String s = "Hello"; // String型のデータ int num = s.length(); // numには5が代入される
Q024では配列の先頭から無条件にデータを表示させていましたが、今回は条件を満たした上で表示する、という違いがあります。
解答例と解説
考え方
まず最初に「何を繰り返す」かを考えます。今回の場合は
- 配列のデータ要素を表示する
を繰り返すことになります。ただし今回は無条件に表示するわけではありません。指定の文字数以下のものだけです。つまり、文字数に関する条件式で判断を行った上で表示を行います。
箇条書きでまとめると、
- 次の動作を配列の要素数の分繰り返す
- 【カウンタ変数】番目のデータ要素の文字数と指定の文字数を比較する
- 指定の文字数以下の場合、以下の処理を行う
- 【カウンタ変数】番目のデータ要素を表示する
- 改行する
- 指定の文字数以下の場合、以下の処理を行う
- 【カウンタ変数】番目のデータ要素の文字数と指定の文字数を比較する
という流れになります。
フローチャート例
データ要素を表示する・しないの条件分岐を繰り返す、という形になっています。
Javaでの実装例
public class Q027 { public static void main(String[] args) { String[] a = {"abc", "abcd", "abcde", "xx", "yyy"}; // 操作対象配列の宣言と初期化 int n = 3; // 指定の文字数 for (int i = 0; i < a.length; i++) { if (a[i].length() <= n) { // 指定の文字数以下か System.out.println(a[i]); } } } }
Javaでは配列の添字は「0」からスタートしますので、カウンタ変数iの初期化や継続条件式は、上記のフローチャートからはそのように変更しています。配列の要素の添字は0から4(要素数 - 1)なので、0から4までの5回の繰り返しです。
7行目の条件式では、データ要素の文字列の文字数(長さ)を取得して使っています。文字数取得の詳細は上記のヒントやJavaの解説サイト、書籍を参照してください。
おわりに
繰り返しのアルゴリズムでも、全く同じ処理を繰り返すのではなく、ある条件がそろったデータに対してのみ処理を行うというパターンはよくあります。全体の形式としてはQ021の「3の倍数のときは?を表示」等と同じく、繰り返しと条件分岐の組み合わせです。
本連載では「繰り返し」を主題に置いて演習を行っていますが、「条件分岐(判断)」もアルゴリズムを構成するもう一つの要です。仕様(問題文)をしっかり読み込むことで、今必要とされる条件を漏れなく見つけていきましょう。
次回はこちらです。
合同会社イー・シー・エフでは、子ども向けプログラミングなどの教育講座を実施しています。プログラミング教室の案内や教育教材の情報、また関連するご相談・問い合わせにつきましては下記よりご確認ください。