• ベストアンサー

至急教えて下さい。

次のプログラムの内容(できれば詳しく)教えてくれませんか? 結果は分かるのですが、過程がわかりません。 どうかよろしくお願いします。 長いので次のところでプログラムを見てください。http://www.geocities.co.jp/HiTeens-Penguin/9298/a.txt 少しめんどくさいかもしれませんがよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ahsblue
  • ベストアンサー率58% (23/39)
回答No.2

よく学校の授業でありがちなプログラムですね(^^; プログラムの方HPで拝見しました。 メイン処理は、 (1)データ件数入力 (2)実際のデータを乱数で取得するか、ソート済み、1固定にするか入力 (3)現在時刻を取得 (4)ソート処理呼び出し (5)ソート終了時刻からソートにかかった秒数を画面に表示 以上です。 ソート処理(SelectSort)は基本ソートプログラムですね・・ 最小値を検索して順次入れ替えていくものです。 例えば以下のようなデータの場合 a[0]=2, a[1]=3, a[2]=1 最終結果は a[0]=1, a[1]=2, a[2]=3 とならなければなりませんね! そこで、まずa[0]に入れるべき、最小値を探し、次にa[1]に入れるべき値を探すと最後のa[2]には自動的に最大値が入りますね! この入れる部分を次へずらしていくのがiのループです。 次に出てくるjのループですが、最小値を検索する部分です。 minposが最小値の入っている配列番号で、最小値が見つかり次第minposに退避しています。 最小値の検索が終わったところで、値の入れ替えを行っています。 入れ替えを行っているのが、swap()です。 swap()は単純に、a[i]とa[minpos]の値を入れ替えているです。 上記例の場合は、以下のようにswap()が呼ばれ値は次のように変化します。 swap(a,0,2); → a[0]=1, a[1]=3, a[2]=2 swap(a,1,2); → a[0]=1, a[1]=2, a[3]=3 以上が処理の全貌です。。 ちなみに、gamen()は呼び出されない関数のため、無視しておきました~

solvalov
質問者

お礼

詳しい解説ありがとうございます。 役に立ちました。

その他の回答 (1)

  • ro-su
  • ベストアンサー率24% (19/79)
回答No.1

大まかに行きます。長いですがやってることは簡単なので。 このプログラムはグローバル配列を使ったソートの時間比較のプログラムです。フローはこんな感じ。 ソートさせる配列の大きさを指定 ↓(エラーならメッセージ出して終了) 配列に入れる数の方法を指定。 1ならランダムに、2なら順番に、3なら全部1。 ↓(その他数値を入れると配列にゴミデータが残る) それで実際に別関数で、昇順ソート。 ↓(最小値を求めて交換つー方式ですな。) そしてかかった時間を表示する。 って感じです。ですけどこのプログラム、使ってない関数や(gamen)文法的にあれ?と思うところがありますねえ・・・

solvalov
質問者

お礼

ありがとうございます。

関連するQ&A

  • while文がうまく動かない

    a.txt a b c b.txt x y z として次のプログラムを実行 open(A,"<a.txt"); open(B,"<b.txt"); while($a=<A>){ while($b=<B>){ print "$a>>>$b<br>"; } } close(A); close(B); すると実行結果が以下のようになりました。 a>>>x a>>>y a>>>z 上の結果だけではなくてa.txtがbの時cの時も出力されるつもりで書いたのですがなぜかaの時しか出力されません。どなたか理由が分る方いませんか? ちなみに Linux FedoraCore2 perl5 を使用しています。

    • ベストアンサー
    • Perl
  • ディレクトリ内の全ファイルをオープンする方法

    特定のディレクトリ内に存在する全てのファイルを順次オープン・クローズするプログラムを作成したいと思います。 例えば、特定のディレクトリに下記のファイルがあるとします。 A.txt B.txt このときにA.txtをオープンし内容を読み込みクローズし、次にB.txtを同じようにオープンし内容を読み込んでクローズするプログラムです。内容を読み込んで処理する部分は問題なく、また上記のように存在するファイルが決まっていれば何も問題はないのですが、下記の場合にはどのように存在するファイルを探せばよいのかがわかりません。 ・何ファイルあるかわからない ・存在するファイルは必ずテキスト ・ファイル名は決まっていない(perlで問題なく読み込めるファイル長) なお、特定のディレクトリに存在するファイルを順次全て読み込めればよいので、その読み込む順番にこだわりはありません。 どうぞよろしくお願い致します。

    • ベストアンサー
    • Perl
  • エクセルでこのようなことはできますか?

    a1のセルに 10 20 30 のように三つの数字の間を空白で空けた文字列があるとします。 このa1のセルの内容をa1に10、b1に20、c1に30というように簡単に分けることはできますか? (質問した経緯) 今研究で簡単な計算プログラムを使用しています。 計算結果とともに計算に用いたデータ値が二つ表記されます。 ひとつのセルに数字がスペース区切りで三個でており これをグラフ化する時に、いちいち三つのセルに打ち直していて大変面倒なのです。 算出される結果の数も結構あるので簡単にコピペの過程で修正できればなあと思い質問した次第です。

  • DOSのfindstrで「あ」の処理がおかしい?

    DOSのfindstrコマンドについての疑問です。 「a.txt」と「b.txt」が下記のような内容になっています。 ・「a.txt」の中身 あ い う ・「b.txt」の中身 あ い う え お このときに「findstr /g:a.txt b.txt」を実行すると以下のような実行結果になりました。 ------------------------------ C:\>findstr /g:a.txt b.txt い う ------------------------------ 期待する結果としては「あいう」が全部出てくるような気がするのですが。。 原因について解る方教えてください。 ちなみに上記の結果については  Windows2000  WindowsXP で確認しました。 よろしくお願いします。

  • MSDOS フロッピーディスクのDIR表示

     MSDOSのVer6.6を使用しています。  フロッピーディスクの内容をDIRで表示させて、次に2枚目の内容を表示させるために  DIRのコマンドを行うと、最初の1枚目の内容が表示されて2枚目の内容が表示されません。     最初のフロッピーディスクAの内容を    例。 1.text     とすると     次に2枚目のフロッピーディスクBの内容を    例 2.txt     としたとき     フロッピーAを入れる。     a:>dir     a:> 1.txt     フロッピーBを入れる。          a:>dir     a:>1.txt    ⇒ 本来 2.txtが表示されるはずですが表示されない。     とひょうじされる。      修正する方法はありますでしょうか?     これはマザーボードの設定の問題でしょうか?

  • 複数のC言語プログラムが,一つのファイルに書き込み

    2つのプログラムで一つのテキストファイルに書き込むと,エラーが起きてプログラムが停止するんじゃないかなーと思っていましたが,起きませんでした. 検証結果がまた謎であり,知識も足りず,解釈ができないので,力を貸してください. 動作環境は先に言いますと,win7のVC++2010コンパイラです. ---プログラムA FILE *fp = fopen("test.txt", "w"); while(true){ fputc('@', fp); } fclose(fp); ---end ---プログラムB FILE *fp = fopen("test.txt", "w"); while(true){ fputc('_', fp); } fclose(fp); ---end (1)Aを走らせる・・・ファイルには@がたくさん出力されていると思われる. (2)Bを走らせる・・・Aがファイルを操作しているんだから,fopen関数でエラーが出ると思ったが,出なかった.稼働してしまったので,fopenの書き込みモードによってファイルは真っ新になり,「_」が先頭から羅列され始めただろう. (3)Bを停止する・・・「_」の出力は止まっただろうが,プログラムAの方は今何をしているんだろう.元気かな (4)Aを停止する 出力結果すなわちtest.txtの内容は次のようだった. ___________・・・______[NULL][NULL][NULL]・・・[NULL][NULL]@@@@@@@・・・@@@@@@@ これについて質問があります. Q.NULLが出力されているのはどうしてか. Q.AはBが書き込んでいる間,待っていたようだ(Bを停止した後で待ってましたと言わんばかりに@が書き込まれた形跡があるから)が,これは仕様なのか.エラーが出るということを気にする必要はないのか. 余談,予備知識大歓迎です.よろしくお願い致します.

  • 至急!ラジオボタンで選択したファイルをダウンロードするプログラム教えてください

    プログラミング超初心者です。分からないので、教えてください。 いくつかのラジオボタンを作り そのラジオボタンにより選択したファイル(テキストファイル)を ダウンロードするプログラムを 知りたいので、教えてください。 ファイルは 指定したフォルダに全て存在するものとし、1つの項目に対して複数のファイル選択は不可とします。 宜しくお願いします。 例)各々、DLしたいファイルを選択せよ(A,Bともに複数選択不可) Aに関するファイル ○1.txt ○2.txt ○3.txt Bに関するファイル ○4.txt ○5.txt ○6.txt 【2つのファイルをダウンロードする】←ボタン

    • 締切済み
    • PHP
  • VBSでフォルダ内のテキストファイルを全て連結するには?

    フォルダAの中に以下のファイルがあります。  ・1.txt  ・2.txt   ・   ・   ・  ・10.txt これを全て連結させたsum.txtを出力として同じフォルダに入れたいと考えています。 ファイル名を取得してフォルダの中の上から順番にsum.txtへ書き込んでいけばいいのはわかるんですが どのようにプログラムで書いていいのかわかりません。 特にループさせるところがわかりません。 (初心者ですいません) プログラム例をご教授いただければありがたいです。 また、そういった内容を勉強できるサイトがあれば紹介していただけるとありがたいです。 よろしくお願いいたします。

  • 【至急】VBAについて

    今会社でエクセルを作成しています。 使用しているエクセルは2003です。 Ctrl+Fの機能とオートフィルタの機能を足したものを作成しようとしています。  現在 入力している内容は下記になります。 Dim txt As String Dim target As Range Dim rng As Range Dim adr As String 'Set target = Range("A6:L6 & Rows.Count) ' txt = InputBox("検索する内容を記述して下さい。") If txt = "" Then Exit Sub Set rng = target.Find(txt, After:=target(target.Count), LookAt:=xlPart) If rng Is Nothing Then MsgBox "ありません" Exit Sub End If adr = rng.Address Do rng.Activate Set rng = Range("A6:L" & Rows.Count).FindNext(rng) If rng.Address = adr Then MsgBox "終わりに達しました" If MsgBox("続けて調べますか?", vbYesNo) = vbNo Then Exit Do Loop End Sub 項目はA6からL6までに記入されていきます。 一部内容は空白の部分もでますが、A6・B6は必須入力です。 下方向に内容が無限に増えて行きます。 現在エラーで “オブジェクト変数または With ブロック変数が設定されていません”と出てしまっています。 Set rng = target.Find(txt, After:=target(target.Count), LookAt:=xlPart) ここの部分がおかしいように思われます。 ですが、どう直せばいいのか分からず先に進めません… 皆様の知識をお借りできればと思い投稿致しました。 何卒宜しくお願い致します。

  • shell関数について

    毎度、お世話になっています。 現在、C言語で書いた複数のプログラムをBATファイルで処理するように記述しています。VBでその制御を行っているのですが、VBの処理手順として子フォーム(textあり)にデータを書きこんで、ボタンを押すとshellでbatファイルを起動し、バッチファイルの結果として、あるディレクトリにresult.txtが作成され、VBで他の子フォームに読みとらせようとしているのですが、shellだと、実行の終了を待たずに次にいってしまうので、そのバッチファイルの実行処理が終わらず、result.txtの内容を読み込むことができません。 待つようにするにはどうすればよいのでしょうか? ちなみにVBは一週間前にはじめて、自分でも調べてなんとか作ろうとしたのですが、時間がないため、ここに質問させていただきました。なるべく簡単なアルゴリズムで、よろしくお願いします。 VBのプロセス    テキストにデータを書き込む      ↓     ボタン   →        テキストの内容を*.txtとして保存                        ↓                      バッチファイル起動    ↓(ここで右の実行を待たない     ↓     ので読み込むことができない)   C言語で書かれたプログラム実行                        ↓ result.txtを    ←        結果としてresult.txtが出来上がる 読み込んで表示     

専門家に質問してみよう