Powered by SmartDoc

ソフトウェア概論B (2011/05/20)
Ver. 1.0

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

目次

講義資料

当日の OHP 資料

当日のOHP資料です。

追加ファイル

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

sample-001

Download : sample-001.c ( SJIS 版 )

sample-001.c
/*
 * 2011/05/20 sample-001.c
 */

#include <stdio.h>
#include <string.h>

void down_triangle ( char *length ) {

  if ( !strcmp ( length, "" ) ) { /* 長さが 0 */
	/* なにもしない */
  } else {
	printf ( length );
	printf ( "\n" );
	down_triangle ( length + 1 );
  }
}

main()
{
  down_triangle ( "****" );

  /*
	****
	***
	**
	*
   */
}
sample-001.c の実行結果
C:\usr\c\> sample-001
****
***
**
*
C:\usr\c\> 

sample-002

Download : sample-002.c ( SJIS 版 )

sample-002.c
/*
 * 2011/05/20 sample-002.c
 */

#include <stdio.h>
#include <string.h>

void up_triangle ( char *length ) {

  if ( !strcmp ( length, "" ) ) { /* 長さが 0 */
	/* なにもしない */
  } else {
	up_triangle ( length + 1 );

	printf ( length );
	printf ( "\n" );
  }
}

main()
{
  up_triangle ( "****" );

  /*

	*
	**
	***
	****

   */
}
sample-002.c の実行結果
C:\usr\c\> sample-002
*
**
***
****

sample-003

Download : sample-003.c ( SJIS 版 )

sample-003.c
/*
 * 2011/05/20 sample-003.c
 */

#include <stdio.h>
#include <string.h>

void down_triangle ( char *length ) {

  if ( !strcmp ( length, "" ) ) { /* 長さが 0 */
	/* なにもしない */
  } else {
	printf ( length );
	printf ( "\n" );
	down_triangle ( length + 1 );
  }
}

void up_triangle ( char *length ) {

  if ( !strcmp ( length, "" ) ) { /* 長さが 0 */
	/* なにもしない */
  } else {
	up_triangle ( length + 1 );

	printf ( length );
	printf ( "\n" );
  }
}

void maya_pramid ( char *length ) {

  up_triangle ( length );	/* 上の部分 */
  down_triangle ( length );	/* 下の部分 */

}

main()
{
  maya_pramid ( "****" );

  /*

	*
	**
	***
	****
	****	<= 頂上が平なピラミッド
	***
	**
	*

   */
}
sample-003.c の実行結果
C:\usr\c\> sample-003
*
**
***
****
****
***
**
*
C:\usr\c\> 

sample-004

Download : sample-004.c ( SJIS 版 )

sample-004.c
/*
 * 2011/05/20 sample-004.c
 */

#include <stdio.h>
#include <string.h>

/*
 * maya_pramid 再帰版
 */

void revese_pramid ( char *length ) {

  if ( !strcmp ( length, "" ) ) { /* 長さが 0 */
	/* なにもしない */
  } else {

	printf ( length );
	printf ( "\n" );
	revese_pramid ( length + 1 );
	printf ( length );
	printf ( "\n" );
  }

}

main()
{

	revese_pramid ( "****" );

  /*
	****
	***
	**
	*
	*
	**
	***
	****
   */
}
sample-004.c の実行結果
C:\usr\c\> sample-004
****
***
**
*
*
**
***
****

sample-005

Download : sample-005.c ( SJIS 版 )

sample-005.c
/*
 * 2011/05/20 sample-005.c
 */

#include <stdio.h>
#include <string.h>

void count_up ( char *length ) {

  if ( !strcmp ( length, "" ) ) { /* 長さが 0 */
	/* なにもしない */
  } else {
	printf ( "*" );
	count_up ( length + 1 );
  }
}

main()
{

  count_up ( "abc123" );
  printf ( "\n" );

  count_up ( "123456789" );
  printf ( "\n" );

	/* 文字列の長さを計算する */

}
sample-005.c の実行結果
C:\usr\c\> sample-005
******
*********

sample-006

Download : sample-006.c ( SJIS 版 )

sample-006.c
/*
 * 2011/05/20 sample-006.c
 */

#include <stdio.h>
#include <string.h>

/*
 * ペアノの公理 (自然数の定義)
 *   i) 0 は自然数
 *  ii) x が自然数ならば x + 1 も自然数
 * iii) i) と ii) 以外に自然数はない
 */

/*
 * 和の定義
 *	n, m が自然数の時に n + m とは何か
 * 
 *                m        	( n が 0 の時 )
 *      n + m { 
 *		( x + m ) + 1   ( n = x + 1 の時 )
 */

/*
 * a と b の和を計算する
 */

void addition ( char *n, char *m ) {

  /*
  printf ( a );
  printf ( b );
  */

  if ( !strcmp ( n, "" ) ) {	/* n が 0 の時 */
	printf ( m );
  } else {
	addition ( n + 1, m );	/* x + m を計算 */
	printf ( "*" );	/* +1 をしている */
  }
}

