新しく発言する EXIT インデックスへ
素因数分解

  素因数分解 akiro 2005/02/26 11:18:59 
  これは、 shino 2005/02/26 14:56:31 
   └ありがとうございました.内部関数の説明を... akiro 2005/02/26 15:41:27 

  素因数分解 akiro 2005/02/26 11:18:59  ツリーへ

素因数分解 返事を書く
akiro 2005/02/26 11:18:59
素因数分解のプログラムです.正しく動きません.
15 や 39 などがうまく出来ません.
どなたか,ご指摘いただければ幸いです.

function bunkai$(n)
if n=1 then
LET bunkai$=""
else
if mod(n,2)=0 then
if n=2 then
LET bunkai$=str$(2)
else
LET bunkai$=str$(2)&"*"&bunkai$(n/2)
end if
else
for i=3 to n step 2
if mod(n,i)=0 then
if n=i then
let bunkai$=str$(i)
else
let bunkai$=str$(i)&"*"&bunkai$(n/i)
end if
exit for
end if
next i
end if
end if
end function

input n
do while n<>0
print bunkai$(n)
input n
loop
END

  これは、 shino 2005/02/26 14:56:31  ツリーへ

Re: 素因数分解 返事を書く
shino 2005/02/26 14:56:31
これは、
Function bunkai$ が内部関数であるために、
カウンタ i が再起呼び出しで変更されてしまうことが原因です。
ステップ実行でiの値を確認してみてください。
17行目 let bunkai$=str$(i)&"*"&bunkai$(n/i)
の前後に PRINT i を入れるとわかりやすいです。

ですから、bunkai$を外部関数として定義すればOKです。
以下にプログラムを示します。

DECLARE EXTERNAL FUNCTION bunkai$ ! 外部関数
DECLARE NUMERIC n
SET ECHO "off"

DO
INPUT PROMPT " 素因数分解する数を入力(0入力で終了)":n
IF( n > 0 )THEN
PRINT STR$(n);" = ";bunkai$(n)
ELSE
EXIT DO
END IF
LOOP

END

EXTERNAL FUNCTION bunkai$(n)
DECLARE NUMERIC i
IF( n = 1 )THEN
LET bunkai$ = ""
ELSE
IF( MOD(n,2) = 0 )THEN
IF( n = 2 )THEN
LET bunkai$ = STR$(2)
ELSE
LET bunkai$ = STR$(2) & " * " & bunkai$(n/2)
END IF
ELSE
FOR i=3 TO n STEP 2
IF( MOD(n,i) = 0 )THEN
IF( n = i )THEN
LET bunkai$ = STR$(i)
ELSE
LET bunkai$ = STR$(i) & " * " & bunkai$(n/i)
END IF
EXIT FOR
END IF
NEXT i
END IF
END IF
END FUNCTION

   └ありがとうございました.内部関数の説明を... akiro 2005/02/26 15:41:27  ツリーへ

Re: これは、 返事を書く
akiro 2005/02/26 15:41:27
ありがとうございました.内部関数の説明をしっかり理解していなかったためです.引数のみ独立していると書かれていました.
プログラムの修正もしていただいて本当に助かりました.


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。