新しく発言する EXIT インデックスへ
関数について困っています

  関数について困っています ウダーラトゥッ ワニガセカラ 2006/04/19 14:08:03 
  dimS(0tob) 白石 和夫 2006/04/20 08:02:25 
   └返事を遅くなってごめんなさい。そうですね... ウダー 2006/04/22 14:33:09 
    └dimS(0tob) 白石 和夫 2006/04/22 15:36:04 
     └そうすれば ウダー 2006/04/25 11:10:21 
      └外部副プログラム(externalsub-program)と主... 白石 和夫 2006/05/02 10:36:24 
       └280行は注釈になっていますが,正しくは 白石 和夫 2006/05/05 08:02:17 

  関数について困っています ウダーラトゥッ ワニガセカラ 2006/04/19 14:08:03  ツリーへ

関数について困っています 返事を書く
ウダーラトゥッ ワニガセカラ 2006/04/19 14:08:03
このプログラムで配列の値を関数から呼び出したいですが出てこないです。

option base 0

dim a(300)
dim c(300)
dim S(0 to b)

let M=8

call f_readfile(S)

for i=0 to M-1

LET a(i)=(S(2*i)+S(2*i+1))/2

LET c(i)=(S(2*i)-S(2*i+1))/2


print c(i);

LET S(i)=a(i)

next i

end

external sub f_readfile(s())
option base 0
LET b=1000
let f$= "abc.txt" !数値が各行に一つづつ書かれたファイル
open #1 : name f$

dim S(0 to b)
!配列にデータ読み込み
for file_lines=0 to b
input #1, if missing then exit for : S(file_lines)

next file_lines
close #1

end sub

  dimS(0tob) 白石 和夫 2006/04/20 08:02:25  ツリーへ

Re: 関数について困っています 返事を書く
白石 和夫 2006/04/20 08:02:25
dim S(0 to b)
のところで識別名重複のエラーになりませんか?
もし,そうならないようでしたら,お使いのBASICのバージョン番号をお知らせください。

   └返事を遅くなってごめんなさい。そうですね... ウダー 2006/04/22 14:33:09  ツリーへ

Re: dimS(0tob) 返事を書く
ウダー 2006/04/22 14:33:09
返事を遅くなってごめんなさい。そうですね識別名重複のエラーが出てきます。どうやって直すか分かりません。教えてください。

    └dimS(0tob) 白石 和夫 2006/04/22 15:36:04  ツリーへ

Re: 返事を遅くなってごめんなさい。そうですね... 返事を書く
白石 和夫 2006/04/22 15:36:04
dim S(0 to b)
でエラーになれば,BASICシステムは正常に動作しています。
dim S(0 to b)
を削除してください。

     └そうすれば ウダー 2006/04/25 11:10:21  ツリーへ

Re: dimS(0tob) 返事を書く
ウダー 2006/04/25 11:10:21
そうすれば  
input #1, if missing then exit for : S(file_lines) のところで添字が範囲外というエラーがでます。bの値をいろいろ変えましたけどちゃんと動かないです。
念のためにabc.txtファイルの内容も書きます。
3
1
0
4
8
6
9
9
です。よろしくお願いします。

      └外部副プログラム(externalsub-program)と主... 白石 和夫 2006/05/02 10:36:24  ツリーへ

Re: そうすれば 返事を書く
白石 和夫 2006/05/02 10:36:24
外部副プログラム(external sub-program)と主プログラムでは,同じ名前の変数があっても別の変数です。また,仮に,bがPUBLIC変数だとしても,DIM文の実行後にbの値を変更しても配列の大きさは変わりません。
最も単純な解決策は,次のように主プログラムで大き目に配列を宣言して,外部副プログラムでMAT文を実行して配列の大きさを変更することです。
100 option base 0
110 dim a(300)
120 dim c(300)
130 DIM S(0 TO 10000)
140 let M=8
150 CALL f_readfile(S)
160 for i=0 to M-1
170 LET a(i)=(S(2*i)+S(2*i+1))/2
180 LET c(i)=(S(2*i)-S(2*i+1))/2
190 print c(i);
200 LET S(i)=a(i)
210 next i
220 end
230
240 external sub f_readfile(s())
250 option base 0
260 LET b=1000
270 MAT REDIM s(0 TO b)
280 ! let f$= "abc.txt" !数値が各行に一つづつ書かれたファイル
290 OPEN #1 : NAME f$
300 !配列にデータ読み込み
310 for file_lines=0 to b
320 input #1, if missing then exit for : S(file_lines)
330 next file_lines
340 close #1
350 end sub

       └280行は注釈になっていますが,正しくは 白石 和夫 2006/05/05 08:02:17  ツリーへ

Re: 外部副プログラム(externalsub-program)と主... 返事を書く
白石 和夫 2006/05/05 08:02:17
280行は注釈になっていますが,正しくは
280 let f$= "abc.txt" !数値が各行に一つづつ書かれたファイル

です。


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