• 締切済み

Basicでのプログラムなのですが・・・

配列変数についてなのですが、 『20個のデータを入力し、大きい順に並べて表示するプログラム。』 なのですが… 言語:【BASIC】 ソフト:【N88】 を使用しています。 とりあえず、 10 DIM A(20) 20 FOR I=1 TO 20 30 INPUT A(I) 40 NEXT I まではわかるのですが、ここから先がわかりません。 ここから先はどのようにすればいいでしょうか。 どなたかご教授いただけると幸いです。

みんなの回答

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.5

★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)
回答No.4

#2 Cupperです。 どうやらアルゴリズムが分からないという質問のようですね。 >一番数が多いお皿、二番目に数が多いお皿…二十番目に数が多いお皿の 概ね良好です。アルゴリズムの基本はその通りです。 そこで、【何を基準に判断して】「一番数が多いお皿」を【決めた】のか、【何を基準に判断して】「二番目に数が多いお皿」を【決めた】のか・・・ を考えましょう。 ここで、『お皿は一つずつしか見ることができない』という条件をつけて一つ一つの手順を再度考えてみてください。 これは「条件分岐」と「繰り返し処理」の問題(配列も扱ってますね)で、非常に基本的なものです。 決して他人が書いたプログラムのリストを求めてはいけません。 ここはどんなに時間をかけても自力で解決しましょう。

  • tetsumyi
  • ベストアンサー率26% (1854/7079)
回答No.3

ソートアルゴリズムは検索するとすぐに見つけることができます。 http://www.ics.kagoshima-u.ac.jp/~fuchida/edu/algorithm/sort-algorithm/

  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.2

並べ替えを行なうアルゴリズム(考え方・方法)が分からないのか アルゴリズムをプログラムにする書き方が分からないのか 質問からは読み取ることができません。 アルゴリズムにはいろいろな方法があります。 実際に自分が手で並べ替える様子を想像してその手順を書きとめてください。  例:   20個のお皿それぞれに飴をいくつか置いた。   飴の数が多い順にお皿を並べ変えなさい。 これをどういう考え方で並べ替えるのかを描きとめるだけです。 あとはそれをプログラムに書き変えるだけです。 どのようなアルゴリズムを考えたかによってプログラムの方法は異なりますので、まずは考えたアルゴリズムについて補足してください。

azz12qefwf
質問者

補足

飴をお皿に置いて、飴の数を比較して、 一番数が多いお皿、二番目に数が多いお皿…二十番目に数が多いお皿の 順に並べて行くと思いますが… 補足とはこのような感じでいいでしょうか?

  • wolf03
  • ベストアンサー率22% (241/1086)
回答No.1

ヒント:ループは二重、内側のループが終わる毎に一つずつ確定される。

