ソースファイル分割

 投稿者:Bsitumonn  投稿日:2020年 6月15日(月)17時51分15秒
  C言語のように、十進BASICでソースファイルを分割し、ソースファイルAで用意した配列に対して、ソースファイルBでその要素を検査(行列の階数を調べる)ことはできないのでしょうか?
できるかできないかお返事お願いします。
下に自分の作ったhakidasi.BASからkaidan.BASが呼び出せるか試した、2つのソースファイルを掲載します。


!hakidasi.BAS

REM SET ZONEWIDTH 3

INPUT PROMPT "行の長さ":a
INPUT PROMPT "列の長さ":b

INPUT PROMPT "出力蘭の幅":c
SET ZONEWIDTH  c

DIM hai(a,b)
DIM retubeku(a,1)

FOR i=LBOUND(retubeku,1) TO UBOUND(retubeku,1)

   LET retubeku(i,1)=INT(10*RND)
   PRINT retubeku(i,1),
   PRINT
NEXT i

RANDOMIZE

FOR i=LBOUND(hai,1) TO UBOUND(hai,1)
   FOR j=LBOUND(hai,2) TO UBOUND(hai,2)
      LET hai(i,j)=INT(10*RND)
      REM   PRINT hai(i,j),
   NEXT j
   PRINT
NEXT i


DIM sagyouhai(a,b+1)

FOR i=LBOUND(sagyouhai,1) TO UBOUND(sagyouhai,1)
   FOR j=LBOUND(sagyouhai,2) TO UBOUND(sagyouhai,2)
      IF (j<=b) THEN
         LET sagyouhai(i,j)=hai(i,j)
      ELSE
         LET sagyouhai(i,j)=retubeku(i,1)
      END IF
      PRINT sagyouhai(i,j),
   NEXT j
   PRINT
NEXT i

REM execute "BASIC.EXE" WITH("kaidan.BAS") !別の十進BASICファイルの呼び出し。
REM CALL kaidan.BAS            !別の十進BASICファイルの呼び出し。

END


! kaidan.BAS
PRINT "階段.bas"
END

 

Re: ソースファイル分割

 投稿者:SHIRAISHI Kazuo  投稿日:2020年 6月16日(火)16時57分9秒
  > No.4843[元記事へ]

CのincludeみたいなことをしたいのであればMERGE文が使える可能性があります。
https://decimalbasic.ninja-web.net/BASICHelp/BASICHelp.html
 

Re: ソースファイル分割

 投稿者:Bsitumonn  投稿日:2020年 6月16日(火)23時37分45秒
  SHIRAISHI Kazuoさんへのお返事です。

MERGE文の紹介ありがとうございます。MERGE文をつかったところ、
MERGE文の使用法がわからないので質問します。
kaidan.BASに、retubeku(1,1)=0(retubekuはhakidasi.BASで宣言した配列)と書いて、hakidasi.BASのENDの後、最後尾にMERGE "kaidan.BAS"とかいて、実行すると、retubekuはここにかけません。というエラーがでました。
また、Libraryサブディレクトリの、APISUP1.LIBにある 関数が利用できれば、ソースファイルAの配列をソースファイルBに書いた関数にわたして、処理できると思ったので、
Libraryサブディレクトリの、APISUP1.LIBにある EXTERNAL FUNCTION DWORD$(n)のnに引数を与えて呼び出す方法と、hakidasi.BASの配列をkaidan.BASに渡して、配列の中身を表示する方法をおしえてください。よろしくおねがいします。
 

Re: ソースファイル分割

 投稿者:SHIRAISHI Kazuo  投稿日:2020年 6月17日(水)07時48分26秒
  MERGE文は,翻訳時にテキストを合体させるだけです。
ただし,プログラム単位あるいはモジュールの外に書かなければいけないという制約があるので,実質,プログラム単位あるいはモジュールごとの分割になります。

MERGEされる側の問題でエラーが出る場合,デバッグは容易ではありません。
その部分に読み込むべきテキストを合体させてテストしてください。

http://hp.vector.co.jp/authors/VA008683/

 

Re: ソースファイル分割

 投稿者:しばっち  投稿日:2020年 6月17日(水)19時28分28秒
  > No.4843[元記事へ]

Bsitumonnさんへのお返事です。


