簡単なプログラミング言語って……

2007年12月25日(火)
簡単なプログラミング言語って……

 これからプログラムを始める方は誰もが思うはずです。
 いきなり難しいプログラム言語を覚える自信がないから、まずは簡単な言語を覚えて、だんだんステップアップ出来ないかな? と……
 そしてどの言語なら初心者でも簡単にプログラム出来るのかと……ってな訳でその疑問について僕の今までの経験を元にお答えしようと思います。

 皆様は「Hello world」というプログラムを知っていますか?
 もし知っていて、それを何らかの言語で組んだことのある人はすでに答えが出ています。

 知らない人にはお教えします。
 「Hello world」とは画面に「Hello world」と表示するだけの超単純なプログラムです。
 大抵の入門書で一番最初に組むと思われるプログラムです。

 このプログラムを組んだからといって何になると言いますと……あなたが自分でプログラムを始めて組んだという実績になります。

 「千里の道も一歩から」と言うように、どんなプログラム言語でもこの「Hello world」から始まります。
 そして、この「Hello world」のプログラムは超単純だから、手順に従ってそのとおりにプログラムすれば誰でも出来るはずです。

 どんなプログラム言語でも誰でも出来る……それで全くプログラムを組んだことの無い人間から一回だけプログラムを組んだことになるんです。

 0と1の違いは大きいです。

 0は今までやってこなかった人、もしくはやろうとしても迷ってばかりいて結局やらなかった人。
 1はとりあえず見よう見まねだけどやってみた経験者で、実際に行動した人。

 0の人は計画的過ぎて、計画倒れしている感じがします。
 慎重に考え、いろんな意見を参考にして失敗しないようにしよう……と。
 そして最初の言語選びも慎重に行う。

 しかし、結局のところ、どの言語を選んだにしたって最初のステップである「Hello world」はどんぐりの背比べです。
 一般的に超難しいといわれているアセンブラ言語でも、ほんの十行程度です。
 C言語だと書式にもよりますが五行程度で済んでしまいます。

 それぞれのプログラム一行一行の意味なんて最初なんだからわからなくても良いんです。
 何回も繰り返し「自分で」プログラムしていくうちに少しずつ調べていけばいいんです。

 さて、話を戻します。

 いきなり難しいプログラム言語を覚える自信がないから、まずは簡単な言語を覚えて、だんだんステップアップ出来ないかな? と……
 そんな風に考えている暇があったら、とりあえず手短に組めそうな言語で「Hello world」を組みましょう(笑)
 最初のステップはどんな言語でも簡単です。

 答えを言うなら、簡単なプログラミング言語ってのはあなたが手短に組める言語です。

 それでも迷えるならC言語(もしくはC++言語)をオススメします。
 なぜC言語かというと、僕がメインで使っている言語だからです。
 一般的に言語としての難易度は高いと言われてますけど、別にそんなことは無いです。
 うわさに聞くポインタが怖いというなら実際に簡単なポインタのプログラムを組んでみるべきです。
 やってみなければ実際のところ何にもわからない訳で、何にもわからないことをしようとしても難しいのは当たり前です。

 ただし、C言語(C++言語)を学ぶなら、コンパイラが絶対必要です。
 開発する上でオススメのコンパイラは「Microsoft Visual C++」ですけど、その辺は本人の予算や環境、作りたいものによります。

 もし、「Microsoft Visual C++」での開発環境があるなら、僕が今後作成予定のebookでゲームプログラムのお勉強が出来ることでしょう。
 でも、その環境が無くても、応用すれば問題なく勉強できるでしょう。

 応用力はプログラムを組む上で非常に重要です。

 プログラム言語を覚える時点では参考書等に載っているプログラムをひたすら組めば良いですが、自分の作りたいものを組むためには自分で応用して組み立てる必要があります。
 そこで自分の思ったとおりに作ることが出来る事こそプログラムを覚える醍醐味です。

 さて、話が変な方向に行かないうちにまとめます。

 もし、どの言語でプログラムを始めれば良いのか迷っているなら、まずは何でも良いので手短にはじめることが出来そうな言語を組んでください。
 そして何度も繰り返し参考書等を参考にして組んでみてください。
 何度も組んで、大体の言語の書式を覚えたら応用として参考書に載っていないオリジナルのプログラムを簡単なもので良いので組んでみてください。

 そこまで出来ればあなたにとってその言語が「簡単なプログラミング言語」になることでしょう……

