開発環境
- OS X Mavericks - Apple(OS)
- Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
- C++ (プログラミング言語)
- g++(コンパイラ)
C++実践プログラミング (スティーブ オウアルライン (著)、Steve Oualline (原著)、Steve Oualline(原著)、望月 康司(翻訳)、クイープ(翻訳) 、オライリー・ジャパン)のⅡ部(シンプルなプログラミング)の11章(ビット演算)、11.8(ビットマップグラフィックス)、実習 11-3を解いてみる。
その他参考書籍
- C++プログラミング入門 (グレゴリー サティア (著)、ダウグ ブラウン (著)、Gregory Satir (原著)、Doug Brown (原著)、望月 康司 (翻訳)、谷口 功 (翻訳)、オライリージャパン)
実習 11-3
コード(BBEdit, Emacs)
sample.cpp
#include <iostream> #include <assert.h> const int X_SIZE = 40; const int Y_SIZE = 60; char graphics[X_SIZE / 8][Y_SIZE]; inline void set_bit(const int x, const int y) { assert((x >= 0) && (x < X_SIZE)); assert((y >= 0) && (y < Y_SIZE)); graphics[(x)/8][y] |= static_cast<char>(0x80 >> ((x)%8)); } inline void clear_bit(const int x, const int y) { assert((x >= 0) && (x < X_SIZE)); assert((y >= 0) && (y < Y_SIZE)); graphics[(x)/8][y] ^= static_cast<char>(0x80 >> ((x)%8)); } int main() { int loc; void print_graphics(); std::cout << "set bits-----------------------------------------\n"; for (loc = 0; loc < X_SIZE; ++loc) { set_bit(loc, loc); } print_graphics(); std::cout << "clear bits---------------------------------------\n"; for (loc = 0; loc < X_SIZE; ++loc) { if (loc != 20) { clear_bit(loc, loc); } } print_graphics(); return (0); } void print_graphics() { int x; int y; int bit; for (y = 0; y < Y_SIZE; ++y) { for (x = 0; x < X_SIZE / 8; ++x) { for (bit = 0x80; bit > 0; bit = (bit >> 1)) { assert((x >= 0) && (x < (X_SIZE / 8))); assert((y >= 0) && (y < Y_SIZE)); if ((graphics[x][y] & bit) != 0) { std::cout << "X"; } else { std::cout << "."; } } } std::cout << '\n'; } }
Makefile
# # FSFのg++コンパイラ用のMakefile # CC=g++ CFLAGS=-g -Wall all: sample195_3 sample195_3: sample195_3.cpp ${CC} ${CFLAGS} -o sample195_3 sample195_3.cpp clean: rm sample195_3
入出力結果(Terminal)
$ make && ./sample195_3 g++ -g -Wall -o sample195_3 sample195_3.cpp .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX $
0 コメント:
コメントを投稿