このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1320365280/92
#  [1] 授業単元:C言語 
#  [2] 問題文:ttp://www1.axfc.net/uploader/Sc/so/290413 
#  
#  数字の文字列を 1文字ずつ整数値に変換するプログラムを作成せよ.
#  (例)文字列"12345" → 5つの整数値 1, 2, 3, 4, 5
#  
#  ただし,次の手順に沿って作成せよ 
#  
#  手順1.数字を数値に変換する関数 char_to_intの作成 
#  
#  数字1文字を数値に変換する(文字'1'であれば整数値1に変換する)関数char_to_int
#  を作成せよ.ただし,引数として 1文字を値渡しで渡し,戻り値は変換後の数値とする.
#  また,数字以外の文字が渡された場合は戻り値を‐1とする. 
#  
#  作成した関数 char_to_intが正常に動作するかどうかは次のmain関数を使って確認すること. 
#  
#  int main(void) 
#  {
#  char a = '2'; 
#  char b = '5'; 
#  char c = 'A'; 
#  
#  printf("%c, %d, %d\n", a, (int)a, char_to_int(a)); 
#  printf("%c, %d, %d\n", b, (int)b, char_to_int(b)); 
#  printf("%c, %d, %d\n", c, (int)c, char_to_int(c)); 
#  
#  
#  return 0; 
#  } 
#  
#  
#  実行結果 
#  2, 50, 2 
#  5, 53, 5 
#  A, 65, ‐1 
#  
#  
#  
#  手順2. 数字の文字列を 1文字ずつ整数値に変換する関数 str_to_intの作成 
#  
#  数字の文字列を 1文字ずつに分割し,それぞれの文字を整数値に変換して,その整数値を
#  
#  配列に代入して返す関数 str_to_intを作成せよ.ただし,第1引数は文字列が
#  
#  代入されている配列の先頭アドレスを受け取るポインタ変数,第2引数は変換後の整数値を
#  
#  代入する配列の先頭アドレスを受け取るポインタ,第3引数は数値の個数(文字列の長さ)を
#  
#  返すためのポインタ変数とすること.また,関数内ではポインタを使って
#  
#  簡潔かつ高速に文字列を操作すること.この関数内で配列を使用した場合や意味のないポインタの
#  
#  使い方をした場合は,課題を達成したとは認めない.また手順1で作成した char_to_intを
#  
#  有効利用すること
#  
#  
#  関数 str_to_intが正しく動作することを次の main関数を使って確認せよ.
#  ([]は適切に埋めること.)
#  
#  int main(void) 
#  { 
#  char *str1 = "4096"; /*変換対象の文字列 1 */ 
#  char *str2 = "1A5z24"; /*変換対象の文字列 2 */ 
#  
#  int data[20]; /*変換後のデータを代入する配列 */ 
#  int num; /*データ数を代入する変数 */ 
#  int i; 
#  
#  str_to_int([] ,[] ,[]); /*関数呼び出し */ 
#  for(i = 0; i < num; i++) 
#  printf("%d ", data[i]); 
#  printf("\n"); 
#  
#  str_to_int([],[] ,[]); /*関数呼び出し*/ 
#  for(i = 0; i < num; i++) 
#  printf("%d ", data[i]); 
#  printf("\n"); 
#  
#  
#  return 0; 
#  } 
#  
#  
#  (3)実行結果 
#  4 0 9 6 
#  1 ‐1 5 ‐1 2 4 
#  

'数字の文字列を 1文字ずつに分割し,それぞれの文字を整数値に変換して,その整数値をならびとして返す'(_数字の文字列,_整数値ならび) :-
        findall(_整数値,(
                    '数字の文字列を 1文字ずつ整数値に変換する'(_数字の文字列,_整数値)),
                _整数値ならび).

'数字の文字列を 1文字ずつ整数値に変換する'(_数字の文字列,_整数値) :-
        sub_atom(_数字の文字列,_,1,_,_文字としての数字),
        文字としての数字を整数値に変換する(_文字としての数字,_整数値).

文字としての数字を整数値に変換する('0',0) :- !.
文字としての数字を整数値に変換する('1',1) :- !.
文字としての数字を整数値に変換する('2',2) :- !.
文字としての数字を整数値に変換する('3',3) :- !.
文字としての数字を整数値に変換する('4',4) :- !.
文字としての数字を整数値に変換する('5',5) :- !.
文字としての数字を整数値に変換する('6',6) :- !.
文字としての数字を整数値に変換する('7',7) :- !.
文字としての数字を整数値に変換する('8',8) :- !.
文字としての数字を整数値に変換する('9',9) :- !.
文字としての数字を整数値に変換する(_,-1).