- ベストアンサー
整数データの配列から同じ値のデータを削除する関数
- C言語で整数データの配列から同じ値のデータを削除する関数 int remove_same_data(int a[], int size)を作成する。この関数は重複したデータを削除して残った個数(整数)を関数の戻り値として返す。
- 関数内で与えられた整数配列をソートし、重複したデータを削除する方法について説明します。削除された後の配列の要素数を戻り値として返します。
- 与えられた整数配列をソートし、重複したデータを削除する関数を作成します。削除後の配列の要素数を戻り値として返します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
★質問者さんへ。 >ちなみにここまで出来ました。 >下にある途中の1,2,3ができればこのプログラミングができると思うんですが… >分かる方は知恵を貸してください。よろしくお願いします。 ↑ swap_array()…正しい mysort()…正しい remove_same_data()…1.2.3 の通りに処理を記述すればよいだけです。 処理手順は >2はこれを使えばできるらしいのですがなかなかできません。 ↑ これで良いと思います。 ・よってもう正しく重複データを削除できると思います。 何をアドバイスすればよいのでしょうか? 私も『補足要求』しますね。 ・ちなみに remove_same_data() 関数は 1.2.3 の手順どおりに int remove_same_data( int a[], int size ) { int i, j, p; // ソート mysort( a, size ); //ソート済みデータの重複の削除 p = a[0]; //前のデータの記憶 j = 0; //削除するデータ数を数える for ( i = 1 ; i < size ; i++ ){ if( p == a[i] ){ j = j + 1; } else{ a[ i - j ] = a[ i ];//削除するデータ数分前へ p = a[ i ]; } } return size - j; } ↑ で良いでしょう。 ・それでは。また。
その他の回答 (3)
- Mr_tenten
- ベストアンサー率0% (0/2)
下の回答者です。 すみません。自分の勘違いでしたね。 このプログラムで正解です。 申し訳ありませんでした。
- Mr_tenten
- ベストアンサー率0% (0/2)
***** はじめまして ***** >2はこれを使えばできるらしいのですがなかなかできません。 少々細かいところでミスをされているようです。 おそらく実験?的に用意した配列{1,3,3,4,4,5,6,6}を元に実行した結果、1,3,4,5,4と標示されるのではないでしょうか? 重要なのは最後に重複して発見された数字の処理です。このプログラムでは次の値が重複でないときに初めて的確な位置に挿入されるため、最後に重複した文字は正しい位置に挿入されません。 よって示されたプログラムを少々変更する必要があります。 ***** 提示していただいたプログラム ***** for(i=1;i<size;i++){ if(p==a[i]){ j=j+1; } else{ a[i-j]=a[i];//削除するデータ数分前へ p=a[i]; } } ***** 修正したプログラム ***** (見やすくするため、全角のスペースを入力します) for(i=1; i<size; i++){ if(p==a[i]){ j=j+1; if(i == (size - 1)) a[i-j]=a[i]; } else{ a[i-j]=a[i];//削除するデータ数分前へ p=a[i]; } }
- koko_u_
- ベストアンサー率18% (459/2509)
もう出来ておるようにお見受けしますが。