powerpointでフローチャート描くときの小技

思いついたメモ


<問題点>

情報系の講義の課題で、プログラムのフローチャートを描くことを強いられています(集中線)
フローチャート描くのにはpowerpoint(2007)を使ってるんですが、いつも困ることがありました

それは、下図の赤矢印を描くときです
f:id:negi_magnet:20130523211652p:plain

実際に描いてみてもらえると分かると思うのですが、この矢印をカギ線コネクタで一気に描こうとすると、矢尻を整えるのが面倒くさいです
f:id:negi_magnet:20130523212045p:plain
よく↑みたいな感じで矢尻が歪む

さらに、矢尻を微調整しても、その矢印を少し動かすだけで再びグシャアってなります
募る苛立ち…( ˘ω˘ )


<解決策>

四角形などの図形には、矢印がピタッとひっつくポイントがあります
なので、矢印の先を透明な四角形にひっつけておき、透明な四角形を動かしてやればいいのです

f:id:negi_magnet:20130523213204p:plain
四角形を作り、矢印をピタッとひっつける

f:id:negi_magnet:20130523213228p:plain
矢印が合うように四角形を動かす

f:id:negi_magnet:20130523213249p:plain
四角形の書式設定から、線の色をなくす

すると矢尻がばっちり整ってますし、矢印を動かしても崩れることがありません
さらば苛立ち…( ˘ω˘ )

C++で二次元配列を動的生成する3つの方法

C++で二次元配列を動的生成するには?ということで、思いついた3つの方法

①newする
動的生成といえばnew。C言語ならmallocとかcallocにあたります
以下はint型の二次元配列をnewして使ってdeleteする方法

#include<iostream>
using namespace std;

int main(){
	/* new */
	// int*の配列を動的生成
	int **arr = new int*[20];
	// 配列の各要素でintの配列を動的生成
	for( int i=0; i<20; i++ ){
		arr[i] = new int[10];
	}

	// 実際に配列を使ってなんやかんや
	arr[19][9] = 12345;
	cout << arr[19][9] << endl;

	/* delete */
	// 各要素を先にdelete
	for( int i=0; i<20; i++ ){
		delete[] arr[i];
		arr[i] = 0;	// ※(記事の最後の方で説明)
	}
	delete[] arr;
	arr = 0;	// ※

	return 0;
}

newをすると必ずdeleteが必要になり、し忘れるとメモリリークを起こします
そんな危険性を含んでいる①、正直おすすめの方法ではありません


STLvectorを使う
みんな大好きSTLC++の標準ライブラリのことです
これを使って二次元配列を動的生成してみましょう

#include<iostream>
#include<vector>	// vectorを使うにはこれが必要
using namespace std;

int main(){
	// resize関数を使って動的にサイズを変えれる
	vector< vector<int> > arr;
	arr.resize(20);		// ()内の数字が要素数になる
	for( int i=0; i<20; i++ ){
		arr[i].resize(10);
	}

	arr[19][9] = 12345;
	cout << arr[19][9] << endl;

	// deleteのような処理はデストラクタ内で行なってくれるので不要

	return 0;
}

①より簡単で危険性も減ります。おすすめ


③一次元配列を二次元配列のように使う
最後はこれです。とりあえずサンプルコード

#include<iostream>
using namespace std;

int main(){
	int *arr;
	// [20][10]の二次元配列を生成
	arr = new int[20*10];

	// arr[19][9]に代入
	arr[9*20+19] = 12345;
	// arr[19][9]の値を表示
	cout << arr[9*20+19] << endl;

	delete[] arr;
	arr = 0;

	return 0;
}

幅w,高さhの二次元配列を作りたいとき、w*hの一次元配列を生成します
そして要素[x][y]へのアクセスの際に[y*w+x]とすることで、一次元配列を二次元配列のように扱えます
vectorは使いたくないという人にはこの方法をおすすめします。①よりは単純になります


※について。余談というか補足というか
deleteした後のポインタには0を代入しておくことが望ましいです
というのも、deleteした後のポインタにはnewの時に代入されたアドレスがそのまま格納されているからです
そして、変数aをdeleteした後にnewした変数bのアドレスは変数aと同じであることがあるからです
例えば、下記のようなコード

#include<iostream>
using namespace std;

int main(){
	int *a = new int();
	cout << a << endl;	// 0x381ee0(自分がテストした時はこのアドレスだった)
	delete a;
	cout << a << endl;	// 0x381ee0。delete前と同じ

	int *b = new int();
	cout << b << endl;	// 0x381ee0。aと同じ
	*b = 0;
	cout << *b << endl;	// 「0」と表示される
	*a = 100;			// aをdeleteしたことを忘れて、代入すると…(これが怖いから※1の処理をしてる)
	cout << *b << endl;	// 「100」と表示される!
	delete b;

	return 0;
}

このようなことが発生し、思わぬ所でデータをぶっ壊したりします。やべぇ
そんなことがないように、使い終わったポインタには0を入れることをオススメします

プロキシ環境下でのMacPorts設定

備忘録

MacでPHPの開発環境整えようとしてMacPorts使った時にプロキシで引っかかったのでメモ
(参考:http://destefano.wordpress.com/2011/03/18/macports-behind-a-proxy/)

[問題]
MacPortsで"sudo port install apache2"と入力した際に、こんなエラーが

Error: org.macports.fetch for port apr returned: fetch failed
Error: Failed to install apr

[解決法]
/opt/local/etc/macportsディレクトリにあるmacports.confを編集するだけの簡単なお仕事

1.ターミナル上で、"sudo vim /opt/local/etc/macports/macports.conf"と入力
 (vimを使ったことがない人は"vim"を"emacs"にしましょう。普通の操作で使えます)
 パスワードを求められるので入力する。画面が無反応でいっつも不安になる

2.macports.confの最下部に、プロキシに関する設定をする箇所がある
 f:id:negi_magnet:20121026041441p:plain

 以下の箇所を変更
・proxy_http、proxy_https、proxy_ftp、proxy_rsync
 この4行の先頭にある"#"を削除し、右側に書いてあるプロキシ情報の入力サンプルを書き換える
 プロキシのIPアドレスがxxx.xxx.xxx.xxx、ポートがyyyyだとすると、"xxx.xxx.xxx.xxx:yyyy"と書く
 ログインが必要な場合、ユーザIDをzzzz、パスワードをwwwwだとすると、"zzzz:wwww@xxx.xxx.xxx.xxx:yyyy"と書く

・proxy_skip
 プロキシを適用しない例外サイトを指定できる
 先頭の"#"を削除し、右側の入力サンプルにはプロキシを通さなくていいIPアドレスを書く
 よく分からなかったらとりあえずlocalhostと書いといたらちゃんと動いたし結果オーライ! #kuzu

3.保存、リトライ、成功L( ^ω^ )┘