最大値選択なんですけれども
このフローチャートの意味がわかりません…ループの始まりと終わりの意味などはわかるのですが、交換や最大値x(k) → w 、x(i) → x(k)、w→ x(i)の部分が何を言いたいのか分らないんです。
宜しくお願いします。
( 開 始 )
 ̄ ̄ ̄│ ̄ ̄ ̄
───┴───
/ 交 換 \
│i =1,2,...,n-1│
└───┬───┘
┌───┴───┐
│ i → k │
└───┬───┘
───┴───
/ 最大値 \
│j=i+1,i+2,..,n│
└───┬───┘
│
/ \
/ \ ≦
(*) …/x(j):x(k)\───┐
\ / │
\ / │
\ / │
│> │
┌───┴───┐ │
│ j → k │ │
└───┬───┘ │
│←─────┘
┌───┴───┐
│ │
\ 最大値 /
───┬───
┌───┴───┐
│ x(k) → w │
│ x(i) → x(k)│
│ w → x(i)│
└───┬───┘
┌───┴───┐
│ │
\ 交 換 /
───┬───
───┴───
( 終 了 )
No.3ベストアンサー
- 回答日時:
No.2です。
i=1から順に追ってみましょう。
1 2 3
4 9 8
初めはk=1、j=2ですので、
k<4>とj<9>の比較です
jの方が大きいので、kはj、つまり2となります。
次は、k=2、j=3ですので、
k<9>とj<8>の比較です
kの方が大きいので何もしません。
そしてループを抜けて、交換します。
x(k)つまりx(2)と、x(i)つまりx(1)の交換です。
1 2 3
9 4 8
同様にしてi=2もやると
1 2 3
9 8 4
となります。
このプログラムですが、交換してる部分を見ると、最大値を選択するだけでなく、大きいもの順に並べ替えるプログラムであると言えます。
フローチャートやループに対する知識もあいまいだったのでかなり悩んでたんですが、漸く分かりました^^;
丁寧に教えて頂き、本当にありがとうございました!
No.2
- 回答日時:
最初の交換のところはループの条件が書いてあります。
iの値が1からn-1までループが続くってことですね。
んで最大値のところは、
jの値がi+1からnまでループが続くってことです。
何故このようなループ条件なのか。
全部で数がn個ありますよね。
数を比較する時、1番目の数と2番目の数、1番目の数と3番目の数・・・という風にしますよね。
これを表しています。
ループに初めてたどり着いた時を考えてみます。
iには1が入ってますよね?
とするとjはi+1ですので、2が入ってます。
iの値はkに代入されてるので、実際には、x(k)とx(j)、つまりx(1)とx(2)、つまりは1番目の数と2番目の数を比較しているわけです。
わかりにくかったらまた言ってください(^^;
ありがとうございます。そこの部分もよく分かりました。
あとはなんというか表現しづらいのですが…i=1~n-1までループすると思うんですが、その際x(j)>x(k)を満たすものはjがkになっていくんですよね?
例えば 4、9、8という列があるとすると
i=1からこの作業をやっていくと、i=1の時x(1)をx(2)に代入、i=2の時x(2)はj→kの処理を受けないのでそのままになりますが、これは9がそのままになるのか、それとも9と交換した4がそのままになるのかどちらでしょう?あまり問題とは関係ないのですが気になってしまって…すみません^^;
No.1
- 回答日時:
2つの値を交換するとき、ついつい
x(i) → x(k)
x(k) → x(i)
としそうになるかもしれません。
しかし、これは間違いです。
具体的な値を使ってやってみるとわかりますが、
2つの値は同じになってしまいます。
そうならないように、片方の値をいったん脇へどけておくための処理が
x(k) → w
です。こうしておくと、x(i)をx(k)に入れることができます。
この瞬間、x(i)とx(k)の値は同じですが、wにx(k)のもともとの値を
保存してありますので、2つの値はちゃんと残っています。
最後に、wに保存してあった値をx(i)に入れれば、
無事に交換が完成します。wはほったらかしにしておいてかまいません。
詳しい回答ありがとうございます。
なるほど交換のところはよく分かりました。
ただ最初の交換のところと最大値のところの意味もよく分かりません。
なにぶんまだこういったことを勉強し始めたばかりなので…
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UWSCの終了の仕方
-
画面を強制的に再描画させる方法
-
エディットボックスのテキスト...
-
CSVファイルの特定の行だけを読...
-
VBA Dir関数でファイルをループ...
-
アクティブセルから、A列最終行...
-
範囲指定したセルを1つずつ飛...
-
VBAで3秒だけ時間を止めたい
-
無限ループの防ぐ方法
-
テキストボックスの名前に変数...
-
DoEventsが必要な理由について
-
ExcelVBA FindNextを使用して条...
-
vb.netからエクセル関数書き込み
-
多重ループの抜けだし方
-
VisualStudioにてモザイクの画...
-
エクセル関数で1〜12の数字がル...
-
vbscriptでIE自動入力(途中で...
-
JSPでのrequest.getParameterに...
-
レインボー色ってどうやって表...
-
DOSコマンドのループ内のTIMEコ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画面を強制的に再描画させる方法
-
DoEventsが必要な理由について
-
UWSCの終了の仕方
-
Escキーを押すと、中断する時と...
-
VBA for i=1 to lastrow
-
vb.netからエクセル関数書き込み
-
GIFアニメをループさせたくない
-
VBAでの一時停止と再開の方法
-
「人を傷つけることは悪いこと...
-
VBAで3秒だけ時間を止めたい
-
DOSコマンドのループ内のTIMEコ...
-
アクティブセルから、A列最終行...
-
CSVファイルの特定の行だけを読...
-
範囲指定したセルを1つずつ飛...
-
ループフリー
-
VBA for文が止まらない
-
null 参照の例外が実行時に発生...
-
vbscriptでIE自動入力(途中で...
-
フラグについて
-
VBA Dir関数でファイルをループ...
おすすめ情報