###前提
未経験者を含む若者にプログラミングを指導する機会があります。使う言語はJava、Cが多いですが、フローチャートを用いてアルゴリズムを考えてもらう時間もあります。皆様にご教示いただきたいのは、彼らに考えてもらうプログラミング或いはアルゴリズムの課題です。
###質問
初学者にサブルーチン(関数)のありがたみを実感してもらえる、それでいて手頃なサイズの課題はないでしょうか。
###条件
サブルーチンを使わなくても作れるけど、そのなかのある機能をサブルーチンとして独立させると、全体の見通しがよくなるような課題。ただし課題として提示する際に「ここをサブルーチンにすると良い」などとは示さずに考えてもらい、試行錯誤もしてもらいたい。
ある程度コード量の大きな課題を扱える段階になれば自然に関数を使いますが、なるべく早い段階で・できるだけ小さな規模で体験させたい、初学者でも食いつきがよさそうな課題はないか、という虫のいい質問です。
Java、Cの入門レベルの文法、関数を含んだ文法で作ることが可能な課題という事になります。ボリューム的に100行を超えるような課題では、初学者にキツイと思います。
もっと言えば、1〜3枚程度のフローチャート課題にできると、なお良いです。
2進数、16進数、基数変換、コンピュータの基本構造(CPUとメモリ、入出力装置といった程度)、文字コードとしてのASCIIコード、単純変数、配列はもちろん、スタックやキューが何か・どんなものか、という程度の知識は前提にできます。
その代り構造体やクラスなどは、この段階で使いたくありません。ポインタも無しです。
「最古のアルゴリズム」ユークリッドの互除法を取り上げることはあります。互除法は一回ごとに変数の値を置き換えながら繰り返すところが、アルゴリズムらしさを感じさせて良い教材だと思います。でも、ループを教えることはできますが、サブルーチンの課題ではないですね、残念ながら。
###お礼
KSWordOfHasteさんが挙げてくださった3つの特徴で私も整理ができました。漠然とこんな形を想像していましたので。
ループ { 値 = やや複雑な処理(引数); 値を使って処理; }
「やや複雑な処理」関数は、条件が複数あるため、出口が複数あるようなものです。これをループの中に展開すると見通しが悪くなりがちです。
割引計算は割引の条件が複数あるというだけでなく、往々にして条件が増えていくものです。条件の部分をサブルーチンとして独立させることで、コードの保守性にも目を向けさせることができそうです。
白状しますと、私が質問を投稿した時点で、料金割引計算というジャンル?は何となくダサい感じ(失礼!)がしていて、最初から除外していたような所がありました。今となっては自分の思い込みを恥じるばかりです。
よって、ベストアンサーはmomon-gaさんです。もちろん、ETCの例を挙げてくださったTaroToyotomiさんにもお礼いたします。
皆様方のお答えはそれぞれ、私の中で考えを検証するのに役立ちました。ありがとうございます。また、Chironianさんが「意外に難問」とコメントしてくださったので、質問した甲斐があったと意を強くした次第です(笑)。
P.S.
実は、ここで質問してみたかった隠れた理由は、
#include <stdio.h>
みたいな質問を多く目にして、どうしてこうなるのか実地検証してみたかった、というのがあります。その疑問は質問を投稿するまでもなく解決しましたが、プレビュー画面の表示があるのに、投稿後に修正ができるのに、注意力が足りないのか、対策を見つける力が弱いのか、それとも質問者は何とも思わないのか、、、やや心配しますね。
回答8件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/28 07:34
2017/10/29 16:35
2017/10/29 22:57