Powered by SmartDoc

ソフトウェア概論A/B (2019/05/31)
Ver. 1.0

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

目次

講義資料

当日の OHP 資料

Download

講義で利用するサンプルプログラム

Download : sample-001.c

sample-001.c
/*
 * 2019/05/31 sample-001.c
 */

/*
 * 2^N を計算する ( ただし、N は文字列の長さ、結果は 2^N の文字列 )
 */

#include <stdio.h>

#define	EOS		'\0'		/* End Of String (\0) のマクロ定義 */

/*
 * pow2(N) : 2^N を計算
 */

void pow2( char *N ) {

	if ( *N == EOS ) {		/* N == '\0' すなわち N == "" の時 */
		putchar ( '*' );	/* 2^0 = 1 なので、一個出力 */
	} else {				/* そうでなければ */
		pow2( N + 1 );		/* 2^N == 2^(N-1) + 2^(N-1) の関係を利用 */
		pow2( N + 1 );
	}
}


/*
 * main 関数
 */

int main ( void ) {

	printf ( "2^3\n" );
	pow2 ( "***" );
	printf ( "\n" );

	printf ( "2^5\n" );
	pow2 ( "*****" );
	printf ( "\n" );

	return 0;
}
sample-001.c の実行結果
$ ./sample-001.exe
2^3
********
2^5
********************************
$ 

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

本日の課題

課題プログラム内の「/*名前:ここ*/」の部分を書き換え「/*この部分を完成させなさい*/」の部分にプログラムを追加して、プログラムを完成させます。

課題 20190531-01 : 高さ

Download : 20190531-01.c

20190531-01.c
/*
 * 20190531-01-QQQQ.c
 *	高さ3 のハノイの塔を手動で解く
 */


#include <stdio.h>

/*
 *	ハノイプログラムには、s_hanoi.h が必要
 */

#include "s_hanoi.h"

/*
 * ハノイの塔 プログラム
 */


int main ( void ) {

  /*
   * 最初は "1" に全ての円盤が置いてある
   * これを "2" に全ての円盤を移動する
   */

	/*
	 * ハノイで、できること
	 *	 s_hanoi_init() : ハノイプログラムの開始 : 最初に一度だけ呼び出す
	 *   s_hanoi_size ( char *discs ) : ハノイの塔の高さを設定する
	 *   s_hanoi_move ( char *from, char *to ) : from にある円盤を to に移す
	 *   s_hanoi_clear () : 最初の状態に戻す
	 *   s_hanoi_stop() : ハノイ塔プログラムの終了 : return 0 の前に呼び出す
	 */

	s_hanoi_init();	/* ハノイの塔のプログラムの初期変化 */
	/* s_hanoi_set ( char *discs ) を呼ばなければ、高さは 3 */

	printf ( "これから解答を開始します。[Enter] キーを押してください\n" );
	putchar ( '>' );
	putchar ( getchar() );	/* 開始前に、一旦停止 */

	/* 解答開始 */
	/* 高さが、具体的な小さい数(3)で指定されているので、
	   解答手順を実際に書き下すだけ */

	s_hanoi_move ( "1", "2" );	/* 1 から 2 に、(大きさ 1 の)円盤を移動 */
	s_hanoi_move ( "1", "3" );	/* 1 から 3 に、(大きさ 2 の)円盤を移動 */

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

	s_hanoi_move ( "1", "2" );	/* 1 から 2 に、(大きさ 3 の)円盤を移動 */
	s_hanoi_move ( "3", "1" );	/* 3 から 1 に、(大きさ 1 の)円盤を移動 */

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

	s_hanoi_move ( "1", "2" );	/* 1 から 2 に、(大きさ 1 の)円盤を移動 */

	/* 解答終了 */

	printf ( "プログラムを終了するには [Enter] キーを押してください\n" );
	putchar ( '>' );		/* 終了前に確認 */
	putchar ( getchar() );

	/* ハノイの終了 */
	s_hanoi_stop();

	return 0;
}
20190531-01.c の実行結果
$ ./20190531-01-QQQQ.exe
$