Powered by SmartDoc

ソフトウェア概論A/B (2017/10/06)
Ver. 1.0

2017年10月6日
栗野 俊一
kurino@math.cst.nihon-u.ac.jp
http://edu-gw2.math.cst.nihon-u.ac.jp/~kurino/2017/soft/soft.html
ソフトウェア概論 A/B2017年10月6日 の資料

目次

講義資料

当日の OHP 資料

講議中に作成したプログラム

本日の課題

課題 20171006-01 : curses を利用して画面に、「回」の文字を書く

Download : 20171006-01.c

20171006-01.c
/*
 * 課題 20171006-01
 *
 * 20171006 20171006-01-QQQQ.c
 *
 *	curses を利用して画面に、「回」の文字を書く
 */

#include <stdio.h>
#include <ncursesw/ncurses.h>	/* ncurses の利用 */
#include <unistd.h>

/*
 *
 */

#define	OUT_X_POS	20	/* 「回」の外側の左上の x 座標 ( 1 〜 80 ) */
#define	OUT_Y_POS	5	/* 「回」の外側の左上の y 座標 ( 1 〜 25 ) */

#define	OUT_Y_SIZE	10				/* 「回」の外側の縦の長さ */
#define	OUT_X_SIZE	(OUT_Y_SIZE*2)	/* 「回」の外側の横の長さ */
#define	IN_Y_SIZE	6				/* 「回」の内側の縦の長さ */
#define	IN_X_SIZE	(IN_Y_SIZE*2)	/* 「回」の内側の横の長さ */

#define	IN_X_POS	(OUT_X_POS+(OUT_X_SIZE-IN_X_SIZE)/2)	/* 「回」の内側の左上の x 座標 */
#define	IN_Y_POS	(OUT_Y_POS+(OUT_Y_SIZE-IN_Y_SIZE)/2)	/* 「回」の内側の左上の y 座標 */


/*
 * draw_rect ( int px, int py, int xs, int ys )
 *		(px, py) の位置 に xs * ys の矩形を書く
 */

void draw_rect ( int px, int py, int xs, int ys ) {
	int x;	/* カーソルの x 座標を表す変数 */
	int y;	/* カーソルの y 座標を表す変数 */

	for ( x = px; x < px + xs; x++ ) {

		move ( py,          x ); addch ( '*' );
		move ( py + ys - 1, x ); addch ( '*' );

	}

	for ( y = py; y < py + ys; y++ ) {

		move ( y, px          ); addch ( '*' );

	/*
	**	 この部分を完成させなさい
	*/


	}

}

/*
 *	main
 */

int main( void )
{

	/* ncurses の初期化 */

	initscr();		/* 画面を初期化 (クリアされる) */
	cbreak();		/* 文字の入力をリアルタイムにする */
	noecho();		/* 文字の入力をエコーバックしない */

	/* 画面に「回」を書く */

		/* 外の四角 */
	draw_rect ( OUT_X_POS, OUT_Y_POS, OUT_X_SIZE, OUT_Y_SIZE );
		/* 内の四角 */

	/*
	**	 この部分を完成させなさい
	*/


	/* 描画結果の反映 */

	refresh();					/* 書き換えた内容を画面に描画 */

	/* 何かキーが押されるまで末 */

	getch();  					/* 文字の入力待ち */

	/* 後始末 */

	endwin();					/* curses の後始末 */

	return 0;
}
入力例
123
987
456
20171006-01.c の実行結果
                    ********************
                    *                  *
                    *   ************   *
                    *   *          *   *
                    *   *          *   *
                    *   *          *   *
                    *   *          *   *
                    *   ************   *
                    *                  *
                    ********************