素因数分解 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 | |
ありがとうございました.内部関数の説明をしっかり理解していなかったためです.引数のみ独立していると書かれていました. プログラムの修正もしていただいて本当に助かりました. |