課題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
らっくま
記事: 1
登録日時: 7ヶ月前

課題

#1

投稿記事 by らっくま » 7ヶ月前

c言語の課題です。
入力された10個の整数を大きい順に並べ変えて出力するにはどのように書けばいいのですか?
whileやforを使えば良いのはわかったけど、続きがわからないので教えてください。

アバター
usao
記事: 1538
登録日時: 6年前

Re: 課題

#2

投稿記事 by usao » 7ヶ月前

まず【10個の整数が与えられたとき,その中の最大値を見つける処理】は作れるものと仮定する.
ここでは説明を簡単にするため,以下のような関数として実装されるとしよう.

コード:

//引数Valuesには要素数がArraySize個の配列の先頭を指定してね.
//最大値の要素のindexを返すよ.
int IndexOfMaxValue( int *Values, size_t ArraySize )
{ ... }
さて,これができれば,話は簡単.

入力された10個の整数を,配列に格納し,
IndexOfMaxValue( 配列, 10 );
とすれば,10個の整数のうち最大値のindexが得られるのだから,まずはその要素の値を出力すればいい.

次は残り9個のうちの最大値を出力する必要があるが,これは
配列の{先ほど見つけた最大値位置の要素 と 10番目の位置の要素}の値を交換してしまえば,
IndexOfMaxValue( 配列, 9 );
とすることで,
「残りの9個のうちの最大値」として「元々の10個の整数のうち,2番目に小さい値」を特定できる.
その値を出力する.

次は残り8個のうちの最大値を出力する必要があるが,これは
配列の{先ほど見つけた最大値位置の要素 と 9番目の位置の要素}の値を交換してしまえば,
IndexOfMaxValue( 配列, 8 );
とすることで,やはり特定できる.

以下同様に繰り返せばよい.

かずま

Re: 課題

#3

投稿記事 by かずま » 6ヶ月前

らっくま さんが書きました:
7ヶ月前
入力された10個の整数を大きい順に並べ変えて出力するにはどのように書けばいいのですか?
whileやforを使えば良いのはわかったけど、続きがわからないので教えてください。
(1) 10個の整数の入力
(2) 大きい順の並べ替え
(3) 10個の整数の出力
の 3つのうち、(1) と (3) は分かっているということでしょうか?
質問するときは、フォーラム(掲示板)ルールにあるように
どこまで分かっているのかを書きましょう。続きが分からないのなら、
それ以前の分かっている部分のコードを示してください。

(2) については、すでに解法が回答されていますが、これは
選択ソートというものです。
単純ソートには他にも、バブルソートや挿入ソートがあります。
例えば、挿入ソートは次のようなコードになります。

コード:

	for (i = 1; i < 10; i++) {
		t = a[i];
		for (j = i; j > 0 && a[j-1] < t; j--) a[j] = a[j-1];
		a[j] = t;
	}

アバター
usao
記事: 1538
登録日時: 6年前

Re: 課題

#4

投稿記事 by usao » 6ヶ月前

「見つけた最大値を都度配列の後ろ側に持ってく」よりも
「見つけた最大値を都度最小値に書き換えてしまう」の方が簡単で良かったかな?

返信

“C言語何でも質問掲示板” へ戻る