↓次の項目
日常生活での応用力を発揮したとき

ゲームアルゴリズム勉強用ライブラリ


最初の難関! プロジェクト構成(DOS編)

2007年12月30日(日)
最初の難関! プロジェクト構成(DOS編)


 僕は常日頃から思っていることは、「パソコン初心者にとってプログラムのプロジェクト構成はかなり難しい」ってことです。

 僕は「Microsoft Visual C++ 6.0」のコンパイラ(統合開発環境)を持っており、それで大抵のプログラムを組んでますが、コレがパソコン初心者にとっては余計な機能が多くて非常にとっつき難いものになってしまってます(苦笑)

 一応、パソコンに関してもプログラムに関しても上級者に位置する僕からすれば、いらない機能は無視して、必要な機能を色々応用して使いこなせていますが、ずぶの初心者にしてみたら「Hello world」を組む前に、「どうやったらプログラムが組めるんですか?」っていうふうに根本的な部分でつまずいてしまう事でしょう。

 そこでそんな「ずぶの初心者」達のために、最も簡単なC/C++言語のプログラムが組めるDOS(コンソール)プログラムのプロジェクトの作り方を親切にスクリーンショットまで付けて懇切丁寧に解説しようかと思ってます。

 僕が持っている環境が「Microsoft Visual C++ 6.0」のみなので、他の環境だと色々と応用して対処しなければなりませんが、大抵は似たり寄ったりでしょう。多分……

 それでは避けては通れない最初の難関、プロジェクト構成に挑戦してみてください〜



1、プロジェクトの新規作成


プロジェクトの新規作成


 「Microsoft Visual C++」を立ち上げ、メニューバーの「ファイル(F)」から「新規作成(N)」を選択します。



2、プロジェクトの選択


プロジェクトの選択


 「新規作成」のウィンドウが出たら「プロジェクト」タブであることを確認して、「Win32 Console Application」を選択します。ちなみにまだ「OK」は押せません。



3、ディレクトリの選択


ディレクトリの選択


 「位置(C)」のテキストボックスの右側にあるボタンを押すと、プロジェクトを作成するディレクトリを選択できます。ここでデスクトップ等、わかりやすい位置に設定します。
 なお、この例ではわかりやすいようにCドライブの直下の位置を選択しています。ディレクトリの意味がよくわからないという方は図と同じ箇所(Cドライブの直下)を選択して「OK」を押しましょう。



4、プロジェクト名の入力


プロジェクト名の入力


 「プロジェクト名(N)」を入力します。この例では「test」と入力しています。プロジェクト名を入力すると、「位置(C)」のテキストボックスの行末にもプロジェクト名が書かれます。確認したら、いつの間にか押せるようになってる「OK」を押します。



5、空のプロジェクト作成


空のプロジェクト作成


 「空のプロジェクト(E)」を選択して「終了(F)」を押します。



6、新規プロジェクト情報の確認


新規プロジェクト情報の確認


 「新規プロジェクト情報」を確認したら「OK」を押します。



7、ワークスペース


ワークスペース


 画面の左側に「test クラス」と書かれたウィンドウが出来あがっています。それが「ワークスペース」です。



8、ソースファイルの新規作成


ソースファイルの新規作成


 再度、メニューバーの「ファイル(F)」から「新規作成(N)」を選択します。「新規作成」のウィンドウが出たら「ファイル」タブであることを確認して「C++ ソースファイル」を選択します。ちなみにまだ「OK」は押せません。



9、ソースファイル名の入力


ソースファイル名の入力


 「ファイル名(N)」のテキストボックスに「main.cpp」と入力します。この「*.cpp」という拡張子は「C(シー)++(プラスプラス)」の略であり「C++言語」のソースファイルだという事になります。別に「main.c」として「C言語」としてしまっても良いのですが、C++言語の方が便利機能もありますし、C言語の機能もほぼ完全に網羅しているので問題は無いでしょう。ファイル名を入力したら「OK」を押しましょう。



