つべこべ言わず組んでみよう(前編)
2007年12月31日(月)
つべこべ言わず組んでみよう(前編)
せっかくプロジェクト構成の解説をしたのに、肝心のプログラムを組まなければ、全く意味が無いと悟った僕は、初心者の方々にプログラムを組んで頂くべく、簡単な講義をすることにしました。その名も「つべこべ言わず組んでみよう」です(苦笑)
でも、これが結構大切でして、サンプルプログラムを100回読むよりも、1回でも実際に自分で打ち込んでみて、どのように動作をするのかを体感してみるほうが効果的です。
問題はどのサンプルプログラムを組むかにもよりますが、個人的な意見としては参考書のサンプルプログラムは本にもよりますが、固っ苦しい解説や前置きがあるため体で覚えるのにはあまり向かないものが多いです。
そういうわけで「とにかく組む」ことに重点を置いて、サンプルプログラムのソースだけいくつか用意してみました。解説に関しては大まかにしかしていないので、僕の解説で、大まかな概要をなんとなく覚えて、それから参考書等で正しい知識を身につけましょう。
固っ苦しい解説でも、前知識がある程度あれば意外とすんなり頭に入ってくれる場合があります。いわゆる階段の原理と同じで、一階から二階にジャンプして登るのは、常人には厳しいものがありますが、階段を一歩一歩着実に登ることなら、誰でもできますよね?
そんな階段の一段のように簡単なところから、体に叩きこめるサンプルプログラムを例によってスクリーンショットをつけて大雑把に説明していきます。
とにかく僕の望みは「Microsoft Visual C++ 6.0」等のコンパイラを持ってるなら、プロジェクトを構成し、一人でも多くの初心者達がプログラムの第一歩を踏み出すことです。
僕のブログを読んでくださるのも嬉しいですが、実際に組んでみてくれたらもっと嬉しいです。
あと、突き進んで「とにかくプログラム組んで」いますが、所々で不明な点が出てくると思われます。その場合、Google等で検索してみてください。自分で調べることが、成長する上で非常に大切ですから検索する癖をつけるためにも試してみてください。
それでは、初めてのプログラムに挑戦してみてください〜
↓プロジェクト構成がまだの人はコチラへ
最初の難関! プロジェクト構成(DOS編)
0、よくあるコンパイルエラー

全くの初心者の為に、プログラムを組む時の注意点を一つだけ伝えておきます。
error C2018: 文字 '0x81'は認識できません。
error C2018: 文字 '0x40'は認識できません。
ソースを見た限りおかしなところは無いのに、上記二つのコンパイルエラーが出た場合、プログラムのどこかに「全角スペース」を使ってしまってます。C/C++言語では原則的に「全角文字」は使用できません。特に「全角スペース」をどこかに入れてしまうと、見た目はどこもおかしくないのに何故かエラーが出るという不可解な状況に陥ります。もしも上記のコンパイルエラーが出た場合、エディタの検索機能で「全角スペース」を検索し、消すか、「Tab」もしくは「半角スペース」に置き換える等の対処をしてください。
1、最も短いプログラム

たったコレだけです。このプログラムが組めないという人は、パソコンの入力自体がまともに出来ないって事になります。「void」って字が青くなっていない人は、おそらくスペルがミスっています。そして「mein」ではなく「main」です(笑)
とりあえずコンパイルしてください。キーボードの「F7」でコンパイルです。エラーが出なければ、まぁ成功でしょう。実行はキーボードの「F5」で可能ですが、一瞬黒い画面がパッて現れてパッって消えるだけです。
このプログラムではC/C++言語で必ず必要な、処理の開始位置である「メイン関数」を宣言しています。……それだけで他の処理は一切何もしていません(苦笑)
だから言ったでしょ。「最も短いプログラム」だって(微笑)
2、コメントは目に優しい