もしかして、下記のようなプログラムのことではないでしょうか?
--------------------------------------------------------------
                       example.bas


RANDOMIZE
LET N=100
DIM A(N)
FOR I=1 TO N
   LET A(I)=INT(RND*1000)
NEXT I
CHAIN "test.bas" WITH (N,A)
END
--------------------------------------------------------------
                     test.bas


PROGRAM SAMPLE(N,A())
FOR I=1 TO N
   PRINT A(I)
NEXT I
END
 

Re: ソースファイル分割

 投稿者:Bsitumonn  投稿日:2020年 6月18日(木)04時13分37秒
  > No.4847[元記事へ]

しばっちさんへのお返事です。

ソースファイルの紹介ありがとうございます。コピーしてファイル名を少し変更し実行したところ
test.BASのPROGRAM文でextype4301 引数の個数の過不足や型の不一致がおこりました。
(N=100とDebugウィンドウに表示はされた。)
PROGRAM文のあとを、test.BASにしてみたり、test.BAS側の変数名を変えてみたりしましたが、回避できません。
よろしければ回避方法を教えてください。
 

Re: ソースファイル分割

 投稿者:SHIRAISHI Kazuo  投稿日:2020年 6月18日(木)07時42分36秒
  > No.4848[元記事へ]

CHAIN文やEXECUTE文を用いるとき引数がWindowsのコマンドラインを通じて渡されることに留意してください。

https://support.microsoft.com/ja-jp/help/2823587

http://hp.vector.co.jp/authors/VA008683/

 

Re: ソースファイル分割

 投稿者:しばっち  投稿日:2020年 6月18日(木)19時44分38秒
  > No.4848[元記事へ]

Bsitumonnさんへのお返事です。

> test.BASのPROGRAM文でextype4301 引数の個数の過不足や型の不一致がおこりました。
> (N=100とDebugウィンドウに表示はされた。)
> PROGRAM文のあとを、test.BASにしてみたり、test.BAS側の変数名を変えてみたりしましたが、回避できません。
> よろしければ回避方法を教えてください。


こちらでは問題なかったので試してみました。
2進モード、複素数モード以外ではおっしゃる通りのエラーが出るようですね。

逆に2進モード、複素数モードではN=100000でも問題なく動きました。

Lazarus版十進BASICでも同様な現象が見られましたので
十進BASIC側のバグにも思われますが、そういう仕様なのかもしれません。

いつもは2進モードで実行しているので気が付きませんでした。


P.S

初期起動モード設定をBASIC.INIに記述して起動モードを10進モードから他へ変更できるようにできませんか?
10進モードはほとんど使用していません。


P.S

DWORD$関数は既にシステムに組み込まれていますので最新版をご使用ならAPISUP1.LIBは必要はありません。
(※Windows版十進BASIC ver7.8.5.4を使用)

OPTION CHARACTER BYTE
LET A$=DWORD$(12345678)
DIM S(4)
FOR I=1 TO 4
   LET S(I)=ORD(A$(I:I))
   PRINT S(I);
NEXT I
PRINT
PRINT S(1)+S(2)*256+S(3)*256^2+S(4)*256^3
END
 

Re: ソースファイル分割

 投稿者:SHIRAISHI Kazuo  投稿日:2020年 6月19日(金)07時24分2秒
  > No.4850[元記事へ]

CHAIN文はバグのようです。
2進モード,複素数モードで正しく動くという情報でバグの所在が絞られました。
 

Re: ソースファイル分割

 投稿者:SHIRAISHI Kazuo  投稿日:2020年 6月19日(金)16時22分40秒
  > No.4850[元記事へ]

しばっちさんへのお返事です。

> 初期起動モード設定をBASIC.INIに記述して起動モードを10進モードから他へ変更できるようにできませんか?
BASIC.iniの[frame]セクションに
OptionArithmetic=2
を書くと2進モードで起動するようにします。
モードの番号は
十進       0
十進1000桁 1
2進        2
複素数   3
有理数   4
です。

http://hp.vector.co.jp/authors/VA008683/

 

Re: ソースファイル分割

 投稿者:Bsitumonn  投稿日:2020年 6月20日(土)20時18分0秒
  > No.4852[元記事へ]

SHIRAISHI Kazuoさんへのお返事です。

いろいろ教えていただきありがとうございました。
 

戻る