- ベストアンサー
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はここに書けません )が必要です」と表示されたことがあります。 何がおかしいのかぜひ教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
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
その他の回答 (3)
- JaritenCat
- ベストアンサー率37% (122/322)
「Nはここに書けません )が必要です」が出るのは、a(2n)と書いているからでしょう。 a(2)やa(n)と書くのは問題ありませんが、2nは数字でも変数でもないのでBASICがエラーを出します。 数式の2nは2*nと書かないとだめです。
お礼
単純な事でしたね… ご回答、ありがとうございます。
- fujillin
- ベストアンサー率61% (1594/2576)
多分、違うと思いますが(かなり想像力をたくましくしてみたので) 正の整数値をとるnに対して関数a(n)の値を求めるプログラムを作りたい。 a(n)は次の条件を満たすものとする。 a(1)=1、 a(2n)=a(n)。 まさか、んなことはないですよねぇ?
お礼
ご返答ありがとうございました。
- info22
- ベストアンサー率55% (2225/4034)
多分n=3まで行きますのでこのとき a(2n)=a(6)となり 配列宣言 DIM a(4) で宣言した要素数を超過してしまう事が原因かも知れません。 DIM a(6)と配列宣言の要素上限数を6以上に設定してみてください。
お礼
わかりました。もう一度やってみます。 ご返答ありがとうございました。
お礼
わかりやすいご返答ありがとうございました。