- 締切済み
アルゴリズムの流れ図
いつもお世話になってます。アルゴリズムの流れ図の中でいくつかどう処理されているのか分からない箇所がありますので、どなたか教えて頂きたいです。 (1)ループの中で、値が0とかマイナスになるときは増分にあたる所はやらないでいいのですか。 (2)入力文字(入力位置+2)→文字数と書いてあって、その後に文字数-1→文字数ってなっている時、入力文字(入力位置+2)が5(4)だったら文字数に入る値は何になりますか。またそのアルゴリズムの書いてある参考書の隣のページのアルゴリズムの様子が書いてあるのから察すると文字数=4みたいですが、じゃあなんで入力文字(入力位置+2)→文字数を入力位置+2→文字数にしないのですか。 (3)定義済み処理(サブルーチン)Xの中にまたサブルーチンXが入っているときはその値を持ってまた最初に戻ればいいんですか。アルゴリズムの様子の所に書いてある入口、出口とはなんですか。 以上1つでも構いませんので宜しくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- Eririka
- ベストアンサー率33% (2/6)
配列番号と中の値との間には、 関連が御座いません。
(QSORT(始,終)) ・・・・弐 | ・------Aへ(Bへ) ・ ∥QSORT(始,終)∥ ・・・・参 (B) | C ・ ・←-----A ・ (同上処理) ∥QSORT(始,終)∥ ・・・・四 貴方説ですと、“戻っている”のではなく“飛んでる”んですね。 Aに抜けた時に抜ける前の結果値が反映されてますか? 処理が抜けた(戻った)時にまず (B)へ移動しここでたとえば 1.格納配列変数[インデックス]=データ (戻り値は整列済みデータと対応インデックス値) 2.ネストカウンタ=ネストカウンタ-1 3.カウンタ>0 なら 1へ、それ以外は通常処理のCに続く 四でも同要領処理をします。
<追記> >2個目のサブルーチンの出力値はどこに返すのですか? ネスト毎、最終ネスト(つまりネスティングクリア)いずれも QSORT の次の処理の時点で返されてることになります。 抽象図なため割愛されているかもしれませんが、 サブルーチンは戻り値を取りませんから、おそらく呼び出し先の ルーチンでポインタ変数等を使い代入し呼び出し元では返り後に データポインタ(結果が格納)を参照するという処理概念が 妥当だと思いますよ。
なるほど!、図で把握できました!! (はじめ) | | 1→始 | | 件数→終 | | ∥QSORT(始,終)∥ ←サブルーチンのつもり・・・壱 | (おわり) の隣に (QSORT(始,終)) ・・・・弐 | ・ ←いろいろ書いてある ・ 初期化:始=ピボット値-1,終=ピボット値+1 ・ 比較 <始=1、終=ソートデータ数> となったら サブルーチンを1ネスト分、返す。 ・・・のような処理かと思います。 ∥QSORT(始,終)∥ ・・・・参 | ・ ・ ←いろいろ書いてある ・ (同上処理) ∥QSORT(始,終)∥ つまり未整列データのソートを弐のスコープで処理します。 参からがピボットの左辺、右辺のそれぞれをピボット打ちして 同処理のソート、つまり弐のルーチンを呼び出します。 四、五があったとしてもデータ数に整合させているだけですから 同じことです。 結果として参が終わったらそのまま1つ下の次の QSORT を 呼び出せばいい訳です。 流れとしては、 1.壱から弐を呼び出す 2.弐のスコープで始めの全体のソート開始 3.弐のスコープから弐を呼び出す。 ※ソート分繰り返し 4.比較データがなくなったら弐から以前の呼び出し元の弐の QSORT の次へ戻りますがネストしているのでネスティングを クリア(3回ネストしたらスタックを3つインクリメント) して通常通り次の参へいきます。 5.参で切り詰めたデータにピボットを打ちソート対象を 3 と 同じ要領で参スコープから弐を呼び出します。 6.4と同じ要領でネストから帰ると参の QSOURT の次の命令へ 続きます・ 7.5,6の要領であとに続く QSORT を呼び出します。 私見寄りですみません!!
(1) やってはいけないのではなくブレイクポイントの便宜上で やる必要がないのです。 これはアセンブラをやれば解りますが、比較では ゼロフラグ、キャリーフラグを参照するスタイルがスマートなため C言語でも適用されているものと思われます。 (2) Cアルゴリズムは関数が依存するものです。 f(x)=y 形式の数学的概念が適用されているのではないですか? つまり“入力文字(入力位置+2)→文字数” とは、シソーラスのよるもので 入力文字と言う目的対象における、入力位置+2 の実体を参照して 文字数に反映させているのではないでしょうか? (3) 第2層サブルーチンに入るコール直前、ここが入り口です。 第2層サブルーチンが出力値を返しコール直前ポイントの 次が出口です。 最初に戻る必要はありません、と言うよりしてはいけません。
補足
ありがとうございます。情報処理を独学で勉強していて、この間初級シスアドとったばかりなので、言葉が難しかったのですが(1)(2)は結論だけ分かったので解決です。 (3)なのですが、第2層は2個目のって思ってよいのですよね?2個目のサブルーチンの出力値はどこに返すのですか?ちなみに参考書ではクイックソートのアルゴリズムが書いてあり、 (はじめ) | | 1→始 | | 件数→終 | | ∥QSORT(始,終)∥ ←サブルーチンのつもり・・・壱 | (おわり) の隣に (QSORT(始,終)) ・・・・弐 | ・ ←いろいろ書いてある ・ ・ ∥QSORT(始,終)∥ ・・・・参 | ・ ・ ←いろいろ書いてある ・ ∥QSORT(始,終)∥ ・ となっていて壱から弐にいって参まできたらどうすればいいか分からないので、教えてもらえると非常にありがたいです。よろしくお願いします。
補足
う゜~言葉が難しいのか、文章読解力がないのかいまいち理解できてないようです。同じところでつまづいています。 (QSORT(始,終)) ・・・・弐 | ・------| ・ | ∥QSORT(始,終)∥ | ・・・・参 | | ・ | ・←ーーーーーー ・ (同上処理) ∥QSORT(始,終)∥ ・・・・四 何回か参弐参弐参弐・・とやってるうちに分岐して参をとばして、下にいってから参考書と値が合わなくなるのですが、これだけで分かりますか。