1時間ごとに更新!Amazon.co.jpで今売れている本トップ100   掲示板ランキング



掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.5698

2分探索を使ったプログラム
投稿者---まき(2006/05/07 15:51:02)


入力データを昇順に整列されたデータの正しい位置に追加する関数add_dataを作成し、プログラムを完成させなさい。

[add_dataの仕様]
int add_data(int *data, int data_num, int input_data)
[戻り値]
 追加に成功したとき:SUCCESS
 すでにデータがあるとき:FAIL


自分なりに考えてみましたが、下の通り止まってしまいました。

下のソースの実行結果は1を追加した場合は、1はすでに存在しています。
2を追加した場合、15の後ろに2が表示されます。

2を追加した場合は、1の次に来なくてはいけないのですが・・・。
どうやって、dataに追加したらいいのでしょうか?
恥ずかしいながら、明日提出期限のため、切羽詰まってます。
本当に申し訳ないのですが、今日中に教えて欲しいです。



#inclue <stdio.h>

#define INITIAL_DATA_NUM    (9)
#define MAX_DATA_NUM        (100)
#define INPUT_END      (-1)
#define SUCCESS   (0)
#define FAIL            (-1)

void print_data(int *data, int data_num);
int binary_search(int *data, int data_no, int input_data);
int add_data(int *data, int data_num, int input_data);

int main(void)
{
    int data[MAX_DATA_NUM] = {1, 3, 4, 5, 7, 8, 9, 11, 15};
    int data_num;
    int input_data;
    int i;

    data_num = INITIAL_DATA_NUM;

    while(1){
        print_data(data, data_num);

        printf("追加データ(-1:終了)=");
        scanf("%d", &input_data);

        if (input_data == INPUT_END){
            break;
        }
        
        if (data_num >= MAX_DATA_NUM - 1){
            printf("データ領域がいっぱいです\n");
            break;
        }

        if (add_data(data, data_num, input_data) == SUCCESS){
            data_num++;
        }
        else {
            printf("%dはすでに存在しています\n", input_data);
        }
    }

    printf("終了\n");

    return (0);
}

void print_data(int *data, int data_num)
{
    int i;
    
    printf("data=");
    for (i = 0; i < data_num; i++){
        printf("%d", data[i]);
    }
}

int binary_search(int *data, int data_no, int input_data)
{
    int right;
    int left;
    int center;

    left = 0;
    right = data_no - 1;
    
    do {
        center = (left + right) / 2;
        if (data[center] == input_data){
            return(center);
        }
        else if (data[center] < input_data){
            left = center + 1;
        }
        else {
            right = center - 1;
        }
    } while (left <= right);

    return (-1);
}

int add_data(int *data, int data_num, int input_data)
{
    int i;
    
    i = 0;
    data[data_num] = input_data;
    while (data[i] != input_data){
        i++;
    }
    
    if (i == data_num){
        return (SUCCESS);
    }

    return (FAIL);
}



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:2分探索を使ったプログラム 5699 επιστημη 2006/05/07 17:25:52
<子記事> Re:2分探索を使ったプログラム 5700 RiSK 2006/05/07 22:35:28


No.5699

Re:2分探索を使ったプログラム
投稿者---επιστημη(2006/05/07 17:25:52)


>下のソースの実行結果は1を追加した場合は、1はすでに存在しています。
>2を追加した場合、15の後ろに2が表示されます。

アッタリマエです。add_data内で(binary_searchを呼んで)適切な挿入位置を探していないのだから。



この投稿にコメントする

削除パスワード

No.5700

Re:2分探索を使ったプログラム
投稿者---RiSK(2006/05/07 22:35:28)


苦しんで覚えるC言語掲示板


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧





掲示板提供:(有)リアル・インテグリティ