こんにちは。ECF代表のヒガです。
プログラミング初心者向けアルゴリズム演習問題の連載記事まとめです。日頃のプログラミング学習、講義、研修等での演習にご活用ください。
「繰り返しアルゴリズム」をマスターしよう
アルゴリズムとは、コンピューターに行わせる計算手順のことです。自在にプログラムを作るには、プログラム言語の文法の知識とともにアルゴリズムの考え方を身につけることが必要になります。
アルゴリズム技法習得の肝は「繰り返し」の活用です。この連載では、簡単な題材で繰り返しを使うアルゴリズムの基本パターンを練習していきます。実践のプログラムは、この基本パターンの組み合わせかちょっとした応用で解決できるはずです。この連載でしっかりマスターしましょう。
演習問題の構成について
各問題は以下の構成になっています。
- 問題文(実行例)
- ヒント
- 解答例と解説
- 考え方
- フローチャート例
- Javaでの実装例
問題はすべて標準出力に文字を表示するプログラムを題材としています。実行例はWindowsコマンドプロンプトでの実行例を掲載していますが、基本的にはどの実行環境でも同じだと思っていただいて大丈夫です。
解答例にはフローチャートとプログラム実装(Java)を掲載しています。自身の勉強スタイルに合わせて、片方、または両方を参照してください。
各記事中の解答例の実装例ではプログラム言語にJavaを用いていますが、アルゴリズムの考え方は特定のプログラム言語によりません。自身の必要とするプログラム言語を用いて演習を行ってください。Javaについての解説文となってはいますが、Java固有の文法を説明しているわけではありません。適宜自身のプログラム言語での書き方に読み替えることができます。
また、解答例はあくまで「例」です。自身の導き出した解答が正解かどうかは自身で論理的に判断してください。論理的思考力は、これもまたアルゴリズムを考えるときに必要な能力となりますので、その練習でもあります。
あなたに合った勉強スタイルを見つけよう
この問題集を活用しようとしている皆さんは、プログラミング初心者がほとんどかと思います。学習方法についても試行錯誤している最中ではないでしょうか。そこで、典型的な勉強スタイルを2パターンご紹介します。自身の生活環境を考慮しつつカスタマイズして実行してみてください。
標準的な勉強スタイル
- 問題をよく読み、「やりたいこと」をしっかり理解、イメージする。【要件確認フェーズ】
- 「やりたいこと」の実現手順を日本語の文章で箇条書きする。【設計フェーズ】
- 箇条書きをインプットとし、フローチャートやプログラムを作成する。【実装フェーズ】
システム開発の現場での流れに沿った順番です。時間に余裕があれば、この続きとして「問題を自分でアレンジ(仕様の変更)して、フローチャートやプログラムを再作成する」というのもいいでしょう。
自力では難しい場合の勉強スタイル
- 問題をよく読み、「やりたいこと」をしっかり理解、イメージする。
- 解答例の考え方・箇条書きをよく読み、「やりたいこと」が実現できていることを理解する。
- フローチャートやプログラムの解答例をトレース(流れを1処理ずつ確認)し、「やりたいこと」が実現できていることを理解する。
- 箇条書きをインプットとし、フローチャートやプログラムを改めて自身で作成する。(解答例を見ながら写すのもOK)
そもそもプログラミング初心者だと、アルゴリズムを自力で考えることが困難な場合も多いでしょう。これはプログラムの典型パターンがまだ脳に定着していないからです。そこで、スポーツ練習の反復練習と同じ要領で、各問題で提示された解答例を次々写していきましょう。
学生時代のイメージだと答えを写すのは悪いことだと考えがちですが、見本のプログラムを写していく学習方法は「写経」とも呼ばれ、開発業界では定番のやり方です。演習問題集全体について一通り写経が完了できれば、そこであなたの脳にはアルゴリズムの典型パターンがインプットされているはずです。そこで改めて最初から演習に取り組んでみましょう。
演習問題インデックス
全36問+オプション2問をご用意しました。Q001から順番にやっていくと解説がわかりやすい構成となっています。
- Q001 横に並べる(繰り返し)
- Q002 縦に並べる(繰り返し)
- Q003 指定した数だけ横に並べる(変数と繰り返し)
- Q004 指定した数だけ縦に並べる(変数と繰り返し)
- Q005 横と縦に並べる(二重ループ)
- Q006 2つの文字を交互に並べる(条件分岐と繰り返し)
- Q007 横ストライプ
- Q008 縦ストライプ
- Q009 市松模様
- Q010 三角形に文字を並べる
- Q011 逆さの三角形に文字を並べる
- Q012 右下がりに文字を並べる
- Q013 左下がりに文字を並べる
- Q014 1から指定の数まで縦に表示
- Q015 1から指定の数までの10倍の数を縦に表示
- Q016 1から指定の数までの指定倍の数を縦に表示
- Q017 1から指定の数まで、指定の倍数を縦に表示
- Q018 指定の数から1まで縦に表示
- Q019 1から指定の数までカンマ区切りで表示
- Q020 1から指定の数までカンマ区切りで表示(最後のカンマ無し)
- Q021 3の倍数のときのみ?を表示しながら1から指定の数まで表示
- Q022 九九表
- Q023 九九表をきれいに表示
- 【オプション問題】データ構造 〜 配列の基本
- Q024 配列の内容を表示
- Q025 配列の内容を逆順に表示
- Q026 配列の内容をカンマ区切りで表示
- Q027 文字数が指定数以下のデータのみ表示
- Q028 指定範囲のデータのみ表示
- Q029 配列データのコピー
- Q030 配列データの合計
- Q031 配列データの平均
- Q032 指定範囲のデータのみ合計
- Q033 配列データから目的のデータを探す(線形探索)
- Q034 最小値の探索
- Q035 最大値の探索
- 【オプション問題】スワップ処理 〜 2つの変数データの入れ替え
- Q036 配列データの並び替え(選択法)
合同会社イー・シー・エフでは、子ども向けプログラミングなどの教育講座を実施しています。プログラミング教室の案内や教育教材の情報、また関連するご相談・問い合わせにつきましては下記よりご確認ください。