main()
{

  addition ( "***", "****" );
  printf ( "\n" );

  /* 足し算をする */

}
sample-006.c の実行結果
C:\usr\c\> sample-006
*******

sample-007

Download : sample-007.c ( SJIS 版 )

sample-007.c
/*
 * 2011/05/20 sample-007.c
 */

#include <stdio.h>
#include <string.h>

/*
 * 積の定義
 *	n, m が自然数の時に n * m とは何か
 * 
 *                  0      	( n が 0 の時 )
 *      n + m { 
 *		( x * m ) + m   ( n = x + 1 の時 )
 */

/*
 * n と m のかけ算
 */

void multiply ( char *n, char *m ) {

  if ( !strcmp ( n, "" ) ) {	/* n が 0 の時 */
	/* 何もしなくてもよい */
  } else {
	multiply ( n + 1, m );	/* x * m を計算 */
	printf ( m );		/* + m をしている */
  }
}

main()
{

  multiply ( "***", "****" );
  printf ( "\n" );

  /* 足し算をする */

}
sample-007.c の実行結果
C:\usr\c\> sample-007
************

sample-008

Download : sample-008.c ( SJIS 版 )

sample-008.c
/*
 * 2011/05/20 sample-008.c
 */

#include <stdio.h>
#include <string.h>

/*
 * 引き算の定義
 *	n, m が自然数の時に n - m とは何か ( n >= m )
 * 
 *                n        	( m が 0 の時 )
 *      n - m { 
 *		 y - x          ( m = x + 1 の時 )
 *		                ( n = y + 1 の時 )
 */

/*
 * n と m の差
 */

void diffirence ( char *n, char *m ) {

  if ( !strcmp ( m, "" ) ) {	/* m が 0 の時 */
	printf ( n );
  } else {
	diffirence ( n + 1, m + 1 );	/* y - x を計算 */
  }
}

main()
{

  diffirence ( "******", "****" );
  printf ( "\n" );

  /* 足し算をする */

}
sample-008.c の実行結果
C:\usr\c\> sample-008
**

sample-009

Download : sample-009.c ( SJIS 版 )

sample-009.c
/*
 * 2011/05/20 sample-009.c
 */

#include <stdio.h>
#include <string.h>

/*
 * 割り算の定義
 *	n, m が自然数の時に n / m とは何か ( m > 0 )
 * 
 *                0        		( m > n の時 ) 
 *      n / m { 
 *		 1 + ( n - m ) / m	( その他の時 )
 */

/*
 *
 */

void devide_sub ( char *n, char *m, char *mm ) {
	  /*            ^        ^ 変化*/
	  /*                              ^^ 最初の m を記憶して、後から利用できるようにしている */ 
  if ( !strcmp ( m, "" ) ) {	/* m が 0 */
	printf ( "*" );
	devide_sub ( n, mm, mm );
		/* 1 + ( n - m ) / m	( その他の時 )*/
  } else if ( !strcmp ( n, "" ) ) {	/* n が 0 */
	/* なにもしない */
  } else {
	devide_sub ( n + 1, m + 1, mm );
  }

}

void devide ( char *n, char *m ) {
  devide_sub ( n, m, m );
}

main()
{

  printf ( "10/4 = " );
  devide ( "**********", "****" );
  printf ( "\n" );

  printf ( "10/3 = " );
  devide ( "**********", "***" );
  printf ( "\n" );

  printf ( "10/2 = " );
  devide ( "**********", "**" );
  printf ( "\n" );

}

/*

  devide ( "**********", "****" );

  devide_sub ( "**********", "****", "****" );

  devide_sub ( "*********", "***", "****" );

  devide_sub ( "********", "**", "****" );

  devide_sub ( "*******", "*", "****" );

  devide_sub ( "******", "", "****" );

  devide_sub ( "******", "", "****" );
	10 - 4 -> 6

  printf ( "*" );
  devide_sub ( "******", "****", "****" );

  printf ( "*" );
  devide_sub ( "*****", "***", "****" );

  printf ( "*" );
  devide_sub ( "****", "**", "****" );

  printf ( "*" );
  devide_sub ( "***", "*", "****" );

  printf ( "*" );
  devide_sub ( "**", "", "****" );
	(10 - 4) - 4 -> 2

  printf ( "*" );
  printf ( "*" );
  devide_sub ( "**", "****", "****" );

  printf ( "*" );
  printf ( "*" );
  devide_sub ( "*", "***", "****" );

  printf ( "*" );
  printf ( "*" );
  devide_sub ( "", "**", "****" );

  printf ( "*" );
  printf ( "*" );

	なので答は「**」となる
*/
sample-009.c の実行結果
C:\usr\c\> sample-009
10/4 = **
10/3 = ***
10/2 = *****

本日の課題

[課題1]メタセコイヤのによる3次元のモデルデータをウェブから検索して、sample_GL.exeを利用して、表示せなさい。そしてのそのモデルデータのあるPageの紹介を情報をファイル20110520-1-QQQQ.txt ( QQQQは学生番号)に記入し、CST Portalに提出しなさい。

[課題2] 前回の [課題 3 ]をしなさい(1)

  1. 前回提出した人は、今回提出はしなくてもよい。

Links