Powered by SmartDoc

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

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

目次

講義資料

当日の OHP 資料

当日のOHP資料です。

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

sample-001

Download : sample-001.c ( SJIS 版 )

sample-001.c
/*
 * 2011/11/25 sample-001.c
 */

/*
 *
 */

#include <stdio.h>
#include "s_print.h"
#include "s_input.h"

/*
 *
 */

#define DATA_SIZE	10

/*
 *
 */

int main ( void ) {
  double data[DATA_SIZE];	/* データを保存する配列 */
  double min_data;			/* 最小値 */
  double max_data;			/* 最大値 */
  int i;					/* 配列の添字 (index) */

  /*
   * データの入力
   */

  s_print_int ( DATA_SIZE );
  s_print_string ( "個のデータを入力してください\n" );

  for ( i = 0; i < DATA_SIZE; i++ ) {
	s_print_int ( i );
	s_print_string ( "個目のデータ : " );
	data[i] = s_input_double();
  }

  /*
   * 入力されたデータを逆順に出力する
   */

  s_print_string ( "データを入力と逆順に出力します\n" );

  for ( i = 0; i < DATA_SIZE; i++ ) {
	s_print_int ( DATA_SIZE - 1 - i );
	s_print_string ( "番目のデータ : " );
	s_print_double ( data [ DATA_SIZE - 1 - i ] );
	s_print_newline();
  }


  /*
   * 最大最小を求める
   */

  min_data = max_data = data[0];
		/* 代入式
			「min_data = ( max_data = data[0] );」と解釈され、
				max_data = data[0];
				min_data = data[0];
			と同じ結果になる
		*/

  for ( i = 1; i < DATA_SIZE; i++ ) {
	if ( data[i] > max_data ) {
	  max_data = data[i];
	}
	if ( data[i] < min_data ) {
	  min_data = data[i];
	}
  }

  s_print_string ( "最大値は " );
  s_print_double ( max_data );
  s_print_string ( "です。\n" );

  s_print_string ( "最小値は " );
  s_print_double ( min_data );
  s_print_string ( "です。\n" );

  /*
   * 
   */

  return 0;
}

/*
 *
 */
入力例
5.9
1.4
2.3
8.9
8.3
4.4
3.9
5.1
2.7
4.8
sample-001.c の実行結果
C:\usr\c\> sample-001<  sample-001.in
10個のデータを入力してください
0個目のデータ : 5.900000
1個目のデータ : 1.400000
2個目のデータ : 2.300000
3個目のデータ : 8.900000
4個目のデータ : 8.300000
5個目のデータ : 4.400000
6個目のデータ : 3.900000
7個目のデータ : 5.100000
8個目のデータ : 2.700000
9個目のデータ : 4.800000
データを入力と逆順に出力します
9番目のデータ : 4.800000
8番目のデータ : 2.700000
7番目のデータ : 5.100000
6番目のデータ : 3.900000
5番目のデータ : 4.400000
4番目のデータ : 8.300000
3番目のデータ : 8.900000
2番目のデータ : 2.300000
1番目のデータ : 1.400000
0番目のデータ : 5.900000
最大値は 8.900000です。
最小値は 1.400000です。
C:\usr\c\> 

sample-002

Download : sample-002.c ( SJIS 版 )

sample-002.c
/*
 * 2011/11/25 sample-002.c
 */

/*
 *
 */

#include <stdio.h>
#include "s_print.h"
#include "s_input.h"

/*
 *
 */

void print_array ( char *name, double array[], int size ) {
  int i;					/* 配列の添字 (index) */

  for ( i = 0; i < size; i++ ) {
	s_print_string ( name );
	s_print_string ( "[" );
	s_print_int ( i );
	s_print_string ( "]=" );
	s_print_double ( array[i] );
	s_print_newline();
  }

}

/*
 *
 */

#define DATA_SIZE	10

/*
 *
 */

