新しく発言する EXIT インデックスへ
はじめまして。

  はじめまして。 きょうこ 2005/01/15 00:17:59 
  山中さんが答えているやつですね。 青木太一 2005/01/15 04:07:55 
  │└ここで研究してみてください。2005/01/15 10:17:55 
  ●順位付けを使った並べ換え(RANK) 山中和義 2005/01/17 11:41:45 
  最大値を求めるプログラムを使った並べ換え 山中和義 2005/01/17 11:58:50 
   └青木さん☆哲さん☆山中さん☆ きょうこ 2005/01/18 01:26:06 

  はじめまして。 きょうこ 2005/01/15 00:17:59  ツリーへ

はじめまして。 返事を書く
きょうこ 2005/01/15 00:17:59
いぜん「けいたさん」が質問された
{n個の値a[0]、a[1]・・・、a[n−1]が与えられているとき、配列a[ ]を大きさの順に並び替えた配列b[ ]を作り出すプログラムを書け。}
という問題なんですが、私の通ってる大学でもだされました。
もしよろしければ、この2つ目の問題のプログラム中に使用する名前の型、属性、意味内容、用いたアルゴリズム等も教えていただけないでしょうか?よろしくお願いします。

  山中さんが答えているやつですね。 青木太一 2005/01/15 04:07:55  ツリーへ

Re: はじめまして。 返事を書く
青木太一 2005/01/15 04:07:55
山中さんが答えているやつですね。
http://freebbs.around.ne.jp/article/b/basic/47/gieulr/index.html
「名前の型、属性」
ってどういう意味なんでしょう?
「名前の型」は「変数が数値か文字列か、それぞれの配列」かどうかということかなと想像つくのですが、
「属性」がわかりません。
(十進BASICで「OPTION ARITHMETIC」で指定するものなどのことなのかな...?)

>もしよろしければ
と書いてあるのになんですが、大学の課題であればご自分でやるのが筋だと思います。
「答えはこうこうだと思うが、自信ないので見てくれ」や、「ここまではわかったが、ここがよくわからない」など、理解しようと試みたことを示した方がいいと思いますよ。

答えになってなくてごめんなさい。

  │└ここで研究してみてください。2005/01/15 10:17:55  ツリーへ

Re: 山中さんが答えているやつですね。 返事を書く
2005/01/15 10:17:55
ここで研究してみてください。
http://www.ics.kagoshima-u.ac.jp/~fuchida/edu/algorithm/sort-algorithm/

  ●順位付けを使った並べ換え(RANK) 山中和義 2005/01/17 11:41:45  ツリーへ

Re: はじめまして。 返事を書く
山中和義 2005/01/17 11:41:45
●順位付けを使った並べ換え(RANK)
[ヒント]
処理手順(アルゴリズム)
1.対象数値を一列に並べる。(配列に代入する)
2.並んだ1番目から順に次の作業をする。(FOR J=1 TO 10〜NEXT J)
 2−1.基準の数値を1つ決める。(LET m=A(J))
 2−2.まず、順位を「1番」とする。(LET RANK=1)
 2−3.この数値と残り(自分も含む)の数値を比較して、
     残りの数値が大きければ順位を下げる。
      (FOR i=1 TO 10〜NEXT iの箇所)
3.確認のため印字する。

[プログラム例](2の個所の抜粋)
!順位を算出する
FOR J=1 TO N !1番目から順に
LET m = A(J) !対象の数値を求める
LET RANK = 1 !まず1位とする
FOR i=1 TO N !残りを調べる
IF A(i)>m THEN LET RANK = RANK + 1 !大きければ、順位を下げる
NEXT i
LET B(J) = RANK !その順位を設定する
NEXT J


順位を求めるプログラムで格納場所は分かる。

FOR J=1 TO N !1番目から順に
LET m = A(J) !対象の数値を求める
LET RANK = 1 !まず1位とする
FOR i=1 TO N !残りを調べる
IF A(i)>m THEN LET RANK = RANK + 1 !大きければ、順位を下げる
NEXT i
LET B(RANK) = m !その順位の位置に設定する ※※※※
NEXT J

