以下、繰り返しのDO文と1次元配列の練習問題を示します。プログラムを作成
して、実行結果を確認すること。ただし、いろいろなレベルの問題が用意され
ています。各人のレベルに合わせて、問題のプログラムを作成すること。
教科書の例題をプログラムして、内容を理解すること。ただし、教科書の解答
のプログラムは、結果をラインプリンターに出力する場合です。皆さんは、ディ
スプレイに結果を出力するため、FORMAT文を書き換える必要があります。それ
は、FORMAT文の括弧の最初の部分でこれはラインプリンターの制御を表します。
2。具体的には以下の部分を書き換
えます。
- 教科書のP.52の
FORMAT(1H1,'NINZU=',I5/
FORMAT('NINZU=',I5/
- 教科書のP.52の
*1H,'HEIKIN NENREI=',F5.1)
*'HEIKIN NENREI=',F5.1)
- 教科書のP.61の
FORMAT(1H1,'HEI',//)
FORMAT('HEI',//)
- 教科書のP.61の
FORMAT(1H ,I5)
FORMAT(I5)
このラインプリンター制御文字に注意しながら、以下の問題を解きなさい。
- 教科書の例題3・1のプログラムを作成しなさい。
- 教科書の例題3・2のプログラムを作成しなさい。
- DO文を利用して、1〜Nまで足し合わせるプログラムを作成しなさい。
- 一次元配列に、
を格納し、それを足し合わせるプロ
グラムを作成しなさい。
ソーティングとは、整列あるいは並び替えのことである3。プログラミングでは、
数値を大きい順、あるいは小さい順に並び替える技法のことを言います。数値
の並び替えは非常に重要な技法で、実際のプログラムではいたるところで使わ
れます。ソーティングでもっと重要なことは、処理速度です。高速な処理を目
指していろいろなアルゴリズムが考えられています。簡単なアルゴリズムを示
しますので、数値の入ったデータを小さい順(昇順)に並び替えなさい。
なお、その前に並び替えるデータの作成方法を示しておきます。以下のプログ
ラムにより、0〜1の乱数4が、配列名DATAに1024個入れられ
る。RAND()が0〜1の実数を発生させる。SRANDにより、初
期値が決まる。この値を変えると発生される乱数が異なる。どんな値を入れて
も良い。
make_rand_data.tex
有名な教科書「NUMERICAL RECIPES in C」によると、これは経験をつんだトラ
ンプ師が使う方法と同じということです。順序がばらばらのトランプを並び替
える場合、
- まず、2枚目のカードを拾い、1枚目と順序関係が正しい位置におく。
- 次に3枚目のカードを拾い、最初の2枚と順序関係の正しい位置にそれを
挿入する。
- 同じことを繰り返す。即ち、枚目のカードを拾い、最初の枚の
カードの順序関係の正しい位置にそれを挿入する。
- 最後のカードを正しい位置に挿入したら、並び替えは完了である。
という操作を行います。
これと同じことを先に示した1024個のデータについて行い、小さい順に並び替
えなさい。ただし、ヒントとしてフローチャートを図に示します。
Shellソート5は1959年
にD.L.Shellが考案した方法で、単純挿入法を改良したものとなっています。
単純挿入法は、隣同士を比較しましたが、Shellソートでは、大きな飛ばしで
比較します。ソートに時間のかかる大ききな数や小さな数は、一気に右や左
に行きます。と飛ばしで比較すると、
と並び替えます。この並び替えには単純挿入法を使います。
そうして、とび幅をどんどん小さく、最後はにすると並び替えは完了
です。このの選び方にこつがあって、小さいほうから
と3の倍数+1とするのが良いそうです。良いというの
は早いと言うことです。最初に実行する一番大きなは、データの個数の半
分以下にします。
Shellソートの手順は、次の通りです。
- 最初の飛び幅を決める。である3倍して1を加えた値が、データ数以下にな
るものを探す。データこ個数の半分以下で最大のを最初の飛び幅と
する。
-
に対して、
を並び替える。
- 次のI=I+1にして、並び替える。
- 次のH=(H-1)/3にして、再度、並び替えを実行する。
単純挿入法のプログラムが出来た人は、このプログラムを書いて、実行させな
さい。
実際のソーティングでは、ヒープソートあるいはクイックソートが使われます。
これらの説明は、この講義のレベルを超えますので、興味のある人は自分で調
べてください。
ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成19年8月20日