スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--/-- | スポンサー広告  TOP

FizzBuzzの問題。

新入社員の人も入社して二ヶ月、早いところではそろそろ仕事に取り掛かる時期ですね。学生さんもプログラム系の授業が本格化する時期。
そこで、プロであれアマであれ、プログラマであれば簡単に書けるはずのFizzBuzzの問題。
最低限のプログラマの能力を測る指針として利用できるのでお試しいただきたい。

問題の仕様は以下の通り。

・1から100までの数を表示するプログラムを書く事。
・ただし3の倍数のときは数の代わりに「Fizz」と表示する。
・5の倍数のときは「Buzz」と表示する。
・3と5両方の倍数の場合には「FizzBuzz」と表示する。

プログラマと名のる以上は、見た瞬間に頭にコードが浮かび、2分以内で書き出せるはず。
10分以上掛かるなら、プログラマとして研鑽不足。文法書を見るのは問題外。
フローさえ浮かばない場合は、プログラマとしてのブレイクスルーに達していないので、練習書に立ち返るか、親切な先輩や同僚、先生、友達に教えを受けよう。

回答は続きを読むで!

続きを読む »

スポンサーサイト

2008/05/28 | プログラミングCOMMENT(0)TRACKBACK(0)  TOP

MFC SDIの起動時の初期化順番

今回はプログラムを組んでいると気になることがある起動時の初期化順番を解説します。
MFCのSDI限定ですが、MDIもさほど変わらないはずです。
ドキュメントビューアーキテクチャの流れとしても理解の手助けとなれば幸いです。

まず、呼び出される順番ですが、次の様になります。
①CxxxApp::CxxxApp()
②CxxxApp::InitInstance() start
③CxxxDoc::CxxxDoc()
④CMainFrame::CMainFrame()
⑤CMainFrame::PreCreateWindow()
⑥CMainFrame::OnCreate() start
⑦CxxxView::CxxxView()
⑧CxxxView::PreCreateWindow()
⑨CMainFrame::OnCreate() end
⑩CxxxDoc::OnNewDocument()
⑪CxxxView::OnInitialUpdate()
⑫CxxxApp::InitInstance() end

解説すると、
①CxxxAppのコンストラクタ
②CxxxAppの初期化処理を開始
③ドキュメントのコンストラクタ
④CMainFrameのコンストラクタ
⑤CMainFrameのウィンド生成前の処理
⑥CMainFrameのウィンド生成処理を開始
⑦ビューのコンストラクタ
⑧ビューのウィンド生成前の処理
⑨CMainFrameのウィンド生成処理を終了
⑩ドキュメントの新規作成処理
⑪ビューの新規作成処理
⑫CxxxAppの初期化処理を終了
以上です。

⑩と⑪に関してはドキュメントの新規作成を行う度に呼び出されるので、普通の初期化処理を書いてはいけません。
で、ビューのウィンド生成時に1回だけ行いたい処理(ウィンドのサイズ変更など)がある場合は、OnInitialUpdate中にフラグで1回しか通らない制御をして強引に初期化処理を書くのが一番簡単です。それより良い方法も有るかも知れませんが、私は手抜きでこれで処理しています。

疑問、質問、反論があればコメントお願いします。
でわまた。

2008/05/23 | プログラミングCOMMENT(0)TRACKBACK(0)  TOP

プログラマに役立つサイトの紹介

今日は、プログラマの人もプログラマを目指して勉強中の人にも役立つサイトを紹介します。

CodeZine:プログラミングに使えるソースコードと技術解説が豊富なWEBサイトです。
http://codezine.jp/
自分で記事を投稿することも出来ます。採用されれば、原稿料が貰えますよ。

ITpro Development:こちらもソフト開発の基礎知識やテクニックなどが掲載されています。
http://itpro.nikkeibp.co.jp/develop/index.html
雑誌「日経ソフトウェア」と同系列のWEBサイトですが、私はこのWEBサイトだけで十分です。

組み込み限定の情報サイトですが、マイコンに興味がある方もお勧めします。
http://techon.nikkeibp.co.jp/embedded/
http://techon.nikkeibp.co.jp/mcu/

