アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (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でやっているから余計に分かりにくくなっている気がする
    • good
    • 0
この回答へのお礼

ありがとうございました。
がんばって理解してみます。

お礼日時:2010/06/24 11:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!