int main ( void ) {
  double dummy_1 = -1.23456;	/* 間違ってアクセスした時の保険 (1) */
  double data[DATA_SIZE];		/* データを保存する配列 */
  double dummy_2 =  1.23456;	/* 間違ってアクセスした時の保険 (2) */
  int i;						/* 配列の添字 (index) */

  /*
   * データの入力
   */

  s_print_int ( DATA_SIZE );
  s_print_string ( "個のデータを入力してください\n" );

  for ( i = 0; i < DATA_SIZE; i++ ) {
	s_print_int ( i );
	s_print_string ( "個目のデータ : " );
	data[i] = s_input_double();
  }

  /*
   * 入力されたデータを全て出力
   */

  s_print_string ( "入力されたデータを全て出力します\n" );
  print_array ( "data", data, DATA_SIZE );

  /*
   * 入力されたデータの先頭から 5 つだけを出力
   */

  s_print_string ( "入力されたデータの先頭から 5 つだけを出力します\n" );
  print_array ( "data", data, 5 );	/* 配列サイズとして 5 が指定されている */

  /*
   * 入力されたデータの最後の 3 つだけを出力
   */

  s_print_string ( "入力されたデータの最後の 3 つだけを出力\n" );
  print_array ( "data", data + 7, 3 );	/* 配列名はポインター値なので計算可能 */

  /*
   * 間違って、余分に指定してしまった..
   */

  s_print_string ( "サイズが 10 なのに 11 を指定してしまったら..\n" );
  print_array ( "data", data, 11 );

  /*
   * 
   */

  return 0;
}

/*
 *
 */
入力例
5.9
1.4
2.3
8.9
8.3
4.4
3.9
5.1
2.7
4.8
sample-002.c の実行結果
C:\usr\c\> sample-002<  sample-002.in
10個のデータを入力してください
0個目のデータ : 5.900000
1個目のデータ : 1.400000
2個目のデータ : 2.300000
3個目のデータ : 8.900000
4個目のデータ : 8.300000
5個目のデータ : 4.400000
6個目のデータ : 3.900000
7個目のデータ : 5.100000
8個目のデータ : 2.700000
9個目のデータ : 4.800000
入力されたデータを全て出力します
data[0]=5.900000
data[1]=1.400000
data[2]=2.300000
data[3]=8.900000
data[4]=8.300000
data[5]=4.400000
data[6]=3.900000
data[7]=5.100000
data[8]=2.700000
data[9]=4.800000
入力されたデータの先頭から 5 つだけを出力します
data[0]=5.900000
data[1]=1.400000
data[2]=2.300000
data[3]=8.900000
data[4]=8.300000
入力されたデータの最後の 3 つだけを出力
data[0]=5.100000
data[1]=2.700000
data[2]=4.800000
サイズが 10 なのに 11 を指定してしまったら..
data[0]=5.900000
data[1]=1.400000
data[2]=2.300000
data[3]=8.900000
data[4]=8.300000
data[5]=4.400000
data[6]=3.900000
data[7]=5.100000
data[8]=2.700000
data[9]=4.800000
data[10]=1.234560
C:\usr\c\> 

sample-003

Download : sample-003.c ( SJIS 版 )

sample-003.c
/*
 * 2011/11/25 sample-003.c
 */

/*
 *
 */

#include <stdio.h>
#include "s_print.h"
#include "s_input.h"

/*
 *
 */

void print_array ( char *name, double array[], int size ) {
  int i;					/* 配列の添字 (index) */

  for ( i = 0; i < size; i++ ) {
	s_print_string ( name );
	s_print_string ( "[" );
	s_print_int ( i );
	s_print_string ( "]=" );
	s_print_double ( array[i] );
	s_print_newline();
  }

}

/*
 *
 */

void input_array ( double array[], int size ) {
  int i;

  s_print_int ( size );
  s_print_string ( "個のデータを入力してください\n" );

  for ( i = 0; i < size; i++ ) {
	s_print_int ( i );
	s_print_string ( "個目のデータ : " );
	array[i] = s_input_double();
		  /* ポインターを利用しているので、
			 main 関数の data[pos] の内容が書き変わる */
  }

}

/*
 *	double_at_n : n 番目の要素を 2 倍にする
 */

void double_at_n ( double array[], int pos ) {

  array[pos] *= 2;		/*  array[pos] = array[pos] * 2 */
		  /* ポインターを利用しているので、
			 main 関数の data[pos] の内容が書き変わる */

}