もし、このサイトを忘れてるよ~。とか有ればぜひ教えてください。
でわまた。

2008/05/21 | プログラミングCOMMENT(0)TRACKBACK(0)  TOP

日本IBM、Cellの倍精度浮動小数点演算を5倍に強化した「PowerXCell 8i」

日本IBM、Cellの倍精度浮動小数点演算を5倍に強化した「PowerXCell 8i」
これで地球シミュレータを作れば、すごい性能が出せそうな気が(笑)。
確かに単精度だけが早いのはゲームには良くても、サーバー用途には不向き。特に科学技術計算とかレンダリングサーバとかにね。これが本来のCELLって気がしますね。

まぁ、ヘテロジニアスコアなのでカリカリにチューニングしないと性能が出せない問題はありますが。
intelが研究しているこんな言語とか、
メニイコア、ヘテロジニアスコアのプログラミング言語
テラスケールコンピューティングのための言語「Ct」
今のところ、どちらも言語というか仕組みと言った方が正解?
現状はスレッドでもそうですが、いくつものタスクやコアが走る状況で連携した動作をさせるプログラムを書くことは難しくテストも困難なので何らかのブレイクスルーを果たした言語が無い限り可読性と安定性は犠牲にならざる終えないでしょう。

2008/05/15 | ハードCOMMENT(0)TRACKBACK(0)  TOP

「ダビング10」実施先送りへ、なぜか総務省委員会で合意得られず(補足追加)

プログラムと直接関係無いですが、
「ダビング10」実施先送りへ、なぜか総務省委員会で合意得られず
「ダビング10」関係のプログラムをした方々もヤキモキしながら状況を見つめていることと思います。
しかし、あーあって感じですね。このまま消費者不在のコンテンツ(地上波デジタル)は果たして受け入れられるのか?
最近テレビ見る人が減っている気がしますので、悪い方向に向かっている気が・・・。
ともかく、今の地上波デジタルは不便すぎます。ムーブしか出来ないデジタル放送って日本だけじゃ?

補足。コンテンツの保証金は何のためにあるのか?
補償金制度拡大案への多くの疑問

2008/05/14 | 未分類COMMENT(0)TRACKBACK(0)  TOP

マイクロソフトが学生向けに開発環境を無償提供「DreamSpark」。

詳しくは下記の記事を読んでもらうとして、
MS、学生向けに開発ソフトなどを無償提供する「DreamSpark」を日本で開始
ようするに大学生、高等専門学校生(4,5年生)、専門学校生のみの事実上18歳以上が参加できて、国際学生証(年額1,430円)が必要って事ですね。
学生さんならアカデミアパックを買うよりかなりお得。
ゲームを作る人ならXbox360でゲーム動かすのに必要な「XNAクリエイターズクラブ(12カ月間メンバーシップ)」を年額1430円で手に入れられるのはうれしいかも。ゲーム系の専門学校生が軒並み参加しそうだけど・・・。
「Visual Studio Professional Edition」や「Windows Server Standar Edition」も買うとすげー高いのでプログラミングする人は参加しろって感じですね。
俺も学生なら参加したかったなぁ。

2008/05/14 | プログラミングCOMMENT(0)TRACKBACK(0)  TOP

待機電力ZERO?

ローム、新型LSIを開発・「待機電力」をゼロに
って記事が気になったので調べてみることに。
プレスリリースによるとFeRAMで内部レジスタの値を保持することで電気を切ってもすぐに再開できるって話みたい・・・。プレスリリースと新聞記事で説明の方向性が大分と違うと思うので、そこのところを解説してみます。

新聞記事の方は、おもに家庭内の待機電力(テレビやらHDDレコーダやらの使っていない時の電力)を記事の中心にしているわけだが、実際に待機している機器は常にスイッチ、リモコン、タイマーなどを監視しているので待機電力を0にできる訳ではないし、待機専用のマイコンなどを設けることで実は現在の技術のままでも大幅に待機電力を下げることは出来る(3Wの待機電力とか使いすぎ)。まぁ、部品点数を減らす事(=コストダウン)が大目的になっているので、多少待機電力増えても部品点数を減らすことが大事と言う風潮が実はある気がする。

