プログラミング事前課題 その7 もう一つの繰り返し処理 whileループ

今回はもう一つの繰り返し処理のwhileループについてみていきます。

とりあえずコードを見て行きましょう。

#include <iostream>
using namespace std;

int main() {
	// your code goes here
	
	int num = 0;
			
	while( num < 5 ){

		cout << num << endl;
	
		num = num + 1;
	
	}
		
	return 0;
}

結果は
0
1
2
3
4
と出力されると思います。

whileループは

	while( num < 5 ){

	}

while( )の中の条件が満たされている間{ }の中身を繰り返し実行します。
今回の場合は

		cout << num << endl;	
		num = num + 1;

	num < 5

になるまで繰り返すため、
まず始めに0を表示して
そのあとnumに1を足して、numの中身は1になって
numは5より小さいので{ }の中身が繰り返されて
今度は1を表示して
.
.
.

と繰り返されて行く訳ですね。

なんだかfor文と似ていますね。
実は、for文とか書き方が違うだけでやっていることは同じです。
プログラミングではこういう書き方は違うけど、
やっていることは同じという構文がよくあります。

理由はプログラムが長くなって複雑になってくると
内容を理解するのが難しくなってくるんですが、
その時に、上手い書き方を選択できていると
読んだ時の内容の理解がスムーズになるからですね。
プログラミングをやっていると、あとあとそういう場面に遭遇することもあるかもしれません。

一先ず、forループ以外にもwhileループっていう
同じようなループもあるんだなーと思っていて貰えればOKです。


http://hariganet.hatenablog.com/entry/2014/03/28/002356

プログラミング事前課題 その6 条件によって処理を変える if文

今回は条件によって処理を変更するif文について見て行きましょう。

条件によって処理を変えるとは、例えば
変数が偶数だったら(2で割り切れたら)結果出力画面に表示して
奇数だったら表示しないとかそういうことですね。

とりあえずコードを見て行きましょう。

#include <iostream>
using namespace std;