/*
 *
 */

#define DATA_SIZE	10

/*
 *
 */

int main ( void ) {
  double dummy_1 = -1.23456;	/* 間違ってアクセスした時の保険 (1) */
  double data[DATA_SIZE];		/* データを保存する配列 */
  double dummy_2 =  1.23456;	/* 間違ってアクセスした時の保険 (2) */

  /*
   * データの入力
   */

  input_array ( data, DATA_SIZE );

  /*
   * 入力されたデータを全て出力
   */

  s_print_string ( "入力されたデータを全て出力します\n" );
  print_array ( "data", data, DATA_SIZE );

  s_print_string ( "念のため dummy 1 = " );
  s_print_double ( dummy_1 );
  s_print_newline();
  s_print_string ( "念のため dummy 2 = " );
  s_print_double ( dummy_2 );
  s_print_newline();

  /*
   * 5 番目の要素を 2 倍にする
   */

  double_at_n ( data, 5 );

  s_print_string ( "5 番の要素が 2 倍になりました。\n" );
  print_array ( "data", data, DATA_SIZE );

  s_print_string ( "念のため dummy 1 = " );
  s_print_double ( dummy_1 );
  s_print_newline();
  s_print_string ( "念のため dummy 2 = " );
  s_print_double ( dummy_2 );
  s_print_newline();

  /*
   * 10 番目の要素(というのは存在しないはずなのに..) を 2 倍にする
   */

  double_at_n ( data, 10 );
  s_print_string ( "10 番の要素を 2 倍にしました。\n" );
  print_array ( "data", data, DATA_SIZE );

  s_print_string ( "念のため dummy 1 = " );
  s_print_double ( dummy_1 );
  s_print_newline();
  s_print_string ( "念のため dummy 2 = " );
  s_print_double ( dummy_2 );
  s_print_newline();

  /*
   * 
   */

  return 0;
}

/*
 *
 */
入力例
5.9
1.4
2.3
8.9
8.3
4.4
3.9
5.1
2.7
4.8
sample-003.c の実行結果
C:\usr\c\> sample-003<  sample-003.in
10個のデータを入力してください
0個目のデータ : 5.900000
1個目のデータ : 1.400000
2個目のデータ : 2.300000
3個目のデータ : 8.900000
4個目のデータ : 8.300000
5個目のデータ : 4.400000
6個目のデータ : 3.900000
7個目のデータ : 5.100000
8個目のデータ : 2.700000
9個目のデータ : 4.800000
入力されたデータを全て出力します
data[0]=5.900000
data[1]=1.400000
data[2]=2.300000
data[3]=8.900000
data[4]=8.300000
data[5]=4.400000
data[6]=3.900000
data[7]=5.100000
data[8]=2.700000
data[9]=4.800000
念のため dummy 1 = -1.234560
念のため dummy 2 = 1.234560
5 番の要素が 2 倍になりました。
data[0]=5.900000
data[1]=1.400000
data[2]=2.300000
data[3]=8.900000
data[4]=8.300000
data[5]=8.800000
data[6]=3.900000
data[7]=5.100000
data[8]=2.700000
data[9]=4.800000
念のため dummy 1 = -1.234560
念のため dummy 2 = 1.234560
10 番の要素を 2 倍にしました。
data[0]=5.900000
data[1]=1.400000
data[2]=2.300000
data[3]=8.900000
data[4]=8.300000
data[5]=8.800000
data[6]=3.900000
data[7]=5.100000
data[8]=2.700000
data[9]=4.800000
念のため dummy 1 = -1.234560
念のため dummy 2 = 2.469120
C:\usr\c\> 

sample-004

Download : sample-004.c ( SJIS 版 )

sample-004.c
/*
 * 2011/11/25 sample-004.c
 */

/*
 *
 */

#include <stdio.h>
#include "s_print.h"
#include "s_input.h"

/*
 *
 */

void input_array ( double array[], int size ) {
  int i;

  s_print_int ( size );
  s_print_string ( "個のデータを入力してください\n" );

  for ( i = 0; i < size; i++ ) {
	s_print_int ( i );
	s_print_string ( "個目のデータ : " );
	array[i] = s_input_double();
		  /* ポインターを利用しているので、
			 main 関数の data[pos] の内容が書き変わる */
  }

}