緑色の文字で「// これはコメント」「/* これもコメント */」と追加されました。なんで緑色なのかというと、それはコメントだからです(微笑)
この緑色のコメント部分では、先ほど使用できないと書いた「全角文字」も使うことが出来ます。勿論「半角文字」も使えますし「全角スペース」もどうぞご自由に。なぜなら、この緑色のコメント部分に何を書いたとしてもプログラムには反映されないからです。
なぜこんな機能があるかといいますと、「目に優しいプログラム」にするためです(笑)
パソコンのディスプレイは光を発することにより色を表現しています。緑の光は最も人の網膜に負担をかけない波長であり、人は緑色を見るのに労力を要さないので、長時間緑色を見続けていても疲れることはなく、集中力を保つことができます。そのため所々にコメントを入れ、目に入る緑色の色調の光を増やすことによりプログラムの効率が増します。
……っていう、変な説得力のある冗談はさておいて、コメントはプログラムの説明書きとして使う機能です。
プログラムを組んでいると、所々に難解なアルゴリズムを組んでしまうことがあります。そのアルゴリズムがどんな処理をしているのかを端的にコメントで説明書きを残しておくと、後々手直ししたり、ソースを読み直すときに大変便利です。
人にはそれぞれ限界がありますから、計算式を見ただけでそれがどんな動作をするか見分けるのにはそれなりに時間を要します。でもコメントをつけておけば、その難解な計算式の意味が一瞬でわかります。つまりソースをガン見しなくてもいいので目に優しいです。
もし、あなたが難解な計算式を一目見ただけでどんな処理をしているのか理解できる人ならコメントをつけろと強制はしませんが、そうでないならコメントをつける事を強くオススメします。複数人でプログラムを組んでいるのならコメントは必須です。
3、はろ〜、わ〜るど

イキナリ行数が増えたからといって、驚かないで下さい。ほどんどがコメントですので。実際に増えた処理は「#include <stdio.h>」と「printf( "Hello world" );」だけです。
インクルードを解説するのは少々面倒なので興味のある方は自力で調べて〜(オイッ!)
んで、なんとなく見てわかりそうなのは「プリントエフ」の方ですね。ダブルクォーテーション(")で囲われている文字列を画面に表示するんですよ。ほんの一瞬だけ……
文末のセミコロン(;)は日本語で言う「。」と同じ意味合いで、処理の区切りを意味しますので、必ずつけて下さい。プログラム言語は書式にうるさいので、几帳面にしっかりとつけて下さい。
そこで「ん? じゃあなんでインクルードの方には、セミコロンが付いてないの?」って思った人はカンが鋭いです。それはインクルードの書式の方が特殊なのです。……なので疑問に思った方は、自力で調べてスッキリ理解してください(笑顔)
4、見えねぇよ! ってお方に

僕も動体視力が弱いので、処理が速すぎで「Hello world」の文字が見えません。なので「getchar();」という処理を「プリントエフ」の下の行に追加しました。
すると、どうでしょう……。「F7」でコンパイルし、「F5」を押してプログラムを動かしてみると、黒いコンソール画面に「Hello world」と、白い文字がしっかり出ています。「Enter」キーを押せば、黒いコンソール画面が消え、プログラムも終了します。
これで色々テストしやすくなりましたね(やったー)
ためしに「プリントエフ」の「ダブルクォーテーション」で囲われた部分の文字を書き換えてみてください。ちなみにその部分にも例外的に「全角文字」を使うことが出来ます。
5、なんか変な世界

「ゲットキャラ」を追加して処理が見えるようになったとき、素直に「Enter」キーを押した人は気が付かなかったと思われますが、適当なアルファベットを入力すると……とても変なことに、黒い画面に文字を入力できてしまいます(苦笑)
せっかくの「Hello world」が変になってしまった瞬間です!
これは「ゲットキャラ」が「画面を見えるようにする処理」をする機能(関数)じゃあなくて、文字入力を受け付ける機能だからです。文字を受け付けている間は処理が止まっているから、出力結果である「Hello world」が見れます。そして「Enter」キーを押せば入力受付を終了し「ゲットキャラ」はその結果を出すんですが、それを受け取ってないし、その後に何の処理も無いため、プログラムが終了し画面が消えてしまうということです。
……ってことで、あんまり気にしないで下さい。どうしても気になるなら自分で検索して調べてみるのもアリですけどね。
6、改行コード

「ゲットキャラ」の変な仕様がわかったところで、ついでだからその機能をありがたく利用させてもらい、「改行コード」の説明をすることにします〜
上のプログラムと下のプログラムそれぞれにソースと処理結果を載せましたが違いがわかりますか? ちなみに処理結果の方の「Hello world」の後に続く文は、僕が適当に打ち込んだものです。
ソースの違いは「ダブルクォーテーション」で囲まれた「Hello world」のところで、下のソースには「\n」が追加されています。これが「改行コード」です。
まぁ、この「\n」はHTMLで言う「<br>」タグだと思ってください。HTMLを知らないって人もいるかもしれないけど、そういうものなので例えとして出しました。
この記号が追加された下の方の処理結果では、僕が適当に打ち込んだ文の部分が改行されて表示されていることがわかると思います。
さて、残りの項目もいくつかありますが、一つ一つの解説が長くなりそうな箇所なので、ここまでを前編とし、次回に回そうかと思います。
次回の予定としては「変数」「繰り返しのfor文」「条件分岐のif文」等を考えてます。
↓次の項目
つべこべ言わず組んでみよう(後編)