10、プログラムの準備完了


プログラムの準備完了


 右側にテキストエディット画面が出来上がっていればプロジェクト完成です。そのままプログラムを組むことが出来ます。この例と全く同じ手順で作成した人は、マイコンピュータを開いてCドライブの直下を確認してみると「test」というフォルダがあるはずです。
 それを開くと、下のようなファイル構成になっているはずです。プロジェクトを作るのが面倒くさいという人は、この「test」フォルダをテンプレートとしてコピーしておくと便利です。このプロジェクトを一度閉じた後、再度開きたい場合は、「test.dsw」をダブルクリックしてください。



ファイル構成


↓次の項目
つべこべ言わず組んでみよう(前編)

ゲームアルゴリズム勉強用ライブラリ


つべこべ言わず組んでみよう(前編)

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文」等を考えてます。

↓次の項目
つべこべ言わず組んでみよう(後編)

ゲームアルゴリズム勉強用ライブラリ


つべこべ言わず組んでみよう(後編)

2008年01月05日(土)
つべこべ言わず組んでみよう(後編)


 前回に引き続き、初心者の方々を対象にした「つべこべ言わず組んでみよう」後編です。

 今回も細かな部分ははしょりはしょりで解説していますが、結構大切なところでもあるので解説文が多少長くなってしまってます。

 「とにかく組む」ことに重点を置いていますので、もし、よくわからない所があっても「とにかく組んで」下さい。そして実行してみてください。

 自分自身で「トライ&エラー」を繰り返すことにより、自分の知識として体に刻まれます。

 今回も親切にスクリーンショットをつけて解説していますので活用してください。

 あと、突き進んで「とにかくプログラム組んで」いますが、所々で不明な点が出てくると思われます。その場合、Google等で検索してみてください。自分で調べることが、成長する上で非常に大切ですから検索する癖をつけるためにも試してみてください。




 それでは、初めてのプログラムに挑戦してみてください〜

↓プロジェクト構成がまだの人はコチラへ
最初の難関! プロジェクト構成(DOS編)

↓前編がまだの人はコチラへ
つべこべ言わず組んでみよう(前編)



7、変数


↓サンプルソース
変数 ソース

↓処理結果
変数 結果


 イキナリ処理の行数が増えたからといって、驚かないで下さい。よく見ると無駄に沢山ある「プリントエフ」の部分は、変な書き方に変わっているけど全部同じです。だって全部コピペしただけなので〜(苦笑)

 そして「メイン関数」の一番最初に「int data = 10;」って書いてますけど、コメントによると「変数dataを宣言し10を代入し初期化」となってます。

 変数というのは、よく「箱」にたとえられます。

 まず、その箱がどんな形なのか決めて、名前を付けてあげます。上記の変数宣言例では、この形(型)を「int」とし、名前を「data」としています。この名前の部分は半角英数文字なら自由につけられますが、最初の一文字には数字を使えません。

●変数名の大丈夫な例
data
Data(大文字も使用可能)
DATA
DaTa
a(一文字だけでもOK)
a1
a123456789(最初の一文字以外は好きなように数字を使ってOK)
a_1(区切り文字としてアンダーバーを使うこともできる)