/*
 *	size mn の配列を m 行 n 列の配列として表示する
 */

void print_array_mn ( double array[], int m, int n ) {
  int i;
  int j;

  for ( i = 0; i < m; i++ ) {
	for ( j = 0; j < n; j++ ) {
	  s_print_double ( array[i * n + j] );
	  s_print_string ( "  " );				/* 隙間 */
	}
	s_print_newline();
  }
}

/*
 *
 */

#define DATA_SIZE	10

/*
 *
 */

int main ( void ) {
  double data[DATA_SIZE];		/* データを保存する配列 */

  /*
   * データの入力
   */

  input_array ( data, DATA_SIZE );

  /*
   * 入力されたデータを 2 × 5 の配列として印刷
   */

  s_print_string ( "[2 × 5]\n" );
  print_array_mn ( data, 2, 5 );
  s_print_newline();

  /*
   * 入力されたデータを 5×2 の配列として印刷
   */

  s_print_string ( "[5 × 2]\n" );
  print_array_mn ( data, 5, 2 );
  s_print_newline();

  /*
   * 
   */

  return 0;
}

/*
 *
 */
入力例
5.9
1.4
2.3
8.9
8.3
4.4
3.9
5.1
2.7
4.8
sample-004.c の実行結果
C:\usr\c\> sample-004<  sample-004.in
10個のデータを入力してください
0個目のデータ : 5.900000
1個目のデータ : 1.400000
2個目のデータ : 2.300000
3個目のデータ : 8.900000
4個目のデータ : 8.300000
5個目のデータ : 4.400000
6個目のデータ : 3.900000
7個目のデータ : 5.100000
8個目のデータ : 2.700000
9個目のデータ : 4.800000
[2 × 5]
5.900000  1.400000  2.300000  8.900000  8.300000  
4.400000  3.900000  5.100000  2.700000  4.800000  

[5 × 2]
5.900000  1.400000  
2.300000  8.900000  
8.300000  4.400000  
3.900000  5.100000  
2.700000  4.800000  

C:\usr\c\> 

sample-005

Download : sample-005.c ( SJIS 版 )

sample-005.c
/*
 * 2011/11/25 sample-005.c
 */

/*
 *
 */

#include <stdio.h>
#include "s_print.h"
#include "s_input.h"

/*
 *
 */

void input_array_25 ( double array[2][5] ) {
  int i;
  int j;

  s_print_string ( "2 × 5 個のデータを入力してください\n" );

  for ( i = 0; i < 2; i++ ) {
	for ( j = 0; j < 5; j++ ) {
	  s_print_string ( "[" );
	  s_print_int ( i );
	  s_print_string ( "][" );
	  s_print_int ( j );
	  s_print_string ( "]=" );
	  array[i][j] = s_input_double();
	}
  }
}

/*
 *	2 行 5 列の配列の印刷
 */

void print_array_25 ( double array[2][5] ) {	/* サイズが指定されている */
  int i;
  int j;

  for ( i = 0; i < 2; i++ ) {
	for ( j = 0; j < 5; j++ ) {
	  s_print_double ( array[i][j] );
	  s_print_string ( "  " );				/* 隙間 */
	}
	s_print_newline();
  }
}

/*
 *	5 行 2 列の配列の印刷
 */

void print_array_52 ( double array[5][2] ) {	/* サイズが指定されている */
  int i;
  int j;

  for ( i = 0; i < 5; i++ ) {
	for ( j = 0; j < 2; j++ ) {
	  s_print_double ( array[i][j] );
	  s_print_string ( "  " );				/* 隙間 */
	}
	s_print_newline();
  }
}

/*
 *
 */

int main ( void ) {
  double data25[2][5];

  /*
   * データの入力
   */

  input_array_25 ( data25 );

  /*
   * 入力されたデータを 2 × 5 の配列として印刷
   */

  s_print_string ( "[2 × 5]\n" );
  print_array_25 ( data25 );
  s_print_newline();

  /*
   * 入力されたデータを 5×2 の配列として印刷
   */

  s_print_string ( "[5 × 2]\n" );
  print_array_52 ( data25 );		/* Error になる可能性がある */
  s_print_newline();				/* 少くても warning になる */

  /*
   * 
   */

  return 0;
}

