/* Orderd Array */ #include #define BUFSIZE 256 #define DATANUM 15 /* 配列のサイズ(最大データ数) */ /* 配列データ */ int data[DATANUM] = { 106, 123, 136, 197, 216, 229, 351, 580, 700, 777 }; /* データの個数 */ int datanum = 10; void dispdata(); int inputdata(); int insert( int n ); int search( int n ); int delete( int i ); int minimum(); int maximum(); main() { char buf[BUFSIZE]; int n, i; while(1) { dispdata(); printf("[MENU] i:挿入、s:検索、D,d:削除、I:最小値、A:最大値、c:全消去、q:終了\n"); fgets( buf, BUFSIZE, stdin ); switch( buf[0] ) { case 'i': /* データを挿入 */ if( (i = insert( n = inputdata() )) < 0 ) printf("配列の容量を越えるので挿入できませんでした。\n"); else printf("データ %d を %d 番目に挿入しました。\n", n, i ); break; case 's': /* データを検索 */ if( (i = search( n = inputdata() )) < 0 ) printf("データ %d は見つかりませんでした。\n", n ); else printf("データ %d は %d 番目に見つかりました\n", n, i ); break; case 'D': /* データを削除(idx) */ if( delete( i = inputidx() ) < 0 ) printf("%d 番目のデータは削除できませんでした。\n", i ); else printf("%d 番目のデータを消去しました。\n", i ); break; case 'd': /* データを削除 */ if( (i = search( n = inputdata() )) < 0 ) printf("データ %d は見つかりませんでした。\n", n ); else { if( delete( i ) < 0 ) printf("%d 番目のデータは削除できませんでした。\n", i, n ); else printf("%d 番目のデータ %d を消去しました。\n", i, n ); } break; case 'I': /* 最小値を求める */ if( (i = minimum()) < 0 ) printf("配列が空なので最小値はありません。\n"); else printf("最小値は %d 番目の %d です。\n", i, data[i] ); break; case 'A': /* 最大値を求める */ if( (i = maximum()) < 0 ) printf("配列が空なので最大値はありません。\n"); else printf("最大値は %d 番目の %d です。\n", i, data[i] ); break; case 'c': /* 全データ削除 */ datanum = 0; printf("全てのデータを消去しました。\n"); break; case 'q': case 'Q': /* 終了 */ exit(1); default: continue; } } } /* 全データを表示する関数 */ void dispdata() { int i; for( i = 0; i < datanum; i++ ) printf(" <%2d>", i ); printf("\n"); for( i = 0; i < datanum; i++ ) printf("%5d", data[i] ); printf("\n"); } /* データをキー入力する関数 */ int inputdata() { char buf[BUFSIZE]; int n; do { printf("データを入力して下さい:"); fgets( buf, BUFSIZE, stdin ); } while( sscanf( buf, "%d", &n ) != 1 ); return( n ); } /* インデックスをキー入力する関数 */ int inputidx() { char buf[BUFSIZE]; int n; do { printf("インデックスを入力して下さい:"); fgets( buf, BUFSIZE, stdin ); } while( sscanf( buf, "%d", &n ) != 1 ); return( n ); } /********************************************************************** 完成に向けて作成すべき関数はこの下に集められている。 return( -1 ); 等はその関数が未完成であっても、 コンパイルして他の部分のテストを可能にするためのダミー文 **********************************************************************/ /* 引数で与えられたデータを挿入する関数 挿入できた場合はそのインデックスを返し、 当初の配列のサイズを越えて挿入できない場合は-1を返す (テストは i コマンドで) */ int insert( int n ) { /* さー考えよう! */ return( -1 ); } /* 引数で与えられたデータを二分探索(binary search)で探す関数 見つかったらそのインデックスを返し、見つからなければ-1を返す (テストは s コマンドで) */ int search( int n ) { /* さー考えよう! */ return( -1 ); } /* 引数で与えられたインデックスのデータを消去する関数 削除できない場合は-1を返す (テストは D コマンドで) */ int delete( int i ) { /* さー考えよう! */ return( -1 ); } /* 最小値を求めて、そのインデックスを返す関数 見つからなければ-1を返す (テストは I コマンドで) */ int minimum() { /* さー考えよう! */ return( -1 ); } /* 最大値を求めて、そのインデックスを返す関数 見つからなければ-1を返す (テストは A コマンドで) */ int maximum() { /* さー考えよう! */ return( -1 ); } /* end of oarray0.c */