●変数名のダメな例
1a(最初の一文字が数字)
a 1(途中に半角スペースが入っている)
a(全角文字は論外)

 ちなみにこの「名前の付け方」は変数名に限らず、そのうち出てくる自作関数や構造体、クラス名など、色んな箇所で使うことになりますのでしっかり覚えておくと良いです。

 では次に、箱の形である「型」について軽く説明します。プログラムではメモリが足りる限り好きなように箱を作ることができますが、それが大きい箱か小さい箱か、それとも特殊な何かを入れることができる特別な箱なのかを指定する必要があります。

 今の段階でよくわからないのなら、とりあえず型を「int」と宣言すれば、整数の箱が出来上がるということだけ覚えていてください。でも、変数はプログラムの基本なので、変数の「型」についても、いずれは必ず覚えてくださいね。

 さて、宣言に関して大まかに述べたので、次は「10を代入し初期化」のところについて、軽く解説します。「int data = 10;」と一行で書いていますが、実はこれで二つの処理をしているんです。分解すると「int data;」「data = 10;」となります。「int data;」は先ほどはしょりはしょりで解説した変数の宣言に関してですね。では「data = 10;」が、「10を代入し初期化」ということになります。

 ここで勘違いしやすいのは「=」の意味です。

 C/C++言語では「=」は「左の変数に右のデータを代入」という意味になります。つまり、「data = 10;」は「dataは10と等しい」ではなく「dataに10を代入」という事なんです。

 ようするに「10を代入し初期化」というのは「dataに10という最初の数値を入れる」という、たったそれだけのことです。

 今回「プリントエフ」の説明は省略させてもらいます。とりあえずこの「%d」と書いた所に変数「data」の中の数字を表示して、その後の改行コードによって改行します。

 もし、自力で調べたい方に対してのヒントはprintfの「f」の意味は「フォーマット」を意味します。「printf フォーマット」等の条件で検索をかけてみてください。

 話を戻すと、この最初の「プリントエフ」では「10」と表示されて改行されます。そして次は「5」を代入してますので、「5」と表示して改行します。

 その次には変数「data」をそれぞれ「++」「+=」「--」「-=」として、そのつど表示していますが、これらは変数の数値を変える計算式です。それぞれの式の内容はコメントの通りです。これら以外にも計算式は沢山ありますので、必要に応じて調べてください。

 こちらは「C言語 演算子」等で検索すれば目当ての情報を見つけられることでしょう。

 今まで知らなかった計算式(演算子)を見つけたのなら、このプログラムを書き換えて、その計算式を使い、変数の数値がどのように変化するか、実際に確かめてみてください。情報を何度も読むより、一度でも使ってみて体で覚えてください。

 与えられたサンプルプログラムを組んで「ハイ終わり」ではなく、所々を書き換えてみて「この場合はどう動くのだろう」とか「こうしたらこうなるんじゃないか」とか考えて、自分なりのソース実験をしてみてください。

 それが本当の意味での自分の知識になりますし、地道な方法ではありますが、繰り返せばプログラムを組む上で大切な「応用力」を身につけることもできます。



8、繰り返しのfor文


↓サンプルソース
繰り返しのfor文 ソース

↓処理結果
繰り返しのfor文 結果


 ソースが短くなりました(笑)

 その代わり、「for( i = 0; i < 10; i++ )」という、変な式がありますね。コメントによると「10回繰り返す」との事。では、これを「100回繰り返す」に書きかえれますか?

 ここまで真面目にやってきたなら余裕でしょう(笑)

 「for( i = 0; i < 100; i++ )」にすればいいだけですね。これが「for文」の主な使い方です。変数を使って繰り返すのにとても便利です。

 さて、ではこの「for文」を解読してみましょう。

 かっこの中に計算式が三つあります。そのうち二つは、皆さんもおそらくわかりますね。「i = 0」「i++」です。

 左の「i = 0」は「for文」の一番最初の一回だけ、処理されます。ループ用の変数である「i」に「0」という最初の数値を入れてあげます。

 そして右の「i++」は、変数の数値を1増やす「インクリメント」ですね。この処理は「for文」のすぐ後に続いている「」までの処理が終わったら、実行されます。

 問題は真ん中の「i < 10」ですね。これは条件式といいます。

 左が「前処理」、右が「後処理」、そして真ん中は「ループ条件」となります。このサンプルの条件式は見たまんまで「変数iが10未満だったら」という条件になります。この条件を満たしているなら「」で指定している処理を実行します。

 この条件式のチェックは「前処理」もしくは「後処理」が終わるたびに行われます。

 このサンプルプログラムの処理の流れを表すと、

・ループ用変数「i」宣言
・「for文、前処理」で「i」に0を代入し初期化
・「for文、ループ条件」チェック(iの数値は0)
・条件を満たしていたので「プリントエフ」を実行
・「for文、後処理」で「i」をインクリメント
・「for文、ループ条件」チェック(iの数値は1)
・条件を満たしていたので「プリントエフ」を実行
・「for文、後処理」で「i」をインクリメント
・「for文、ループ条件」チェック(iの数値は2)
・条件を満たしていたので「プリントエフ」を実行
・「for文、後処理」で「i」をインクリメント

  〜中略〜

