合同ゼミ中間発表
高久先生と合同でゼミの中間発表をしようと相談。 例年になく斉藤研では、宿題ネタの途中結果の発表会を実施しているが、 合同中間発表だし最終目標の発表としたい。 卒研で目指す最終目標のシステムは、どんな構成で・どんな処理をするの かを発表して欲しい。
atoi(),itoa()にて演習
N進数・文字列・数値の範囲・文字コードとデータの基本が理解出来たところで、 文字列から整数値を取り出すatoi() , 数値を文字列に変換する itoa() のプログラムにて、 演習を行う。 演習用の雛形プログラムを示し、そのプログラムの挙動を示し、以下の課題とする。
int my_atoi( char s[] ) { int ans = 0 , i ; for( i = 0 ; s[i] != 'int my_atoi( char s[] ) { int ans = 0 , i ; for( i = 0 ; s[i] != '\0' && s[i] >= '0' && s[i] <= '9' ; i++ ) { ans = ans * 10 + (s[i] - '0' ) ; } return ans ; } char* my_itoa( char ans[] , int x ) { int i ; ans[ 5 ] = '\0' ; for( i = 0 ; i < 5 ; i++ ) { int d = x % 10 ; ans[ 4 - i ] = '0' + d ; x /= 10 ; } return ans ; }' && s[i] >= '0' && s[i] <= '9' ; i++ ) { ans = ans * 10 + (s[i] - '0' ) ; } return ans ; } char* my_itoa( char ans[] , int x ) { int i ; ans[ 5 ] = 'int my_atoi( char s[] ) { int ans = 0 , i ; for( i = 0 ; s[i] != '\0' && s[i] >= '0' && s[i] <= '9' ; i++ ) { ans = ans * 10 + (s[i] - '0' ) ; } return ans ; } char* my_itoa( char ans[] , int x ) { int i ; ans[ 5 ] = '\0' ; for( i = 0 ; i < 5 ; i++ ) { int d = x % 10 ; ans[ 4 - i ] = '0' + d ; x /= 10 ; } return ans ; }' ; for( i = 0 ; i < 5 ; i++ ) { int d = x % 10 ; ans[ 4 - i ] = '0' + d ; x /= 10 ; } return ans ; }
課題
my_atoi() については、 (a) 8進数・2進数・16進数で動くように、 (b) より一般的にN進数で動くように、 (c) 小数点を含む値が処理できるように (d) C言語の定数のように先頭の"0x(16進数)","0(8進数)"で 自動的に基数を判別するように、といった改良のいずれかを行うこと。 また、my_itoa については、同様に、(e) 8,2,16進数、(f) N進数、(g) 浮動小数 といったテーマより、それぞれ1つづつを選んで取り組むこととした。
レポートには、プログラム・説明・動作検証(異常動作の検証)・異常動作についての考察 を記載することとする。
課題に取り組んでもらっている中で、関数のプロトタイプ宣言を説明を行う。