/*
 *
 */
入力例
5.9
1.4
2.3
8.9
8.3
4.4
3.9
5.1
2.7
4.8
sample-005.c の実行結果
C:\usr\c\> sample-005<  sample-005.in
2 × 5 個のデータを入力してください
[0][0]=5.900000
[0][1]=1.400000
[0][2]=2.300000
[0][3]=8.900000
[0][4]=8.300000
[1][0]=4.400000
[1][1]=3.900000
[1][2]=5.100000
[1][3]=2.700000
[1][4]=4.800000
[2 × 5]
5.900000  1.400000  2.300000  8.900000  8.300000  
4.400000  3.900000  5.100000  2.700000  4.800000  

[5 × 2]
5.900000  1.400000  
2.300000  8.900000  
8.300000  4.400000  
3.900000  5.100000  
2.700000  4.800000  

C:\usr\c\> 

sample-006

Download : sample-006.c ( SJIS 版 )

sample-006.c
/*
 * 2011/11/25 sample-006.c
 */

/*
 *
 */

#include <stdio.h>
#include "s_print.h"
#include "s_input.h"


/*
 *	2 行 5 列の配列のアドレス値の表示
 */

void print_array_pointer_25 ( double array[2][5] ) {	/* サイズが指定されている */
  int i;
  int j;

  for ( i = 0; i < 2; i++ ) {
	for ( j = 0; j < 5; j++ ) {
	  s_print_string ( "Addrsss of array[" );
	  s_print_int ( i );
	  s_print_string ( "][" );
	  s_print_int ( j );
	  s_print_string ( "]=" );

	  s_print_hex ( &array[i][j] );

	  s_print_newline();
	}
  }
}

/*
 *
 */

int main ( void ) {
  double data25[2][5];

  /*
   * 要素のアドレスの表示
   */

  print_array_pointer_25 ( data25 );

  /*
   * 
   */

  return 0;
}

/*
 *
 */
sample-006.c の実行結果
C:\usr\c\> sample-006
Addrsss of array[0][0]=bfd209d0
Addrsss of array[0][1]=bfd209d8
Addrsss of array[0][2]=bfd209e0
Addrsss of array[0][3]=bfd209e8
Addrsss of array[0][4]=bfd209f0
Addrsss of array[1][0]=bfd209f8
Addrsss of array[1][1]=bfd20a00
Addrsss of array[1][2]=bfd20a08
Addrsss of array[1][3]=bfd20a10
Addrsss of array[1][4]=bfd20a18
C:\usr\c\> 

sample-007

Download : sample-007.c ( SJIS 版 )

sample-007.c
/*
 * 2011/11/25 sample-007.c
 */

#include <stdio.h>
#include "s_print.h"
#include "s_input.h"

/*
 *
 */

#define	ARRAY_SIZE	2

/*
 *
 */

typedef	int Matrix2D[ARRAY_SIZE][ARRAY_SIZE];

/*
 *
 */

void output_Matrix2D ( Matrix2D array ) {
	 int i;
	 int j;

	 for ( i = 0; i < ARRAY_SIZE; i++ ) {
		s_print_char ( "< "[i] );
		s_print_char ( ' ' );
		for ( j = 0; j < ARRAY_SIZE; j++ ) {
			s_print_int ( array[i][j] );
			s_print_char ( ' ' );
		}
		s_print_char ( "> "[i] );
		s_print_char ( '\n' );
	}
}

/*
 *
 */

void input_Matrix2D ( Matrix2D array ) {
	 int i;
	 int j;

	 for ( i = 0; i < ARRAY_SIZE; i++ ) {
		for ( j = 0; j < ARRAY_SIZE; j++ ) {
			s_print_int ( i );
			s_print_string ( ", " );
			s_print_int ( j );
			s_print_string ( " 要素 = " );
			array[i][j] = s_input_int();
		}
	}
}

/*
 *
 */