関連するQ&A

  • プログラムの見本を示してください!!

    数学プログラムの授業をしています。:プログラム言語は「Basic」です。 今から問題と、少しやれたものについては、プログラムを記してみました。 問題の最後の 「※」部分が質問したいところです。ない場合は、何もわからないところです。 (1)DIMを用いて 5つの値をキーボードから入力して、そのうち最大の値を表示するプログラム ※90行目以降の「最大値」の表示の仕方がいまいちわかりません。   10:DIM (5) 20:FOR I=0 TO 4 30:INPUT I 40:NEXT I 50:S=0 60:FOR L=0 TO 4 70:S=S+A 80:NEXT L 90:PRINT ??? (2)FOR,NEXT分を使い、 S=2+(2+3)+(2+3+4)+ ........+(2+4+5+6+7+8+9+10) の計算をして Sを表示するプログラムを作りたい。 以上お願いいたします。

  • BASICからC言語に

    BASICで for I=1 to 5:line input #2,w$:next I line input #2,COMMENT$ と書かれているプログラムをC言語に書き直したいのですがどのようにしたらいいのでしょうか?

  • 数学のBasicなのですが・・。

     数学のコンピューターを独学でやり始めたのですが、分からないことがたくさんあって、頼れる人がいなくて質問したのですが、  配列変数とかいうのがよく分からなくて、   DIM 変数名(n)  っていうのは、番号つき変数を0からn番まで用意するということは分かりました。  ○配列変数→大量のデータを一気に出力という題目のところがありまして、  ■N個の数値を入力して、逆の順序で出力するプログラム  10 INPUT ”データ数”;N  20 DIM A(N)  30 FOR K=1 TO N  40 INPUT ”データ”;A(K)  50 NEXT K  60 FOR K=1 TO N  70 I=N+1-K  80 PRINT A(I);  90 NEXT K  100 END  で まず、 10行目はデータ数って書いてあって、40行目はデータと書いてあって、その違いが分かりません。    それとFOR~NEXT文は挟まった動作を繰り返すんですよね!?  で、60行目と90行目は2文挟まっているのですが、この2文とも繰り返すということなのでしょうか?  分かってる方にとってはくだらない質問と思いますが、どうか教えてください。  お願いします。

  • N88互換BASICで「メッセージの定義されてないエラーです」と出ます

    N88互換BASICで「メッセージの定義されてないエラーです」と出ます… 最近プログラミングを始めた初心者です。 プログラムでエラーが出て困っています、どこが問題なのか改善方法を教えてください。 10 DIM A(100,100,100) 20 INPUT "B=";B 40 FOR i=1 to 100 step 1 50 FOR j=1 to 100 step 1 60 FOR k=1 to 100 step 1 70 A(i,j,k)=B 80 print A(i,j,k) 90 NEXT k 100 NEXT j 110 NEXT i こんな感じのものです。 配列変数を作って、Bの数値を全ての配列変数に代入したいです。 宜しくお願致します。

  • BASICでの波形合成

    学校でのBASICの宿題で、複数のSIN波を合成する問題で 100 CLS 3:LINE(0,240)-(640,240),7 110 INPUT"基本波の周期は";C 120 INPUT"基本波の振幅は";W 130 INPUT"基本波の移送は";F 140 INPUT"第何倍音まで計算する";N:DIM A(N),B(N) 150 FOR I=1 TO N 160 PRINT I;:INPUT "番目の倍音の振幅は";A(I) 170 PRINT I;:INPUT "番目の倍音の移送は";B(I) 180 NEXT I 190 FOR K=0 TO 360/C*2*3.14159# STEP 3.14159#/90 200 X=C*K-F:Y=-(W*SIN(K))+240:LINE-(X,Y),4 210 NEXT K 220 FOR G=1 TO N:PSET(0,240),3 230 FOR H=0 TO 360/C*2*3.14159# STEP 3.14159#/90 240 X=C/(G+1)*H-B(G):Y=-((A(G))*SIN(H))+240:LINE-(X,Y),3 250 NEXT H,G ここで描いたSIN波を合成した波を描く方法が分からない状態です。 どうにも解決できないのでここに質問しました。どなたか分かる方がいたら教えてください。

  • プログラムの意味がわからなくて困っています

    こんにちは。以下のプログラムの意味がわからなくて困っています。分数q/p(p、qはともに正の整数)に関係するもので、3/13を入力したときの出力と、配列R()がどんな変化をしていくかを教えてください。 100 option base 0 110 dim A(1000) 120 dim R(999) 130 let N=1000 140 for I=0 to N-1 150 let R(I)=0 160 Next I 170 do 180 print"分母p="; 190 input P 200 if (P>N) then 210 print"分母は1000以下にしてください” 220 end if 230 loop while(P>N) 240 print"分子q="; 250 input Q 260 let A(0)=int(Q/P) 270 let Q=mod(Q,P) 280 let K=0 290 Do 300 let K=K+1 310 let R(Q)=K 320 let Q=Q*10 330 let A(K)=int(Q/P) 340 let Q=mod(Q,P) 350 loop while (R(Q)=0) 360 print A(0);"."; 370 for I=1 to R(Q)-1 380 print A(I); 390 next I 400 if (R(Q)<K) or (A(K)<>0) then 410 print "{"; 420 for I=R(Q) to K 430 print A(I); 440 next I 450 print"}"; 460 end if 470 end 100から160までで配列Aを1000個、配列Rを999個準備し、配列Rの中身を0にしている。 170から230で分母Pに13を入れ分母が1000以下になることを確認している。1000以上であれば、1000以下になるまでループ内を繰り返す。 240以下で分子を入れているようですが、ここからよくわからなくなってしまいました。 よろしくお願いします。  

  • 10進basicにて

    今、10進basicで配列についてやっています。 問題は a(1),a(2)…a(5)を自ら入力して、偶数が少なくとも一つあれば「あり」、全てが奇数ならば「なし」と表示するプログラムを組みなさい。 というものなんです。 一つずつのaの判定ならできるのですが、全部の値を入力した後に、「あり」「なし」の判定をどう出せばいいのかわかりません。 100 dim a(5) 200 for k=1 to5 300 input a(k) この後はどうすればいいのでしょうか。 ご回答お願いします。

  • basicプログラムです。

    100 DIM A(5) 110 FOR J=1 TO 5 120 READ A(J)   130 NEXT J   140 FOR I=1 TO 4  150 LET K=I    160 FOR J=I+1 TO 5  170 IF A(J)<A(K) THEN LET k=J  180 NEXT J    190 LET T=A(I)    200 LET A(I)=A(K)   210 LET A(K)=T    220 FOR J=1 TO 5   230 PRINT A(J);   240 NEXT J     250 PRINT      260 NEXT I     270 DATA 5,3,7,2,1,  280 END このようなプログラムがあります。 いろいろ調べたのですがそれぞれの文の意味と 何を求めるプログラムか教えて下さい。 5つの数の組み合わせで小さい数から順番に4個 かなと思ったのですが???

  • 行列に関するプログラムについて

     『m×n 型行列Aの最大成分と最小成分を捜し、それぞれの行番号と列番号を出力するプログラムを作れ』という問題です。  以下のようにBACICで考えたのですが、うまく行番号と列番号を出力するプログラムを作れません。アドバイスいただければと思います。宜しくお願い致します。 100 INPUT m 110 INPUT n 120 DIM A(m,n) 130 MAT INPUT A 140 FOR i=1 TO m 150 FOR j=1 TO n-1 160 LET s=A(i,j) 170 LET t=A(i,j) 180 IF A(i,j)<A(i,j+1) THEN LET s=A(i,j+1) 190 IF A(i,j)>A(i,j+1) THEN LET t=A(i,j+1) 200 NEXT j 210 NEXT i 220 PRINT "最大成分は";s,"最小成分は";t

  • 十進BASICのプログラムについて

    十進BASICのプログラムについて 小町算のプログラムですが、 100 DIM s(9) 110 FOR i=1 TO 9 120 LET s(i)=-1 130 NEXT i 140 DO 150 LET sum=0 160 LET num=0 170 LET sign=1 180 FOR i=1 TO 9 190 IF s(i)<>0 THEN 200 LET sum=sum+sign*num 210 LET sign=s(i) 220 LET num=i 230 ELSE 240 LET num=10*num+i 250 END IF 260 NEXT i 270 LET sum=sum+sign*num 280 IF sum=100 THEN 290 FOR i=1 TO 9 300 IF s(i)= +1 THEN PRINT " + "; 310 IF s(i)= -1 THEN PRINT " - "; 320 PRINT i; 330 NEXT i 340 PRINT " = 100" 350 END IF 360 LET i=9 370 LET sign=s(i)+1 380 DO WHILE ( sign > 1 ) 390 LET s(i)=-1 400 LET i=i-1 410 LET sign=s(i)+1 420 LOOP 430 LET s(i)=sign 440 LOOP WHILE ( s(1) < 1) 450 END というものですが、このプログラム中にあるsum、num、signとはどういう意味があるのでしょうか?

専門家に質問してみよう