ただし、同位のものがある場合、それに順位をつける必要がある。
出現順に順位を付けて、格納場所を振り分ける。


[プログラム例]
配列 A(i) 対象の数値。※個数はNとする。
配列 B(i) 対象の数値の順位。※添え字が対応する。
変数 N 個数。※1以上
変数 m 順位を求めるの数値
変数 RANK 順位
変数 SAME 同位の数 ※※※※


FOR J=1 TO N !1番目から順に
LET m = A(J) !対象の数値を求める
LET RANK = 1 !まず、1位とする
LET SAME = 0 !まず、0個とする ※※※※
FOR i=1 TO N !残り(自分も含む)を調べる
IF A(i)>m THEN LET RANK = RANK + 1 !大きければ、順位を下げる
IF i<J AND A(i)=m THEN LET SAME = SAME + 1 !前方の同位の数だけ順位を下げる ※※※※
NEXT i
LET B(RANK+SAME) = m !その順位の位置に設定する ※※※※
NEXT J

  最大値を求めるプログラムを使った並べ換え 山中和義 2005/01/17 11:58:50  ツリーへ

Re: はじめまして。 返事を書く
山中和義 2005/01/17 11:58:50
最大値を求めるプログラムを使った並べ換え
●最大値(MAX)
[ヒント]
まず1番目を最大値と仮定する。
2番目の数値と比較して、2番目が大きければ、それを仮の最大値とする。
3番目、4番目、・・・と全体に対して行う。

[プログラム例]
配列 A(i) 対象の数値。※個数はNとする。
変数 N 個数。※1以上
変数 MAX 最大値
変数 m 仮の最大値


LET m = A(1) !左端を仮の最大値とする
FOR i=2 TO N !残りを調べる
IF A(i)>m THEN !大きければ
LET m = A(i) !仮の最大値の設定する
END IF
NEXT i
LET MAX = m !最大値を得る


●並べ換え(ソート)
交換することで元の配列を並べ換える。先頭(1番目)から順に並べる。

[ヒント]
最大値(m)を先頭(A(1))に移動させる。
これを実現するには、最大値を求めるプログラムを使う。

LET m = A(1) !範囲内の左端を仮の最大値とする
FOR i=2 TO N !残りを調べる
IF A(i)>m THEN !大きければ
LET m = A(i) !仮の最大値の設定する
LET A(i) = A(1) !先頭と交換する ※先頭に移動する ※※※※
LET A(1) = m ※※※※
END IF
NEXT i

このように範囲で、その中で1番大きい値を集めていく。

「1をJに置き換える」と考えて、範囲を狭めていく。


[プログラム例]
配列 A(i) 対象の数値。実行後は大きい順(降順)に並んでいる。※個数はNとする。
変数 N 個数。※1以上
変数 m 仮の最大値
変数 J 範囲を指定する。

*基本選択法
 *見つけたら交換する場合

FOR J=1 TO N-1 !範囲を狭めながら ※※※※
LET m = A(J) !範囲内の左端を仮の最大値とする
FOR i=J+1 TO N !残りを調べる ※※※※
IF A(i)>m THEN !大きければ
LET m = A(i) !仮の最大値の設定する
LET A(i) = A(J) !先頭と交換する ※先頭に移動する ※※※※
LET A(J) = m ※※※※
END IF
NEXT i
NEXT J ※※※※

   └青木さん☆哲さん☆山中さん☆ きょうこ 2005/01/18 01:26:06  ツリーへ

Re: 最大値を求めるプログラムを使った並べ換え 返事を書く
きょうこ 2005/01/18 01:26:06
青木さん☆哲さん☆山中さん☆
お返事ありがとうございます!!
私はパソコンの知識が本当になくて・・。
でも皆様のご協力により、少しずつ理解できてると思います。
本当にありがとうございます。


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。