101000これで正確に動きました!あとは不要になったデバッグ用のprintf関数をコメントアウトしておきましょう。消してしまうよりかは、後のためにコメントとして残しておく方が無難です。0;}このようにして、printf関数を用いて途中の値を出力することで、バグの原因を特定し、修正することができました。printfデバッグは簡単で強力な手法です。悩んだときには頼ってみましょう。課題で行き詰ったときに、プログラムとひたすらにらめっこしている学生もたびたび見受けられますが、そういうときにはとりあえず手を動かしてprintfデバッグしてみた方が解決できることが多いです。ひとつ例を見てみましょう。数値を入力してもらう。input_number^2を計算する。0;}しかしこれを実行しても「0」としか表示されません。何がいけないのでしょうか。printfデバッグで調べてみましょう。数値を入力してもらう。input_number^2を計算する。0;}デバッグ用にprintfを挿入しました。ループ計算の時は、「ループに使った変数i」「使用した計算」「結果を代入した変数」の3つを出力すれば、だいたい問題が絞り込めます。色々な処理をしているなら、それも全部出力してみると原因を特定しやすくなるかもしれません。これを実行してみましょう。00出力結果から、「i*iに問題はない」「totalに代入する時に0になっている」ことがわかります。よってtotalの代入式をよく見てみましょう......よく見ると「+=」とすべきところが「*=」となっています!これでは何度やっても0になるのは仕方ありません。ひとつのバグも見つかります。iは「1からinput_numberまで」のはずですが、出力を見ると「0からinput_number-1まで」となっており、ひとつずれています。これは変数の初期化とループ条件が間違っているということです。input_number」に修正することで直すことができます。数値を入力してもらう。input_number^2を計算する。0;}これで修正できました!実行してみると、正しい出力が得られます。このようにして、printfデバッグをうまく使えば、簡単にバグの特定ができます。自分が書いたプログラムがうまく動かないときは、画面を眺めてうんうん唸るよりも、とりあえずprintfデバッグに手を出して見ることをおすすめします。[上級者向け]中間変数を使う授業が先に進んで来ると、プログラムがどんどん複雑化していきます。複雑なプログラムは流れが追いにくく、バグが発生しても気づくことが難しくなります。複雑なプログラムは、中間変数を使うことで、ある程度わかりやすくできます。わかりやすいプログラムを書くことができれば、バグの発見が簡単になります。2点間の距離を計算する。2)の2点間の距離を計算するもので、実行すると「1.41421」と表示されます。大規模な計算式になっていて、タイプミスなどをしてしまいそうです。このような部分はバグの温床となります。いったときには中間変数を増やして、いくつかに分割してやると読みやすくなります。2点間の距離を計算する。0;}動作は変わりませんが、だいぶ読みやすくなります。細かく分けてもいいかもしれませんが、そこは個人の裁量次第です。中間変数の使用は、if文においても有効です。input_charがアルファベットあるいは数であることを確かめる。0;}これは文字がアルファベットあるいは数であることを確かめるプログラムですが、if文の中がすごいことになっています。いった巨大な条件式は、プログラムを書いているときは大丈夫なのですが、あとで読む時になると、なにをやっているのか少しわかりにくいです。これも中間変数を用いることで読みやすくすることができます。input_charがアルファベットあるいは数であることを確かめる。0;}だいぶすっきりしました。変数の数は大幅に増えましたが、if文自体はシンプルになりました。[上級者向け]関数を活用する基礎課題をすべて提出して、応用課題などに手を出し始めると、プログラムが非常に複雑になってきます。複数の処理が入り乱れるからです。いったときは関数を利用して処理を分割すれば、プログラムをシンプルに保つことができます。関数の利用は、躊躇する学生が多いようです。それは「関数」という概念自体が難しいからでしょう。関数を用いて解決できる問題よりも、関数を用いることで発生する問題の方が多いとなると、なかなか手を出せません。それでも、関数というものは非常に便利なので、もし余裕があれば、ぜひ利用してみてください。関数を使うと簡単になる例を紹介します。行列のすべての要素が素数かどうか調べる。0;}これは非常に読みにくいプログラムで、何をやっているのか、さっぱりわかりません。このままだとおそらく大量のバグに悩まされることになります。何とかしないといけません。そこで関数を用いて処理を分割すれば、プログラムが綺麗になります。処理が複雑な部分を関数にすれば、だいたい綺麗になります。今回は素数判定部分を切り出せば簡単になりそうな気がします。実際にやってみましょう。素数でなければ0を返す。素数でなければ1を返す。素数であれば0を返す。行列のすべての要素が素数かどうか調べる。0;}だいぶ綺麗になりました!まだまだ2重ループなどがあり複雑ではありますが、先ほどよりかは比較的読みやすいはずです。このように、関数で処理を切り出し分割することで、プログラムを綺麗に保つことができます。関数は奥が深く、様々な場面で利用することができます。関数については、記事「JavaScriptの関数で何ができるのか、もう一度考える」でも詳しく解説しているので、そちらも読んでみてください。まとめ実習において気をつけたいこと積極的に質問する自分で考えることも大事ですが、せっかくなのですから先生やTAに質問してみましょう。本やネットで調べる複数の本を参照したり、ネットの質問サイトを活用してみましょう。プログラミングにおいて気をつけたいことエラーメッセージを読むエラーメッセージには多くの情報が含まれています。あなたの助けになるかもしれません。プログラムを読みやすくする読みやすいプログラムはバグを減少させます。できるだけ読みやすく書いてみましょう。わかりやすい変数名をつける変数名がわかりやすければ、ミスも見つけやすくなります。コメントを入れるコメントがあれば、プログラムを読むだけではわからない情報を手に入れることができます。コメントを入れるあまりかっこよくはないコメントでも実習授業では大いに役立ちます。なんでもコメントに書いてみましょう。printfデバッグをするprintfで途中の値を出力すれば、バグの原因が何か見えてくるかもしれません。[上級者向け]中間変数を使う中間変数を使えば、複雑な式を複数に分割することができます。[上級者向け]関数を活用する関数を使えば、長いプログラムを細かく分けることができます。APIでブラウザからの各種機能へのアクセス権限を確認・要求するRSSプロフィール古都ことふるみやことです。フロントエンドとかいろいろやるよ。