十進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とはどういう意味があるのでしょうか?
No.1ベストアンサー
- 回答日時:
説明が難しいなあ…伝わる気がしない
配列sに数値が入った状態をイメージする
+が1で
何も無い時が0
-が-1だ。
例として
1 2 - 3 - 4 + 5 - 6 + 7 + 8 9
の時、どんな値が入っているかというと
12
s(1) = 0
s(2) = 0
-3
s(3) = -1
-4
s(4) = -1
+5
s(5) = 1
- 6
s(6) = -1
+7
s(7) = 1
+89
s(8) = 1
s(9) = 0
でs(1)からs(9)までチェックする
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
===========結局のところ、i = 3まではこういう道筋を通ったと言って良い。
LET sign=1
FOR i=1 TO 2
LET num=10*num+i
NEXT i
REM numは12,signは1 sum は 0
REM numは次の符号が出てくるまでの数の絶対値を作るために貯めておく場所で
REM signはその数値の符号。
REM sumは今までの計算結果。以下、これまでの数値に、signとnumの積を足している。その時、次の数値の符号をsignに代入している
FOR i=3 TO 3
LET sum=sum+sign*num
LET sign=s(i)
LET num=i
NEXT i
360-420行目は次のsの組み合わせを求めるためにくり上がりをやっているんだけど、
3進数の代わりに、-1 0 1でやっているから余計に分かりにくくなっている気がする
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 順列をランダムに発生するプログラム 1 2022/11/16 12:16
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- UNIX・Linux 次の要件を満たすにはどのように修正したらよろしいでしょうか 1 2022/11/24 20:57
- Visual Basic(VBA) エクセル マクロ(A1:A10)までの中で一番多く出た数字をB10に表示 6 2023/04/25 17:01
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Excel(エクセル) vba 「Nextに対するForが見当たりません」のエラーが発生する原因 1 2022/10/21 15:46
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
for文の中にswitch文はいれられ...
-
C言語 数字以外を入力させない...
-
c言語for文
-
#if 1 #elseの意味について
-
c言語で平均をだす
-
n個からm個を取り出すプログ...
-
行列をべき乗させるプログラム
-
scanf関数を用いての加減乗除%...
-
C言語で電卓を作成する。
-
c言語プログラミングで1から100...
-
配列を使って魔方陣
-
C言語 偶数判定
-
配列を関数に渡す方法
-
初心者です。for文、if文を使っ...
-
C言語 重複しない4ケタの乱数...
-
C言語プログラムが理解できなくて…
-
C言語の二分法のプログラムにつ...
-
C言語階乗の総和を求める
-
scanfが実行されません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラー";"が型の前にあり...
-
#if 1 #elseの意味について
-
for文の中にswitch文はいれられ...
-
C言語階乗の総和を求める
-
配列を使って魔方陣
-
C言語 数字以外を入力させない...
-
C言語プログラムが理解できなくて…
-
配列を関数に渡す方法
-
初心者です。for文、if文を使っ...
-
scanf関数を用いての加減乗除%...
-
c言語プログラミングで1から100...
-
getcの改行判定
-
while文について、c言語...
-
プログラミングで二番目に大き...
-
VHDLで、case文とwhen文のどち...
-
C言語で電卓を作成する。
-
C言語の二分法のプログラムにつ...
-
階乗のプログラム!!
-
プログラミングに関して
-
C言語についてですfor ifをつか...
おすすめ情報