それに対してプレスリリースの内容を見てみると、ごく短時間のPOWEROFFで消費電力を下げる効果の方が主体に書かれていますね。そちらが本当の意図じゃないかと思うんですが。
そうは言っても現在のノートなどで使われるCPUでも、ブロック単位で煩雑にPOWEROFFすることで消費電力を下げているのが現状です。キャッシュメモリをもし十分な速度を保ったまま、不揮発メモリに出来たら大幅に消費電力が下げられるので画期的だとは思うんですけどね。演算レジスタだけじゃあまり変わらないと思うんですけど。

今後の話の進展に期待しましょう。

2008/05/08 | 未分類COMMENT(0)TRACKBACK(0)  TOP

今日のテクニック。 半透明ウィンド。 

今日は、レイヤード・ウィンドウについて説明します。
MSDNの解説↓
http://www.microsoft.com/japan/msdn/windows/windows2000/layerwin.aspx
要するにドット単位でのアルファ度合いは指定できない半透明なんですが、指定の透過色で透過できるので自由形状の表示は可能になります(エッジはアンチエリアスできないのでジャギが目立ちます。レイヤードを何枚か重ねてアンチエリアスするテクニックもありますが、それについてはリクエストがあれば)。
今回紹介するのは、もう一つの機能でウィンド全体の半透明度を指定する機能です。

私のソフトのXP風終了メニューで使っているテクニックなのですが、強制終了時にウィンドウを暗くしているのがレイヤード・ウィンドウです。
これは、従来のウィンドウの上にレイヤードの半透明で黒いウィンドウを重ね書きしているワケです。
以下の様に記述します。

[MFCでの記述]
//-------------------------------------------
// ウィンドウを半透明化。
//-------------------------------------------
// 拡張ウィンドウスタイルを取得します。
LONG Style = GetWindowLong(GWL_EXSTYLE);
// 拡張ウィンドウスタイルにWS_EX_LAYEREDを追加します。
SetWindowLong(GWL_EXSTYLE,(Style|WS_EX_LAYERED));

// 透明度を設定します。255で不透明で、160で約40%半透明です。
SetLayeredWindowAttributes(0,160,ULW_ALPHA);

//-------------------------------------------
// ウィンドウを実体化
//-------------------------------------------
// 拡張ウィンドウスタイルを取得します。
LONG Style = GetWindowLong(GWL_EXSTYLE);
// 拡張ウィンドウスタイルからWS_EX_LAYEREDを削除します。
SetWindowLong(GWL_EXSTYLE,(Style&~WS_EX_LAYERED));

間違いやリクエストがあれば、コメントお願いします。

2008/05/07 | プログラミングCOMMENT(0)TRACKBACK(0)  TOP

今日のはまりポイント(AnimateWindow)

ウィンド・リージョンを使っているウィンドにAnimateWindowを使用とするとAnimateWindowがエラーリターンになる事があります。
これは、仕様に書かれている事なんで避けられないんですが、試しに使ってみるとWindows2000以前のOSだとうまく動作しません。たぶん、WindowsMeもダメだと思います。
XPとVistaでは何事も無かった様にウィンド・アニメーションしてくれますね。

こんなコードを書きます(MFCで書いた場合です)。

CRgn m_Rgn; //クリッピング

// 楕円のリージョンを作る
m_Rgn.CreateEllipticRgn(0,0,100,100);

// ウィンドのリージョンを設定する
SetWindowRgn((HRGN)m_Rgn,TRUE);

// ダイアログをアニメートして表示(上からスライド表示する)
AnimateWindow(300, AW_VER_POSITIVE|AW_SLIDE);

今後も、こんな小ネタを書き込む予定。読んでくれる人がいると良いなぁ~。
質問があれば、コメントに書いてくださいね。

2008/05/01 | プログラミングCOMMENT(4)TRACKBACK(0)  TOP

 | BLOG TOP | 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。