void copyto_Matrix2D( Matrix2D dst, Matrix2D src ) {
	int i;
	int j;

	 for ( i = 0; i < ARRAY_SIZE; i++ ) {
		for ( j = 0; j < ARRAY_SIZE; j++ ) {
			dst[i][j] = src[i][j];
		}
	}
}

/*
 *
 */

void addto_Matrix2D( Matrix2D dst, Matrix2D src ) {
	int i;
	int j;

	 for ( i = 0; i < ARRAY_SIZE; i++ ) {
		for ( j = 0; j < ARRAY_SIZE; j++ ) {
			dst[i][j] += src[i][j];
		}
	}
} 

/*
 *
 */

void multo_Matrix2D( Matrix2D dst, Matrix2D src ) {
	Matrix2D result;
	int i;
	int j;
	int k;

	 for ( i = 0; i < ARRAY_SIZE; i++ ) {
		for ( j = 0; j < ARRAY_SIZE; j++ ) {
			result[i][j] = 0;
			for ( k = 0; k < ARRAY_SIZE; k++ ) {
				result[i][j] += src[i][k] * dst[k][j];
			}
		}
	}

	copyto_Matrix2D ( dst, result );
}


/*
 *
 */

int main ( void ) {
	Matrix2D m1;
	Matrix2D m2;
	Matrix2D add;
	Matrix2D mul;

	input_Matrix2D ( m1 );
	input_Matrix2D ( m2 );

	copyto_Matrix2D ( add, m1 );
	addto_Matrix2D ( add, m2 );

	output_Matrix2D ( add );

	copyto_Matrix2D ( mul, m1 );
	multo_Matrix2D ( mul, m2 );

	output_Matrix2D ( mul );

	return 0;
}

/*
 *
 */
入力例
1
2
3
4
1
0
0
1
sample-007.c の実行結果
C:\usr\c\> sample-007<  sample-007.in
0, 0 要素 = 1
0, 1 要素 = 2
1, 0 要素 = 3
1, 1 要素 = 4
0, 0 要素 = 1
0, 1 要素 = 0
1, 0 要素 = 0
1, 1 要素 = 1
< 2 2 >
  3 5  
< 1 2 >
  3 4  
C:\usr\c\> 

sample-008

Download : sample-008.c ( SJIS 版 )

sample-008.c
/*
 * 2011/11/25 sample-008.c
 */

/*
 *
 */

#include <stdio.h>
#include <stdlib.h>		/* cmalloc のために必要 */
#include "s_print.h"
#include "s_input.h"

/*
 *
 */

void print_array ( char *name, double array[], int size ) {
  int i;					/* 配列の添字 (index) */

  for ( i = 0; i < size; i++ ) {
	s_print_string ( name );
	s_print_string ( "[" );
	s_print_int ( i );
	s_print_string ( "]=" );
	s_print_double ( array[i] );
	s_print_newline();
  }

}

/*
 *
 */

int main ( void ) {
  double *data;			/* データを保存する領域へのポインター */
  int n;				/* データの個数 */
  int i;

  /*
   * データの入力
   */

  s_print_string ( "何個のデータを入力しますか ?" );
  n = s_input_int();

  if ( (data = (double *)calloc( sizeof(double), n )) == NULL ) {
	s_print_string ( "メモリが確保できませんでした...\n" );
	exit ( -1 );
  }

  s_print_int ( n );
  s_print_string ( "個のデータを入力してください\n" );

  for ( i = 0; i < n; i++ ) {
	s_print_int ( i );
	s_print_string ( "個目のデータ : " );
	data[i] = s_input_double();
  }

  /*
   * 入力されたデータを全て出力
   */

  s_print_string ( "入力されたデータを全て出力します\n" );
  print_array ( "data", data, n );

  /*
   * 
   */

  free ( data );	/* alloc したら free する */

  /*
   * 
   */

  return 0;
}

/*
 *
 */
入力例
5
8.3
2.4
5.8
9.2
1.2
sample-008.c の実行結果
C:\usr\c\> sample-008<  sample-008.in
何個のデータを入力しますか ?5
5個のデータを入力してください
0個目のデータ : 8.300000
1個目のデータ : 2.400000
2個目のデータ : 5.800000
3個目のデータ : 9.200000
4個目のデータ : 1.200000
入力されたデータを全て出力します
data[0]=8.300000
data[1]=2.400000
data[2]=5.800000
data[3]=9.200000
data[4]=1.200000
C:\usr\c\> 