int main() {
	// your code goes here
	
	int num[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
		
	for(int i=0; i<10; i=i+1){

		int tmp = num[i] % 2;

		if ( tmp == 0 ){

			cout << num[i] << endl;

		}

	}
	
	return 0;
}

結果は
0
2
4
6
8
と出力されると思います。

前回のfor文の結果のうち、偶数だけが表示されてますね。
一先ずやりたいことはできたようです。

では、解説していきましょう。
今回のコードで注目する部分はここですね。

	for(int i=0; i<10; i=i+1){

		int tmp = num[i] % 2;

		if ( tmp == 0 ){

			cout << num[i] << endl;

		}

	}

for文自体は前回と同じなのでとりあえずいいでしょう。
10回繰り返してます。

		int tmp = num[i] % 2;

まず、この行。
この行ではtmpにnum[i]を2で割った余りを入れてますね。

次にこの部分

		if ( tmp == 0 ){
			...
		}

ここが新しい要素ですね。
この
if( ){

}

で表された部分をif文といって、
if( )の( )の中の条件が満たされている場合のみ{ }の中を実行するという構文になります。

今回のif文の中身は

		if ( tmp == 0 ){

ですね。
これはtmpの中身が0と等しい時だけ{ }の中を実行するという意味になります。
等しいを表す記号に==が使われているのは単体の=を既に、変数の代入に使っているため
それと被らないようにするためです。

ちなみにif( )の( )の部分入る条件には下記のものがあります。

if (a > b)
aがbより大きい時

if (a >= b)
aがbより大きいか、等しい時

if (a < b)
aがbより小さい時

if (a <= b)
aがbより小さいか、等しい時

if (a == b)
aがbと等しい時  

if(a != b)
aがbと等しくない時

今回はtmpの中身が0だった時
つまり、num[i]を2で割ったあまりが0だったとき=num[i]が偶数だったときのみ
num[i]の内容が結果出力画面に表示されるため、偶数だけが表示された訳ですね。

	for(int i=0; i<10; i=i+1){

		int tmp = num[i] % 2;

		if ( tmp == 0 ){

			cout << num[i] << endl;

		}

	}

という感じで、if文を使うと{ }の中の処理をしたりしなかったりを選択することができます。

ちなみにif文には派生があって、

		if ( a > 0 ){
			cout << a << endl;
		}else if( a == 0 ){
			cout << a + 1000 << endl;			
		}else{
			cout << a - 1000 << endl;			
		}

といった感じでif( ){ }の後にelse if( ){ }を続けることで条件を追加することができます。
この場合、aがint型の変数で中身に何か数値が入っていると仮定して
aが0より大きいとき、そのまま表示して
aが0と等しいとき、aに1000を足して表示して
aが0より小さいとき、aから1000を引いて表示する
という意味になります。

詳しく知りたい人はgoogleで「if文 c++」とかで検索しましょう。


http://hariganet.hatenablog.com/entry/2014/03/27/232719

プログラミング事前課題 その5 forループ

プログラミングの肝となる繰り返し処理についてです。
一先ずはコードを見てみましょう。

#include <iostream>
using namespace std;

int main() {
	// your code goes here
	
	int num[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
		
	for(int i=0; i<10; i=i+1){
		cout << num[i] << endl;
	}
	
	return 0;
}

結果は
0
1
2
3
4
5
6
7
8
9
と出力されると思います。

前回の配列の時と結果が同じです。
しかし、コードは前回と比べるととても短くなっています。

では、解説していきましょう。
今回のコードで前回と違うメインとなる部分はここですね。

	for(int i=0; i<10; i=i+1){
		cout << num[i] << endl;
	}

ここで

		cout << num[i] << endl;

を10回繰り返して、配列numの結果を表示しています。
繰り返し回数が一回増えるごとに i の数が1ずつ増えて行って

		cout << num[0] << endl;
		cout << num[1] << endl;
		cout << num[2] << endl;
				.
				.
				.

といった感じにnum[i]がnum[0],num[1],num[2]と変化していきます。

今、私が言った
『繰り返し回数が一回増えるごとに i の数が1ずつ増えて行く』命令を
コンピュータに伝えているのはここの部分になります。

	for(int i=0; i<10; i=i+1){

	}

このforはこの
{}
で囲まれた中身をループしてね。という意味で
()の中身はループをする際の条件(ループをどこで止めるかなど)になります。

条件については今回の場合こういう意味になります。

int i=0;
iが0からはじまって
i<10;
iが10未満の間繰り返して
i=i+1
ループが一回終わるごとにiに1を足す。

このようにiは0からはじまって、
ループが1回終わるごとにiに1が足されて
iが10未満の間繰り返すので、
結果的に{}の中身は10回実行されることになります。

今回の場合は{}の中身は

		cout << num[i] << endl;

なので
num[i]が10回、結果出力されて終了になります。
この時にループ1回ごとにiの数も1ずつ増えて行くので

		cout << num[0] << endl;
		cout << num[1] << endl;
		cout << num[2] << endl;
				.
				.
				.

と変化して行く訳ですね。

forループを使うと長い処理が少ない手間で書けるようになりますので
覚えて行きましょう。


http://hariganet.hatenablog.com/entry/2014/03/27/232719

プログラミング事前課題 その4 配列

プログラミングには変数をまとめるための方法として配列というのがあります。
例えばint型の変数が10個欲しい時

	int num0 = 0;
	int num1 = 1;
	int num2 = 2;
	int num3 = 3;
	int num4 = 4;
	int num5 = 5;
	int num6 = 6;
	int num7 = 7;
	int num8 = 8;
	int num9 = 9;

と書けますがめんどうですね。

10個ぐらいならまだ良いですが
100個ぐらいになるともう嫌です。
そこで配列というものがあります。
実際に下記のソースコードを見てみましょう。

#include <iostream>
using namespace std;

int main() {
	// your code goes here
	
	int num[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
		
	cout << num[0] << endl;
	cout << num[1] << endl;
	cout << num[2] << endl;
	cout << num[3] << endl;
	cout << num[4] << endl;
	cout << num[5] << endl;
	cout << num[6] << endl;
	cout << num[7] << endl;
	cout << num[8] << endl;
	cout << num[9] << endl;
		
	return 0;
}

結果は
0
1
2
3
4
5
6
7
8
9
と出力されると思います。

では、解説です。

	int num[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};		

ここでは一気にint型の変数を10個作ってそれに、0〜9までの数値を順に入れています。

作った変数にアクセス(変数の中身を取得する)するためにはこうです。

	cout << num[0] << endl;

一気に数値を入れずに以下のような書き方も可能です。

	int num[3];
	
	num[0] = 0;
	num[1] = 1;
	num[2] = 2;
				

注意点としてはnum[3]で名前がnumの配列を大きさ3で作ったときに
配列の個別の変数にアクセスする際には0番目からはじまります。
(これ忘れやすいので重要)

ちなみに以下の様な書き方はエラーになります。

	int num[3] = {0, 1, 2, 3};		

(numの配列は全部で3個しかないのに0, 1, 2, 3と4つの数字を一度に入れようとしている)

	int num[3] = {0, 1, 2};
	cout << num[3] << endl;		

(numの配列は全部で3個しかないので変数はnum[0]〜num[2]までしかないのに
存在しないnum[3]にアクセスしようとしている)

配列は変数をまとめて管理できるので便利です。

次回に紹介するforループと合わせて使うとより便利になります。


http://hariganet.hatenablog.com/entry/2014/03/25/074636

プログラミング事前課題 その3 小数計算と余りと文字の表示

  • 小数計算

前回は整数での数値の計算方法について解説しました。
整数以外に、少数を計算したい場合には
変数のintのところをfloatに変えればOKです。
小数を表す変数は他にも種類があるんですが
一先ずfloatを覚えておいて貰えば大丈夫だと思います。

#include <iostream>
using namespace std;

int main() {
	// your code goes here
	
	float num1 = 5;
	float num2 = 3;
	float ans;	
		
	ans = num1 / num2;

	cout << ans << endl;
		
	return 0;
}

結果は
0.666667
と出力されると思います。


  • 余り

ちなみにプログラミングで余りの計算もできます。

余りの計算は下記のようになります。

#include <iostream>
using namespace std;

int main() {
	// your code goes here
	
	int num1 = 5;
	int num2 = 3;
	int amari;	
		
	amari = num1 % num2;

	cout << amari << endl;
		
	return 0;
}

結果は
2
になります。

余りを計算する記号が

%

です。


  • 文字の表示
	cout << 
	<< endl;

の間に

	""

で囲んだ文字を入れることで文字の表示ができます。

#include <iostream>
using namespace std;

int main() {
	// your code goes here
	
	int num1 = 5;
	int num2 = 3;
	int ans;	
	int amari;	
		
	ans = num1 / num2;
	amari = num1 % num2;

	cout << num1 << "÷" << num2 << "の答えは" << ans << "余り" << amari << endl;
		
	return 0;
}

結果
5÷3の答えは1余り2


ちなみに文字を格納するための変数もあります。

string

です。
文字を格納するための変数は他にも種類があるんですが
一先ずはstringを覚えておいて貰えば大丈夫だと思います。

#include <iostream>
using namespace std;

int main() {
	// your code goes here
	
	string moji = "テスト";
	
	cout << moji << endl;
		
	return 0;
}

結果
テスト


stringはstring同士で足し算することで文字同士の連結ができます。

#include <iostream>
using namespace std;

int main() {
	// your code goes here
	
	string moji1 = "テスト";
	string moji2 = "だよ";
	string moji3 = moji1 + moji2;
	
	cout << moji3 << endl;
		
	return 0;
}

結果
テストだよ

stringにあるのは+による文字の連結だけで

  • , *, /などの記号は使いません。

以上、駆け足でしたが小数計算と余りと文字の表示でした。


http://hariganet.hatenablog.com/entry/2014/03/25/000839

openFrameworksの環境構築

openFrameworksの環境構築方法について
下記にそれぞれMac編、Windows編をまとめました。

自分の所有するPCにあわせて、ダウンロードやインストールの準備をお願いします。

Mac
http://hariganet.hatenablog.com/entry/2014/03/22/032041

Windows
http://hariganet.hatenablog.com/entry/2014/03/22/040622

openFrameworksの環境構築(Windows編)

まずは下記サイトにアクセスして
プログラミングするための開発環境である
Visual Studio 2012 Express for Windows Desktopをダウンロードします。

http://www.microsoft.com/ja-jp/download/details.aspx?id=34673
(中央のオレンジの ダウンロード をクリック)

f:id:hariganet:20140322032802j:plain

wdexpress_full.exeにチェックをいれて、右下の青い 次へ を押します。

f:id:hariganet:20140322033027j:plain

wdexpress_full.exeのダウンロードがはじまります。

ダウンロードが完了したら、wdexpress_full.exeを起動します。

何か黒い縦長の画面が出てくると思うので、同意するにチェックをいれて
Visual Studio 2012 Express for Windows Desktopをインストールしましょう。

インストールが完了するまでしばしまちます。(1時間~ぐらい。ネット回線速度による)

.
.
.

次にダウンロードしたら、起動しましょう。
起動時にMicrosoftへのアカウント登録を求められると思います。
アカウントを持っている人はそれを使ってログインし、
持ってない人は登録しましょう。

次に登録後、Visual Studio 2012 Express for Windows Desktopを起動します。
起動したら、拡張機能と更新プログラムをクリックして、
ソフトに必要な更新をインストールします。

f:id:hariganet:20140322033640j:plain

更新が必要な人には下記の画像のように
更新プログラムの右側にかっこで必要な更新の数が出るので
とりあえず全部インストールを押してインストールして下さい。
人によっては出ないかもしれないので、その場合はこの工程は無視してくれて大丈夫です。

f:id:hariganet:20140322033940j:plain

更新の完了を待ちます。
更新が全てインストールされると
Visual Studio 2012 Express for Windows Desktopのインストールは完了です。


.
.
.



次に、下記URLからopenFrameworks本体をダウンロードします。

http://www.openframeworks.cc/versions/v0.8.0/of_v0.8.0_vs_release.zip

ダウンロードできたら、
ダウンロードしたof_v0.8.0_vs_release.zipを解凍します。
(zipファイルをダブルクリックでOKです。)

解凍したら、of_v0.8.0_vs_releaseというフォルダが生成されたと思います。
このフォルダの中にopenFrameworksを動かすのに必要な
プログラムファイルや設定ファイルなどが全て入っています。

実は、openFrameworksのインストールはこれで完了です。
圧縮されたzipファイルを解凍するだけで、
他に細かい設定などは不要ですぐ使えるのがopenFrameworksの良いところです。

では、念のため、動作確認を行ってみましょう。
今回は元からopenFrameworksに入っている
サンプルプログラムを動かすことで動作確認を行います。

of_v0.8.0_vs_releaseのフォルダの中を見ると中身が
このようになっていると思います。
f:id:hariganet:20140322035344j:plain

では、このフォルダの中の
example -> graphics -> graphicsExample -> graphicsExample.sln
をダブルクリックして開きましょう。
この時にファイルの拡張子を表示しない設定にしてる人は
表示するように変更しましょう。(変更の仕方は検索お願いします。)

f:id:hariganet:20140322035623j:plain

こんな感じの画面が開かれたかと思います。
多少違うからもしれませんが、私の画面は既に何度かこのファイルを開いているためで
その違いはあまり重要ではありません。

f:id:hariganet:20140322035921j:plain

次に ローカルWindowsデバッガー をクリックして
プログラムを実行します。

f:id:hariganet:20140322040120j:plain

初めて実行する時のみ、もしかすると15分ぐらい
実行するまでにコンピュータがプログラムを解釈する時間がかかるかもしれません。
これは2回目以降は30秒か1分ぐらいまで短縮されます。
一先ず、しばし待ちます。

.
.
.


実行が成功すると、一旦黒い画面が出てきた後に、
下記のような画面が表示されたと思います。

f:id:hariganet:20140322040546j:plain

こちらはopenFrameworksで一番簡単なグラフィックを
描画した場合のサンプルプログラムです。
終了したい時はescキーを押して下さい。

これで、openFrameworksの動作確認は完了です。
おつかれさまでした。
講習会参加者の方で、ここまでたどり着くまでの間に
何か問題の起こった方は、連絡下さい。相談の上、原因を調べたいと思います。

以上、openFrameworksの環境構築(Windows編)でした。