• 締切済み

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=1    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 を実行すると 13725 31725 31275 71235 という数字が出てきます。 どうしてこのような結果が出るのか 解説をお願いします。

  • iroh
  • お礼率85% (12/14)

みんなの回答

  • age_momo
  • ベストアンサー率52% (327/622)
回答No.3

どう見ても数学カテじゃないですね。また、何がしたくてこのプログラムを書いたかも抜けてます。なぜ、こうなるかと聞かれても『当たり前』としか答えられません。 と、ひとしきり文句を書いた上で回答します。 昇順ソートをしたかったとして、160から180で最小値の添数を見つけていますね。最初のループでは1が最小ですからk=5になり、次に置き換えがあって表示させると13725になってます。次もK=1から見つけていくとKは絶えずA(x)=1のxを求めてしまいます。最初に最小値を見つけてA(1)に入れたのですから、次はA(2)からA(5)の中で最小値を見つければいいのです。よって150行は LET K=I が正解です。

iroh
質問者

お礼

ほとんど理解不能でした。勉強します。 わざわざありがとうございました。

  • kbannai
  • ベストアンサー率32% (88/268)
回答No.2

150行目のk=1ではなく、k=i+1にしてみたら?

iroh
質問者

お礼

1行ごとに意味がつかめませんので勉強します。

  • gonic
  • ベストアンサー率30% (18/59)
回答No.1

昇順のソートですか? ループのたびに150行でK=1としているせいでしょう。

iroh
質問者

お礼

すみません。私の力ではわかりませんでした。

関連するQ&A

  • 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個 かなと思ったのですが???

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

    こんにちは。以下のプログラムの意味がわからなくて困っています。分数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以下で分子を入れているようですが、ここからよくわからなくなってしまいました。 よろしくお願いします。  

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

     『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

  • 小町算のプログラムについて

    小町算のプログラムについて 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とはどういう意味があるのでしょうか?

  • 十進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とはどういう意味があるのでしょうか?

  • ベーシック、循環小数プログラミング

    0 !q/pを少数点表示する 1 LET X=10 2 DIM a(1 TO 100),b(0 TO 100) 3 INPUT q,p 4 LET b(0)=q 5 LET k=1 6 DO 7 LET a(k)=INT(b(k-1)*X/p) 8 LET b(k)=MOD(b(k-1)*X,p) 9 LET j=0 10 DO UNTIL j=k-1 OR b(j)=b(k) 11 LET j=j+1 12 LOOP 13 IF b(j)=b(k) THEN EXIT DO 14 LET k=k+1 15 LOOP 16 ! 結果の表示 17 PRINT "0."; 18 FOR i=1 TO j 19 PRINT a(i); 20 NEXT i 21 PRINT "{"; 22 FOR i=j+1 TO k 23 PRINT a(i); 24 NEXT i 25 PRINT "}" 26 END 上のプログラミングですが、 10~16、21~26がはっきりと理解できません。 6のdoは15のloopとつながるんですよね? q=3,p=7で考えてみたのですが、 8,9行目で a(1)=4 b(0)=3 b(1)=2 a(2)=2 b(2)=6 a(3)=8 b(3)=4 a(4)=5 b(4)=5 a(5)=7 b(5)=1 a(6)=1 b(6)=3 となり、b(0)=b(6)より、循環小数ということだと考えました。 このb(0)=b(6)の比較は10行目、13行目のどちらでしょうか? また、結果の表示で、17行~20行で、 0.a1a2a3・・と表示することはわかりましたが、循環小数のさいの{}の入れ方(21行~25行)が理解できていません。 私の理解や記入がわかりにくいかもしれませんが、 どなたか解説していただけないでしょうか。 よろしくお願いいたします。

  • プログラム作成に関して

    配列にn個のa(1),a(2),…a(n)という値が与えられているとき、 このn個の値の最小値を求めるプログラムの作成 DIM A(n) LET k=1 FOR i=1 TO n  IF A(i)<A(k) THEN   LET min=A(i)  END IF NEXT i END ※DIM A(n)はn個の配列 minは最小値である。 としたのですが、 A()の読み込みを表すには 出力を表すには どのようにしたらいいのですか? できるだけ詳しく教えてください。よろしくお願いします。

  • 【至急】文字を点滅させる方法は?

    質問します。 下記のプログラムにおいて、 13 PRINT "只今、計算中です。少々お待ち下さい。" 14 PRINT "計算終了後、下記に結果を表示します。" の部分だけを点滅させたいのですが、色が変わる変化しかしません。COLOR 2と書けば点滅するはずですよね? 1 CLS 2 REM 乱数を用いてサイコロ(6面体ダイス)を再現。12000回振って各自がほぼ2000回ずつ出るようなサイコロを目指す。 10 INPUT "乱数系列の値をいくつに設定しますか" ;X 13 PRINT "只今、計算中です。少々お待ち下さい。" 14 PRINT "計算終了後、下記に結果を表示します。" 20 RANDOMIZE X 30 DIM DICE(6) 40 FOR T=1 TO X 50 LET N=1+INT(6*RND) 60 FOR I=1 TO 6 70 IF N=I THEN LET DICE(I)=DICE(I)+1 80 NEXT I 90 NEXT T 100 PRINT 110 FOR J=1 TO 6 120 PRINT J;"の目は"; DICE(J);"回出ました。" 130 NEXT J 140 END よろしくお願いします。

  • 行列の積のプログラム

    n次正方行列X=(xij),Y=(yij)の積XYの(i,j)成分はΣ(k=1,n)xikykjで定義する。これをmin{k∈1,2,…n}(xik+ykj)と変更したとき行列の積を計算するプログラムの作成をしたいです。 ※minXは、Xの中の最小値を意味する。 十進BASICで解きたいのですが、以下のプログラムで間違いがあったら指摘してただけないでしょうか?よろしくお願いします。 INPUT N DIM X(n,n) DIM Y(n,n) DIM Z(n,n) INPUT X(n,n) INPUT Y(n,n) FOR i = 1 TO n  FOR j = 1 TO n   LET Z(i,j) = X(i,1) * Y(1,j)    FOR k = 2 TO n     IF Z(i,j) > X(i,k) * Y(k,j) THEN LET Z(i,j) = X(i,k) * Y(k,j)   NEXT k  NEXT j NEXT i INPUT Z(n,n) END

  • 離散フーリエ変換について

    10 REM dft 20 N=8 30 DIM A(N),B(N),X(N) 40 FOR I=0 TO N-1 50 READ X(1) 60 NEXT I 70 P=6.283/N 80 FOR K=0 TO N-1 90 A(K)=0:B(K)=0 100 FOR J=0 TO N-1 110 A(K) =A(K)+X(j)*COS(P*J*K) 120 B(K) =B(K)-X(J)*SIN(P*J*K) 130 NEXT J 140 NEXT K 150 FOR I=0 TO N-1 160 Y=SQL(A(I)^2+B(I)^2) 170 LPRINT I;:LPRINT USING "###,###";A(I),B(I),Y 180 NEXT I 190 DATA 1,1,1,1,0,0,0,0 このDFTプログラムをC言語に直したいのですがよく分かりません; お願いします@@;