本日の課題

課題 20111125-01

Download : 20111125-01.c ( SJIS 版 )

20111125-01.c
/*
 * 20111125-1-QQQQ.c
 */

#include <stdio.h>
#include "s_print.h"
#include "s_input.h"

/*
 *
 */

#define	ARRAY_SIZE	3

/*
 *
 */

typedef	int Matrix3D[ARRAY_SIZE][ARRAY_SIZE];

/*
 *
 */

void output_Matrix3D ( Matrix3D array ) {
	 int i;
	 int j;

	 for ( i = 0; i < ARRAY_SIZE; i++ ) {
		s_print_char ( "|<|"[i] );
		s_print_char ( ' ' );
		for ( j = 0; j < ARRAY_SIZE; j++ ) {
			s_print_int ( array[i][j] );
			s_print_char ( ' ' );
		}
		s_print_char ( "|>|"[i] );
		s_print_char ( '\n' );
	}
}

/*
 *
 */

void input_Matrix3D ( Matrix3D array ) {
	 int i;
	 int j;

	 for ( i = 0; i < ARRAY_SIZE; i++ ) {
		for ( j = 0; j < ARRAY_SIZE; j++ ) {
			s_print_int ( i );
			s_print_string ( ", " );
			s_print_int ( j );
			s_print_string ( " 要素 = " );
			array[i][j] = s_input_int();
		}
	}
}

/*
 *
 */

void copyto_Matrix3D( Matrix3D dst, Matrix3D src ) {
	int i;
	int j;

	 for ( i = 0; i < ARRAY_SIZE; i++ ) {
		for ( j = 0; j < ARRAY_SIZE; j++ ) {
			dst[i][j] = src[i][j];
		}
	}
}

/*
 *
 */

void addto_Matrix3D( Matrix3D dst, Matrix3D src ) {
	int i;
	int j;

	 for ( i = 0; i < ARRAY_SIZE; i++ ) {
		for ( j = 0; j < ARRAY_SIZE; j++ ) {
			dst[i][j] += src[i][j];
		}
	}
} 

/*
 *
 */

void multo_Matrix3D( Matrix3D dst, Matrix3D src ) {
	Matrix3D result;
	int i;
	int j;
	int k;

	 for ( i = 0; i < ARRAY_SIZE; i++ ) {
		for ( j = 0; j < ARRAY_SIZE; j++ ) {
			result[i][j] = 0;

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

		}
	}

	copyto_Matrix3D ( dst, result );
}


/*
 *
 */

int main ( void ) {
	Matrix3D m1;
	Matrix3D m2;
	Matrix3D add;
	Matrix3D mul;

	input_Matrix3D ( m1 );
	input_Matrix3D ( m2 );

	copyto_Matrix3D ( add, m1 );
	addto_Matrix3D ( add, m2 );

	output_Matrix3D ( add );

	copyto_Matrix3D ( mul, m1 );
	multo_Matrix3D ( mul, m2 );

	output_Matrix3D ( mul );

	return 0;
}

/*
 *
 */
入力例
1
2
3
4
5
6
7
8
9
0
0
1
0
1
0
1
0
0
20111125-01.c の実行結果
C:\usr\c\> 01<  01.in
0, 0 要素 = 1
0, 1 要素 = 2
0, 2 要素 = 3
1, 0 要素 = 4
1, 1 要素 = 5
1, 2 要素 = 6
2, 0 要素 = 7
2, 1 要素 = 8
2, 2 要素 = 9
0, 0 要素 = 0
0, 1 要素 = 0
0, 2 要素 = 1
1, 0 要素 = 0
1, 1 要素 = 1
1, 2 要素 = 0
2, 0 要素 = 1
2, 1 要素 = 0
2, 2 要素 = 0
| 1 2 4 |
< 4 6 6 >
| 8 8 9 |
| 7 8 9 |
< 4 5 6 >
| 1 2 3 |
C:\usr\c\>