・「for文、ループ条件」チェック(iの数値は10)
・条件を満たしていないので繰り返し終了

になります。

 処理結果を見るとわかると思われますが、変数「i」の数値は0〜9でループされ、10回繰り返されていますね。プログラムにおける数値の開始は「1」ではなく「0」とするように癖をつけておくと良いです。そのうち、この「ゼロの概念」のタイトルで記事を書きますので、今回は「プログラムにおいて0は重要な意味がある」とだけ覚えていてね。

 細かい部分はいろいろとはしょっていますが、for文での繰り返しループは色んな場面で使うので、せめて「for( i = 0; i < ?; i++ )」の形(?は繰り返したい回数)だけは覚えておくと後々便利です。



9、インデント


 今まであえて触れませんでしたが「メイン関数」の後の「{」や上記のfor文のソースでも「{」の後に続く処理の前にTabが入っています。「メイン関数」の後に続く所には1つ、for文の後に続くところには「メイン関数」のものとあわせて2つ入っています。

 このように、読みやすくするため字下げするのをインデントといいます。

 これらは別に半角スペースでも構いませんが(勿論全角スペースはダメです)、きちんとつけておくことをオススメします。


↓インデントをつけていないソース
インデントをつけていないソース


 上のソースを見てもらえばわかる通り、インデントをつけていないと読み辛いですよね。わかりやすく読みやすいソースにすることを心がけましょう。



10、条件分岐のif文


↓サンプルソース
条件分岐のif文 ソース

↓処理結果
条件分岐のif文 結果


 先ほどのループ内に「if( 0 == i%2 )」という変な処理が追加されました。

 このなかの「0 == i%2」は「for文」のところで出てきた条件式です。ちなみにこの式を書くと、変数「i」の数値が偶数なら条件を満たしていて、奇数なら条件を満たしていないということになります。

 この式の細かな解説はしませんので、どうしてそうなるのか自力で調べてみて下さいね。「%」の演算子の意味を調べて、ちょっと計算してみればわかると思われます〜

 この条件分岐により、変数「i」が偶数だったら偶数だと表示されるようになりました。

 条件式を色々変えてみて、色々試してみると良いですよ。




 ええっと、つべこべ言わずこれらのプログラムを組めば、簡単な基礎は身に付くと思われます。基礎があればキチンと解説されているサイトや参考書等もすんなり読めると思われますので正しい知識をどんどん吸収できることでしょう。

 これらのサンプルプログラムで満足せずに、自分から色々調べていってプログラムの知識を深めていってください〜

↓次の記事
プログラマーの財産

ゲームアルゴリズム勉強用ライブラリ


プログラマーの財産

2008年01月25日(金)
プログラマーの財産


 実は僕、記憶力にあまり自信がありません。

 小学生の頃の漢字テストは、いつも目も当てられないような点数だったし、中学、高校の頃は英語の単語が覚えられず、毎回毎回テストで苦労していました。

 つまるところ、テスト前に一夜漬けで一時的に暗記し、学生時代を乗り切ってきました。
 そしてテストが終わると、せっかく覚えた漢字や単語を忘れて、普段の僕に戻るんです。

 そんな僕でもプログラムは大得意です。
 何故なら、プログラムはカンニングOKだからです!

 僕は英語の単語を覚えるのは大の苦手ですが、僕が組むプログラムのソースでは殆どスペルミスがありません。何故なら英単語をカンニングしながら組んでいるからです(笑)

 正しい言い方をすると、変数や関数の名前を決めるときには、いつもインターネット等で、英単語を調べながら決めているんです。

 パソコンのハードディスクの容量に限界があるように、人の記憶力にも限界があります。
 更に言うと、人の記憶というのは非常にいい加減なものです。

 紙やパソコンのテキストファイルにメモった内容は、書き換えなければ変わりません。
 でも、人の頭の中にメモった内容は、勝手に書き換わったり、消えてしまったりします。
 それが複雑だったり記憶内容が多かったりするなら尚更です。

 この世の中に無数にある漢字や英単語を、全て完璧に暗記できるのは、一部の天才とコンピュータのみです。

 それと同じで、プログラミングも関数やライブラリが無数にあります。

 例えばC/C++だと「MSDNライブラリ」を見たり「DirectX」等のヘルプを読んだりすれば、どれだけ多くの機能があるのか身に染みてわかると思われます。

 でも、別にそれらの機能を全て覚える必要はありません。

 必要な機能を使いたい時に、それらのヘルプを開いて使い方を確認して組めばOKです。
 ……まぁ、言語のヘルプを読むのも結構、知識が必要ではあるのですけどね(苦笑)

 プログラミング初心者に言うべきアドバイスがあります。

 それは「プログラムを組むときは参考資料を見ながら組むべし!」です〜

 学校のテストじゃないんだから、カンニングしても減点対象にはなりません。
 それどころか、キチンと資料を調べながら組むことにより、初心者でもそれなりのクオリティのプログラムを組み上げることが出来るでしょう。

 さて、前置きはここまでにしておいて、本題に入ります。

 記憶力に自信のない僕ですが、僕は「一度でも組んだことのあるプログラム」なら、すぐに思い出してもう一度くみ上げたり、高速化してくみ上げたりすることが可能です。

 何故だと思います? ヒントはこれまでの前置きに含まれていますよ!
 ちょっと考えてみてくださいね。

……………………

……………………

…………

…………

……

……

 では、答えを言いますね。

 僕は今まで組んできたプログラムのソースファイルを、全部とっておいてあるからです。
 そして、それらのソースファイルが僕にとってカンニングペーパーとなり、一度でも組んだことがあれば、余裕で再度、そのプログラムを組めるというわけです。

 ただし、それには「キチンとコメントを付けて組んでいる」条件があります。

 人の記憶はいい加減ではありますが不思議なもので、どうしても思い出せなかったことが、ふとしたキッカケで鮮明に思い出せたりするんです。

 プログラミングに関しても、一度でも頭をひねって考え、コンパイルして実際に動かしてみたアルゴリズムなら、頭の片隅に保存されるんです。

 しかも、キチンとコメントも書いて、しっかりと意味を把握していたのなら、尚更です。

 その頭の中の記憶は、そのソースファイルさえとっておけば、別に忘れても構いません。

 時間がたって、再度そのプログラムを組まなければならない事があったとき、そのソースファイルを見れば、それが引き金でしっかりと思い出せます。

 もし思い出せなくても、そのソースファイルが答えなので、要所要所を書き換えて丸写しでもなんら問題はありません。

 自分が組み上げたプログラムのソースファイルなら、どこにどんなアルゴリズムを書いたのか、なんとなく覚えているはずです。

 自分が組んだプログラムのソースファイルから掘り起こすのは、他人が組んだソースファイルから掘り起こすより、何倍も楽で簡単です。

 プログラマーは一つのアルゴリズムを組むときにのみ、色んな参考資料とにらめっこしてメモ用紙に構築イメージを書いたり頭の中で複雑な計算をすればいいんです。

 そうして自分のパソコンのハードディスクなりCD-Rなりに、自分でくみ上げたプログラムのソースファイルを蓄積していき、次回で必要になったら掘り起こせばいいんです。

 自分自身で色々なプログラムを組んで、それを蓄積していったプログラマーは、掘り起こせる引き出しが沢山あるため、やたらと仕事が速いです。

 それこそプログラマーの財産といえるでしょう。

ゲームアルゴリズム勉強用ライブラリ


何も無い……ゼロの概念

2008年04月13日(日)
何も無い……ゼロの概念


 プログラムにおいて0は重要な意味があります。

 それってどういうこと? っと疑問に思う人もいれば、ある程度プログラムを組んだことのある人なら、ああなるほどなぁ〜っと思うことでしょう。

 ゼロという数値は一体どんな数値なのか、ちょっと考えてみてください。

 0はかけ算において、いくらかけても0のままです。そして負数を除いた数値としては、最も小さい数値ですね。

 それでいて、0は正数とも負数とも言えます(むしろ、どちらとも言えないかも)

 そしてプログラムの暗黙のルールとして「ゼロによる割り算をしてはいけない」という、参考書でも最初のうちに言われているものがあります。

 ゼロによる割り算の行が処理されようとした時点で、プログラムは異常終了します。

 コレは実際に「X÷0」を計算してみようと思えばわかると思われます。


 昔、専門学校の同級生(でも向こうの方がずっと年上)がこんなことを言ってました。

「建物の階の表記で1階が0階じゃないのは、おかしい!」

 彼はガチガチの理系で周りの人よりも数段プログラマーとしての実力があり、その数学知識を買われ、見事ゲームプログラマーとして就職していきました。

 プライベートで連絡を取り合っていたわけではないので、今の行方はわかりません。

 かなり無茶苦茶なことを言っていますが、同じプログラマーとして頷ける言葉です。

 1階とは、地上であり地面と同じ位置です。それに比べて2階は1階分上、地下1階は1階分下ですね。そして地下の場合、マイナスの符号を付けたくなります。

 でも、マイナスの符号を付けると、おかしなことになります。

 0階というのは存在しないため、1階から2階の数値的な差は1ですが、1階から地下一階の差は2になります。

 頭がこんがらがるなら深く考える必要は無いですが、つまり彼曰く「ゼロを飛ばすな」ということです。

 「+1と−1の間には0があるから、数式で階数を表すと狂うじゃないか!」と、不満を洩らしていました。

 ちょっと頭をやわらかくして考え、1階と地下1階の間に普通の人間には進入不可能な、「ゼロの階」というマットを作れば良いのでは? っと思ったのは内緒です。

 なんか話がそれそうなので、この話はここで打ち切ります。


 C/C++言語には同じ型の変数を複数同時に宣言できる「配列」があります。

 この配列変数はインデックスという数値によりそれぞれの要素を見分けます。

 例えばint型の変数を5個ほど用意したい場合は「int data[5];」と宣言します。

 その後はdataの後にある [ と ] の間に先ほど言ったインデックスを指定すると普通のint型の変数として使えます。

 で、そのインデックスの数値の範囲は上記の例の場合「0〜4」です。

 もう一度言いますが、「1〜5」ではなく「0〜4」です。

 1からではなく0から始まっていることに注目です(笑)

 数えてみましょう。

 0、1、2、3、4……

 キチンと5個ありますね(笑)

 一番最初の要素に3を代入する場合「data[0] = 3;」と書きます。

 配列の利点は、このインデックスに変数も指定することが出来るということです!

 例えば変数「index」というのがあり、2の数値が代入されていたとします。

 その場合「data[index] = 10;」とすれば、「data[2]」の配列変数に10が代入されます。

 このインデックスの数値が一回インクリメントされたあとに同じ処理がされたら、今度は「data[3]」の配列変数に10が代入されます。

 配列の説明も全部教えたら長くなりますので、この辺で打ち切ります。

 気になる方は自分で検索してみてください。


 変数等に使われる型のタイプにも「void」型というものがあります。

 このvoid型とは主に関数に使われるのですが、引数(ひきすう)や戻り値が不要なときに「要らない」と明示的にするために使用します。

 ゼロの概念とは少し外れますが、何も無い、不要だということもキチンとコンピュータに伝えてあげなければいけないのがプログラムです。

 勘違いして欲しくないのは、voidはゼロと同じではなく「無い」と同じだという事です。int型の変数に0を代入したならその数値は0ですが、void型はそもそも変数という箱自体が存在しないということなので、明らかに違います。


 横道にそれてばかりの内容でしたが、正直、語るのが大変なほどに、ゼロの概念はプログラムの色んなところに含まれています。

 そもそもコンピュータは0と1の世界です。ゼロが重要なのは当然です。

 その0と1を気が遠くなるほど沢山扱い、数値を表現し、その数値を文字コードや画像の色合いとして置き換え出力し、文字や絵を表現していたりします。

 コンピューターの元素ともいえるのが、この0と1という数値であり、1は皆さんにも馴染みがあるでしょうが、ゼロはあまり馴染みが無いでしょうから、プログラムを組む上で少しでも考えるようにしてもらえたらと思い、この記事を書きました。

ゲームアルゴリズム勉強用ライブラリ


 | 
Copyright(C) 2001-2009 E-CLASSIS Inc. All Rights Reserved.