- 締切済み
Basicでのプログラムなのですが・・・
配列変数についてなのですが、 『20個のデータを入力し、大きい順に並べて表示するプログラム。』 なのですが… 言語:【BASIC】 ソフト:【N88】 を使用しています。 とりあえず、 10 DIM A(20) 20 FOR I=1 TO 20 30 INPUT A(I) 40 NEXT I まではわかるのですが、ここから先がわかりません。 ここから先はどのようにすればいいでしょうか。 どなたかご教授いただけると幸いです。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- Oh-Orange
- ベストアンサー率63% (854/1345)
★N88BASIC ですよね。 ・今回の質問はバブルソートのお勉強でしょうね。 20個では多いので4個で説明します。 まず最初に 2、1、4、3 というデータがあるとします。 このデータを大きい順の 4、3、2、1 と並べるには次のように考えます。 ・1回目のスキャン (1)2、1 の大小比較⇒2 が大きい⇒そのまま 2、1、4、3 (2)1、4 の大小比較⇒4 が大きい⇒入れ替え 2、4、1、3 (3)1、3 の大小比較⇒3 が大きい⇒入れ替え 2、4、3、1 ・2回目のスキャン (1)2、4 の大小比較⇒4 が大きい⇒入れ替え 4、2、3、1 (2)2、3 の大小比較⇒3 が大きい⇒入れ替え 4、3、2、1 ・3回目のスキャン (1)4、3 の大小比較⇒4 が大きい⇒そのまま 4、3、2、1 ・これで大きい順のソート完了です。 1回目では3回の比較と入れ替え 2回目では2回の比較と入れ替え 3回目では1回の比較と入れ替え 4回目では0回の比較と入れ替え←ソート完了しているので比較しない。 アルゴリズムはこんな感じです。 ・これを実現するにはループを2重に組みます→回答者 No.1 さんのアドバイスはこれ。 今回は20個のデータなので FOR I=19 TO 1 ←20 ではないよ。注意。 FOR J=1 TO I ←1~『I』変数の数までループ IF A(J) < A(J+1) THEN ←大小比較 ' 'ここに A(J) と A(J+1) のデータを入れ替える処理を記述。 ' ENDIF NEXT J NEXT I 行番号はつけていません。 上記の解説を N88BASIC で記述すると上のように2重のループを組むことになります。 ・以上。
- Cupper
- ベストアンサー率32% (2123/6444)
#2 Cupperです。 どうやらアルゴリズムが分からないという質問のようですね。 >一番数が多いお皿、二番目に数が多いお皿…二十番目に数が多いお皿の 概ね良好です。アルゴリズムの基本はその通りです。 そこで、【何を基準に判断して】「一番数が多いお皿」を【決めた】のか、【何を基準に判断して】「二番目に数が多いお皿」を【決めた】のか・・・ を考えましょう。 ここで、『お皿は一つずつしか見ることができない』という条件をつけて一つ一つの手順を再度考えてみてください。 これは「条件分岐」と「繰り返し処理」の問題(配列も扱ってますね)で、非常に基本的なものです。 決して他人が書いたプログラムのリストを求めてはいけません。 ここはどんなに時間をかけても自力で解決しましょう。
- tetsumyi
- ベストアンサー率25% (1955/7564)
ソートアルゴリズムは検索するとすぐに見つけることができます。 http://www.ics.kagoshima-u.ac.jp/~fuchida/edu/algorithm/sort-algorithm/
- Cupper
- ベストアンサー率32% (2123/6444)
並べ替えを行なうアルゴリズム(考え方・方法)が分からないのか アルゴリズムをプログラムにする書き方が分からないのか 質問からは読み取ることができません。 アルゴリズムにはいろいろな方法があります。 実際に自分が手で並べ替える様子を想像してその手順を書きとめてください。 例: 20個のお皿それぞれに飴をいくつか置いた。 飴の数が多い順にお皿を並べ変えなさい。 これをどういう考え方で並べ替えるのかを描きとめるだけです。 あとはそれをプログラムに書き変えるだけです。 どのようなアルゴリズムを考えたかによってプログラムの方法は異なりますので、まずは考えたアルゴリズムについて補足してください。
- wolf03
- ベストアンサー率22% (241/1086)
ヒント:ループは二重、内側のループが終わる毎に一つずつ確定される。
補足
飴をお皿に置いて、飴の数を比較して、 一番数が多いお皿、二番目に数が多いお皿…二十番目に数が多いお皿の 順に並べて行くと思いますが… 補足とはこのような感じでいいでしょうか?