• ベストアンサー

数学の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文とも繰り返すということなのでしょうか?  分かってる方にとってはくだらない質問と思いますが、どうか教えてください。  お願いします。

noname#2746
noname#2746

質問者が選んだベストアンサー

  • ベストアンサー
  • itohh
  • ベストアンサー率45% (210/459)
回答No.4

こんにちは。itohhといいます。 解説すると以下のようになります。 >10 INPUT ”データ数”;N Nにキー入力された数値が入ります。 >20 DIM A(N) 上記で入力されたN分だけ配列を確保します。 >30 FOR K=1 TO N >40 INPUT ”データ”;A(K) >50 NEXT K Kを1からNまで1ずつ増やして行きます。 そして、KがNになるまで40行を実行します。 (配列AのK番目にキー入力された値を代入する) >60 FOR K=1 TO N >70 I=N+1-K >80 PRINT A(I); >90 NEXT K Kを1からNまで1ずつ増やして行きます。 そして、KがNになるまで70行と80行を実行します。 この場合、IにはNから1まで減算された値が入ります。そして、I番目の 配列Aの値をプリントします。 つまり、40行で入力された値を逆の順番にプリントすると言うことです。 ここは、もっと簡単に出来ますよ。 >60 FOR K=N TO 1 STEP -1 >80 PRINT A(K); >90 NEXT K KをNから1まで1ずつ減らして行きます。 これでも同じ結果がプリントできると思います。 100 END プログラムを終了します。 素のBASICは久々なので文法的に間違っているかもしれないところは指摘できません。 こんなところでいいでしょうか?

noname#2746
質問者

お礼

めちゃ詳しいご回答ありがとうございます! おかげで助かりました。まだまだ分からないことがたくさん出てくると思うのですが、また教えてくださいね!ホントご回答ありがとうございました。

その他の回答 (4)

  • itohh
  • ベストアンサー率45% (210/459)
回答No.5

こんにちは。itohhといいます。 すみません、回答がbrogieさんとダブってしまいました。 アドバイスを書いている間に先を越されてしまいました。(^_^;

  • brogie
  • ベストアンサー率33% (131/392)
回答No.3

回答は、k_ebaさんが書かれていますが、蛇足ですが書かせてください。 10行目で、例えば、5と入れると、 20行目で、A(1)、A(2)、A(3)、A(4)、A(5)という入れ物が出来ます(本当はA(0)も出来ています、しかも、メモリ上に連続に出来ます)。 40行目で、Kが1のとき、A(1)に値が代入されます、 40行目で、Kが2のとき、A(2)に値が代入されます、 ・・・ 40行目で、Kが5のとき、A(5)に値が代入されます。 80 PRINT A(I);の;を削除すると、入力したデータが縦に表示されます。 また、60行以降は次のようにも書くことが出来ます。  60 FOR K=N TO 1 STEP -1  70 '  80 PRINT A(I);  90 NEXT K STEP -1でNから1づつ減らして行きます。 では、頑張りなさい!

noname#2746
質問者

お礼

はい頑張ります!どうもご回答ありがとうございました。助かりました。

  • zoh
  • ベストアンサー率34% (273/789)
回答No.2

> 10行目はデータ数って書いてあって、 > 40行目はデータと書いてあって… 変数Nは「何個のデータを入力するのか」と言う意味で「データ数」と言うことです。変数A(1)~A(K)までが実際の入力されるデータです。 > …この2文とも繰り返すということなのでしょうか? 上記のプログラムではその通りです。ただし、forループ内にif文などがればそれによって実行されない文も出てきますし、goto文があればforループから抜け出します。 じゃあ、がんばって!

noname#2746
質問者

お礼

はい!頑張ります!温かいお言葉と、ご回答感謝です。

noname#2746
質問者

補足

ということは、 まず10行目で、N個のデータを入力すると言っておいて、 20行目で番号付き変数をN個用意して、 3,4,50行目からよく分からないです・・・・。 またまた質問で申し訳ないのですが、教えてください。お願いします。

  • k_eba
  • ベストアンサー率39% (813/2055)
回答No.1

10行目のデータ数は配列の数です 40行目のデータ は配列の中の数です >60行目と90行目は2文挟まっているのですが  はいそうです(何行でも挟まっているの全てです) がんばって下さい。

noname#2746
質問者

お礼

ご回答ありがとうございます。感謝です。助かります。

関連するQ&A

  • 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でのプログラムなのですが・・・

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

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

    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言語に直したいのですがよく分かりません; お願いします@@;

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

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

  • マクロの行列の掛け算ができません

    エクセルでマクロ勉強中の初心者です。 マクロで行列A(3行4列)、行列B(4行2列)の掛け算のプログラム(下記)を作っているのですが 「インデックスが有効範囲にありません」というエラーメッセージが出てしまいます。 エクセルで関数(MMULT)で同様の計算をするときちんと計算できるのですが・・・。 どなたか教えてください。 よろしくお願いいたします。 Sub s1() ' 次元の設定 Dim A(3, 4), B(4, 2), C(3, 2) N1 = 3: N2 = 4: N3 = 3 ' データの入力 (行列AとBの設定) For I = 1 To N1: For J = 1 To N2 A(I, J) = Worksheets("s1").Cells(I, J) Next J: Next I For I = 1 To N2: For J = 1 To N3 B(I, J) = Worksheets("s1").Cells(I, J + 5) Next J: Next I ' ベクトルの内積 For I = 1 To N1 For J = 1 To N3 For K = 1 To N2 C(I, J) = C(I, J) + A(I, K) * B(K, J) Next K Next J Next I ' 結果の出力 For I = 1 To N1 For J = 1 To N3 Worksheets("s1").Cells(I + 6, J + 7) = C(I, J) Next J Next I End Sub

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

     『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の宿題で、複数の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波を合成した波を描く方法が分からない状態です。 どうにも解決できないのでここに質問しました。どなたか分かる方がいたら教えてください。

  • 拡張for文について質問

    以下は、拡張for文と配列に関するソースコードの一部を抜粋したものです。 それを見た上で、私の質問に答えてください。 int[]a={10,5,8,4,3}; for(int n:a){ System.out.print(n+" "); } int[][]a={{1,2},{4,5,6}}; for(int[]n:a){ for(int k:n){ System.out.print(k+" "); } System.out.println(""); } 質問1:何故、前者の配列は、『for(int n:a)』のように[]がついてなくても配列要素が取り出せるのに、後者の多次元配列は『for(int[]n:a){』のように『[]』がついた拡張for文を書いた上で、下にも拡張for文を書いた2重構造でないと配列要素を取り出せないのですか? 後者について『for(int n:a){』の文だけで多次元配列aの要素全て取り出せると思ってました。 因みに、配列変数には配列要素が入ってるのではなくて「参照」が入ってるのはわかってます。 このことと、何か関係があるのか、、?

    • ベストアンサー
    • Java
  • プログラム作成に関して

    配列に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()の読み込みを表すには 出力を表すには どのようにしたらいいのですか? できるだけ詳しく教えてください。よろしくお願いします。

  • n88basicでは動いたのに十進ベーシックではだめでした。どうしてですか?

    10 INPUT a,b 20 IF a<b THEN beep 1,FOR n=1 TO 100000,NEXT n,beep 0 22 IF a<b THEN swap a,b 30 PRINT a/b END n88basicではこのままで動いたのに十進ベーシックでは「ここにNは書けません」とメッセージが出ました(20行)。どうしたらいいですか。

専門家に質問してみよう