powerpointでフローチャート描くときの小技
思いついたメモ
<問題点>
情報系の講義の課題で、プログラムのフローチャートを描くことを強いられています(集中線)
フローチャート描くのにはpowerpoint(2007)を使ってるんですが、いつも困ることがありました
それは、下図の赤矢印を描くときです
実際に描いてみてもらえると分かると思うのですが、この矢印をカギ線コネクタで一気に描こうとすると、矢尻を整えるのが面倒くさいです
よく↑みたいな感じで矢尻が歪む
さらに、矢尻を微調整しても、その矢印を少し動かすだけで再びグシャアってなります
募る苛立ち…( ˘ω˘ )
<解決策>
四角形などの図形には、矢印がピタッとひっつくポイントがあります
なので、矢印の先を透明な四角形にひっつけておき、透明な四角形を動かしてやればいいのです
四角形を作り、矢印をピタッとひっつける
矢印が合うように四角形を動かす
四角形の書式設定から、線の色をなくす
すると矢尻がばっちり整ってますし、矢印を動かしても崩れることがありません
さらば苛立ち…( ˘ω˘ )
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が必要になり、し忘れるとメモリリークを起こします
そんな危険性を含んでいる①、正直おすすめの方法ではありません
②STLのvectorを使う
みんな大好きSTL。C++の標準ライブラリのことです
これを使って二次元配列を動的生成してみましょう
#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の最下部に、プロキシに関する設定をする箇所がある
以下の箇所を変更
・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( ^ω^ )┘