2013年11月14日木曜日

開発環境

C実践プログラミング 第3版 (Steve Oualline (著)、 望月 康司 (監訳) (翻訳)、谷口 功 (翻訳)、オライリー・ジャパン)のⅡ部(単純なプログラミング)の11章(ビット演算)、11.8(ビットマップグラフィックス)、11.10(プログラミング実習)、実習11-1を解いてみる。

その他参考書籍

実習11-1.

コード

sample.c

#include <stdio.h>

#define X_SIZE 40
#define Y_SIZE 60

char graphics[X_SIZE / 8][Y_SIZE];

#define SET_BIT(x, y) graphics[(x)/8][y] |= (0x80 >> ((x) % 8))
#define CLEAR_BIT(x, y) graphics[(x)/8][y] &= ~(0x80 >> ((x) % 8))
#define TEST_BIT(x, y) (graphics[(x)/8][y] & (0x80 >> ((x) % 8))) > 0

int main()
{
    int loc;
    void print_graphics(void);
    
    for (loc = 0; loc < X_SIZE; ++loc){
        SET_BIT(loc, loc);
    }
    print_graphics();
    printf("\n");
    
    CLEAR_BIT(19, 19);
    CLEAR_BIT(0, 5);
    print_graphics();
    printf("\n");
    
    printf("0 × 0: %d\n", TEST_BIT(0, 0));
    printf("0 × 5: %d\n", TEST_BIT(0, 5));
    printf("19 × 19: %d\n", TEST_BIT(19, 19));
    printf("20 × 20: %d\n", TEST_BIT(20, 20));
    return (0);
}

void print_graphics(void)
{
    int x;
    int y;
    unsigned 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)){
                if ((graphics[x][y] & bit) != 0){
                    printf("X");
                } else {
                    printf(".");
                }
            }
        }
        printf("\n");
    }
}

makefile

CC=cc
CFLAGS=-g

sample: sample.c
 $(CC) $(CFLAGS) -o sample sample.c

clean:
 rm -f sample

入出力結果(Terminal)

$ make
cc -g -o sample sample.c
$ ./sample
X.......................................
.X......................................
..X.....................................
...X....................................
....X...................................
.....X..................................
......X.................................
.......X................................
........X...............................
.........X..............................
..........X.............................
...........X............................
............X...........................
.............X..........................
..............X.........................
...............X........................
................X.......................
.................X......................
..................X.....................
...................X....................
....................X...................
.....................X..................
......................X.................
.......................X................
........................X...............
.........................X..............
..........................X.............
...........................X............
............................X...........
.............................X..........
..............................X.........
...............................X........
................................X.......
.................................X......
..................................X.....
...................................X....
....................................X...
.....................................X..
......................................X.
.......................................X
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................

X.......................................
.X......................................
..X.....................................
...X....................................
....X...................................
.....X..................................
......X.................................
.......X................................
........X...............................
.........X..............................
..........X.............................
...........X............................
............X...........................
.............X..........................
..............X.........................
...............X........................
................X.......................
.................X......................
..................X.....................
........................................
....................X...................
.....................X..................
......................X.................
.......................X................
........................X...............
.........................X..............
..........................X.............
...........................X............
............................X...........
.............................X..........
..............................X.........
...............................X........
................................X.......
.................................X......
..................................X.....
...................................X....
....................................X...
.....................................X..
......................................X.
.......................................X
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................

0 × 0: 1
0 × 5: 0
19 × 19: 0
20 × 20: 1
$

0 コメント:

コメントを投稿