• ベストアンサー

10進ベーシックの質問

a(1)=1、 a(2n)=a(n) のとき a(4) のプログラムを組みたいのですが、 DIM a(4) LET a(1)=1 LET n=1 DO WHILE n<4 LET a(2n)=a(n) LET n=n+1 LOOP PRINT a(n) END とプログラムしたら、LET a(2n)=a(n)のところで 「Nはここに書けません  )が必要です」と表示されました。 LETにはNを書いてはいけないのですか?それとも私のプログラムが間違っているのですか? 今までにも何度か LETのところで「Nはここに書けません  )が必要です」と表示されたことがあります。 何がおかしいのかぜひ教えてください。

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

  • ベストアンサー
回答No.1

DIM a(4) LET a(1)=1 LET n=1 DO WHILE n < 4 / 2 + 1 REM 1点目。2nという表記が出来ない。2*nと書かないと。 REM 2点目。1点目を直したとしても REM a(2) = 1 REM a(4) = a(2) つまり 1 REM a(6) = a(3) REM という処理が行われるが,a(6)は定義されないためエラーが出る。 REM a(3)の初期値は多分0となっているとは思うが REM 自信ないので自分で値を代入するコードを書いておいて欲しい LET a(2*n)=a(n) LET n=n+1 LOOP PRINT a(4) END

n1079
質問者

お礼

わかりやすいご返答ありがとうございました。

その他の回答 (3)

回答No.4

「Nはここに書けません  )が必要です」が出るのは、a(2n)と書いているからでしょう。 a(2)やa(n)と書くのは問題ありませんが、2nは数字でも変数でもないのでBASICがエラーを出します。 数式の2nは2*nと書かないとだめです。

n1079
質問者

お礼

単純な事でしたね… ご回答、ありがとうございます。 

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

多分、違うと思いますが(かなり想像力をたくましくしてみたので) 正の整数値をとるnに対して関数a(n)の値を求めるプログラムを作りたい。 a(n)は次の条件を満たすものとする。 a(1)=1、 a(2n)=a(n)。 まさか、んなことはないですよねぇ?

n1079
質問者

お礼

ご返答ありがとうございました。

  • info22
  • ベストアンサー率55% (2225/4034)
回答No.2

多分n=3まで行きますのでこのとき a(2n)=a(6)となり 配列宣言 DIM a(4) で宣言した要素数を超過してしまう事が原因かも知れません。 DIM a(6)と配列宣言の要素上限数を6以上に設定してみてください。

n1079
質問者

お礼

わかりました。もう一度やってみます。 ご返答ありがとうございました。

関連するQ&A