ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月29日(金) 05:40

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 18 件の記事 ]  ページ移動 1 2 次へ
作成者 メッセージ
投稿記事Posted: 2008年6月02日(月) 20:11 
すみません、
以下の、N88BASICのプログラムの動作を確認したいのですが、
デバッグとかできるとよりいいですが。
やさしいハウトゥお願いします。



100 ' --------------------------
110 ' * ヒルベルト曲線 *
120 ' --------------------------
130 '
140 DIM STACK(1000)
150 SP=0
160 '
170 SCREEN 3,0,0,1:CLS 3
180 POINT(240,280)
190 N=4:L=10:ANGLE=90:GOSUB *HILBERT
200 END
210 *HILBERT
220 IF N=0 THEN RETURN
230 ZDEG=ANGLE:GOSUB *TURN
240 GOSUB *PUSH
250 N=N-1:ANGLE=-ANGLE:GOSUB *HILBERT
260 GOSUB *POP
270 ZLENG=L:GOSUB *MOVE
280 ZDEG=-ANGLE:GOSUB *TURN
290 GOSUB *PUSH
300 N=N-1:GOSUB *HILBERT
310 GOSUB *POP
320 ZLENG=L:GOSUB *MOVE
330 GOSUB *PUSH
340 N=N-1:GOSUB *HILBERT
350 GOSUB *POP
360 ZDEG=-ANGLE:GOSUB *TURN
370 ZLENG=L:GOSUB *MOVE
380 GOSUB *PUSH
390 N=N-1:ANGLE=-ANGLE:GOSUB *HILBERT
400 GOSUB *POP
410 ZDEG=ANGLE:GOSUB *TURN
420 RETURN
430 *PUSH
440 STACK(SP)=N:STACK(SP+1)=ANGLE:SP=SP+2
450 RETURN
460 *POP
470 ANGLE=STACK(SP-1):N=STACK(SP-2):SP=SP-2
480 RETURN
490 *MOVE
500 ZX=ZLENG*COS(ZP*3.14159/180)
510 ZY=ZLENG*SIN(ZP*3.14159/180)
520 LINE -STEP(ZX,-ZY)
530 RETURN
540 *TURN
550 ZP=(ZP+ZDEG) MOD 360
560 RETURN


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2008年6月02日(月) 20:35 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
お住まい: 埼玉県東松山市
・先頭に#N88BASICの1文を入れましょう。グラフィック系統の命令語が使えるようになります。
・Screen命令語は使えません。
・起動時には画面が初期化されているので、この場合はCLS文は必要ではありません。
全ての変数は、Dimで宣言してあげる必要があります。
変数にはその型を明示的に指定する必要があります、
コード:
Dim ZX As Double,ZY As Double'実数型
Dim SP As Long'整数型
・行番号を書くことは必須ではありません。
・SIN関数、COS関数はそれぞれSin、Cosと書かないと認識されません。
よく覚えてませんが、MODも同様かもしれません。
・LINE関数には通常、色を指定する必要があります。詳しくはヘルプを見てください。

・デバッグするためには、debug命令語を流れを見る場所の開始位置に書く必要があります。
F2でデバッグ実行開始です。F7で単体で実行可能なプログラムを作れます。


・あまり高速に動作する必要がないなら、「N88互換BASIC」というソフトウェアも試してみてください。
互換性はそっちの方が高いですので。

他に何か質問はありますか?

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。


通報する
ページトップ
投稿記事Posted: 2008年6月02日(月) 21:23 
ありがとうございます。
コンパイルまで無事でした。
以下問題が発生
POINTが実行できません。
コマンドプロンプト画面が現れ、
一瞬で終わりました。
以下プログラムを、
POINT文は文法が違うと出るのですが、
コンパイルは無事終了です。POINTコマンドを、コメントにして、
更なるお教えを求む、宜しくお願いします。


#N88BASIC
Dim STACK(1000) As Double
Dim N As Double, L As Double, ANGLE As Double, ZDEG As Double, ZLENG As Double, ZX As Double, ZY As Double, ZP As Double
Dim SP As Long, POINT(240,280) As Double
SP=0
'POINT(240,280)
N=4:L=10:ANGLE=90:GOSUB *HILBERT
END
*HILBERT
IF N=0 THEN RETURN
ZDEG=ANGLE:GOSUB *TURN
GOSUB *PUSH
N=N-1:ANGLE=-ANGLE:GOSUB *HILBERT
GOSUB *POP
ZLENG=L:GOSUB *MOVE
ZDEG=-ANGLE:GOSUB *TURN
GOSUB *PUSH
N=N-1:GOSUB *HILBERT
GOSUB *POP
ZLENG=L:GOSUB *MOVE
GOSUB *PUSH
N=N-1:GOSUB *HILBERT
GOSUB *POP
ZDEG=-ANGLE:GOSUB *TURN
ZLENG=L:GOSUB *MOVE
GOSUB *PUSH
N=N-1:ANGLE=-ANGLE:GOSUB *HILBERT
GOSUB *POP
ZDEG=ANGLE:GOSUB *TURN
RETURN
*PUSH
STACK(SP)=N:STACK(SP+1)=ANGLE:SP=SP+2
RETURN
*POP
ANGLE=STACK(SP-1):N=STACK(SP-2):SP=SP-2
RETURN
*MOVE
ZX=ZLENG*Cos(ZP*3.14159/180)
ZY=ZLENG*Sin(ZP*3.14159/180)
LINE -STEP(ZX,-ZY)
RETURN
*TURN
ZP=(ZP+ZDEG) Mod 360
RETURN


通報する
ページトップ
   
投稿記事Posted: 2008年6月02日(月) 21:35 
ヘルプよりPOINTを、POINTAPIにしたけれど、無効な識別子
LINE文を、 LINE -STEP(ZX,-ZY),123
で実行、
やはり一瞬だけ、コマンドプロンプトが表示され実行経過実行結果とも確認できず。

以上2点特にお願いします。

すみません


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2008年6月02日(月) 21:48 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
お住まい: 埼玉県東松山市
POINTAPIは構造体と言って、特殊な変数型のようなものです。

あなたが求めてるのはPSet関数かもしれません


そのLineの123の部分に来る数字は、白なら7、緑なら4などとする必要があります。
勿論123が来た場合の動作は規定されていません。(多分黒になります)

END命令語を実行すると、プログラムは終了します。
Sleep(-1)等に変更してみてください

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。


通報する
ページトップ
投稿記事Posted: 2008年6月02日(月) 21:59 
POINTは座標の初期値が欲しいのだと思うのですが、
一応PSETでも実行しました。
やはり一瞬で、経過、結果とも確認できず。
ただ実行までに時間がかかり手応えあり、
2回目以降は割りと速かったです。
理由が分からないのでなんともいえないのですが。
優しいハウトゥ、待ちます。


通報する
ページトップ
   
投稿記事Posted: 2008年6月02日(月) 22:16 
おかげで無事成功!?とまでは行かずとも、
線の一筆書きらしきもの現れました。
ただ一瞬で終わるのと、止める場所が分からない、
正方形のような形になる予定でしたが、
等脚台形らしくて、下が長くて上が短いので、
予定外というかはっきり見てみないと分かりませんが、
たぶん失敗のうち???すみません、ありがとうございました。
はっきり見たら成功だったらいいのですけど??

以下、そのときのコードを示します。

#N88BASIC
Dim STACK(1000) As Double
Dim N As Double, L As Double, ANGLE As Double, ZDEG As Double, ZLENG As Double, ZX As Double, ZY As Double, ZP As Double
Dim SP As Long, POINT(240,280) As Double
SP=0
Pset(240,280)
N=4:L=10:ANGLE=90:GOSUB *HILBERT
END
*HILBERT
IF N=0 THEN RETURN
ZDEG=ANGLE:GOSUB *TURN
GOSUB *PUSH
N=N-1:ANGLE=-ANGLE:GOSUB *HILBERT
GOSUB *POP
ZLENG=L:GOSUB *MOVE
ZDEG=-ANGLE:GOSUB *TURN
GOSUB *PUSH
N=N-1:GOSUB *HILBERT
GOSUB *POP
ZLENG=L:GOSUB *MOVE
GOSUB *PUSH
N=N-1:GOSUB *HILBERT
GOSUB *POP
ZDEG=-ANGLE:GOSUB *TURN
ZLENG=L:GOSUB *MOVE
GOSUB *PUSH
N=N-1:ANGLE=-ANGLE:GOSUB *HILBERT
GOSUB *POP
ZDEG=ANGLE:GOSUB *TURN
RETURN
*PUSH
STACK(SP)=N:STACK(SP+1)=ANGLE:SP=SP+2
RETURN
*POP
ANGLE=STACK(SP-1):N=STACK(SP-2):SP=SP-2
RETURN
*MOVE
ZX=ZLENG*Cos(ZP*3.14159/180)
ZY=ZLENG*Sin(ZP*3.14159/180)
LINE -STEP(ZX,-ZY),6
RETURN
*TURN
ZP=(ZP+ZDEG) Mod 360
RETURN

僕はぁPOINTと、PSETが分かりません。
あとぅ、どこで止めたら実行結果が止められるか分かりません。
よければ途中の変数値の変化も分かればいいかなぁ?

以上2点、特に結果が見えてきたので止め方お教え願えませんか???

優しいご助言ありがとうございます。


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2008年6月02日(月) 22:17 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 899
お住まい: 東京都
AB2を使うというのはだめですか?
SCREENステートメントを削除するだけで、問題なく動きました。
ここからダウンロードできます、と書こうとしたのですが、すみません。ダウンロードページが消滅していますね……。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2008年6月02日(月) 22:40 
以下のプログラムで結果を見ることが出来ました、
誠にありがとうございました。
ただ本に出てた結果と違うのと、
プログラムコードが僕には強者で、
理解不能、
正方形の外観になる予定でしたが、
やはり等脚台形でした。惜しい
ただこの短時間で移植らしきことが出来たことに感謝しています。
sleep(-1)感謝!!!

#N88BASIC
Dim STACK(1000) As Double
Dim N As Double, L As Double, ANGLE As Double, ZDEG As Double, ZLENG As Double, ZX As Double, ZY As Double, ZP As Double
Dim SP As Long, POINT(240,280) As Double
SP=0
PSET(240,280)
N=4:L=10:ANGLE=90:GOSUB *HILBERT
Sleep(-1)'END
*HILBERT
IF N=0 THEN RETURN
ZDEG=ANGLE:GOSUB *TURN
GOSUB *PUSH
N=N-1:ANGLE=-ANGLE:GOSUB *HILBERT
GOSUB *POP
ZLENG=L:GOSUB *MOVE
ZDEG=-ANGLE:GOSUB *TURN
GOSUB *PUSH
N=N-1:GOSUB *HILBERT
GOSUB *POP
ZLENG=L:GOSUB *MOVE
GOSUB *PUSH
N=N-1:GOSUB *HILBERT
GOSUB *POP
ZDEG=-ANGLE:GOSUB *TURN
ZLENG=L:GOSUB *MOVE
GOSUB *PUSH
N=N-1:ANGLE=-ANGLE:GOSUB *HILBERT
GOSUB *POP
ZDEG=ANGLE:GOSUB *TURN
RETURN
*PUSH
STACK(SP)=N:STACK(SP+1)=ANGLE:SP=SP+2
RETURN
*POP
ANGLE=STACK(SP-1):N=STACK(SP-2):SP=SP-2
RETURN
*MOVE
ZX=ZLENG*Cos(ZP*3.14159/180)
ZY=ZLENG*Sin(ZP*3.14159/180)
LINE -STEP(ZX,-ZY),6
RETURN
*TURN
ZP=(ZP+ZDEG) Mod 360
RETURN


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2008年12月06日(土) 16:12 
100 ' --------------------------
110 ' * ヒルベルト曲線 *
120 ' --------------------------
130 '
140 DIM STACK(1000)
150 SP=0
160 '
170 SCREEN 3,0,0,1:CLS 3
180 POINT(240,280)
190 N=4:L=10:ANGLE=90:GOSUB *HILBERT
200 END
210 *HILBERT
220 IF N=0 THEN RETURN
230 ZDEG=ANGLE:GOSUB *TURN
240 GOSUB *PUSH
250 N=N-1:ANGLE=-ANGLE:GOSUB *HILBERT
260 GOSUB *POP
270 ZLENG=L:GOSUB *MOVE
280 ZDEG=-ANGLE:GOSUB *TURN
290 GOSUB *PUSH
300 N=N-1:GOSUB *HILBERT
310 GOSUB *POP
320 ZLENG=L:GOSUB *MOVE
330 GOSUB *PUSH
340 N=N-1:GOSUB *HILBERT
350 GOSUB *POP
360 ZDEG=-ANGLE:GOSUB *TURN
370 ZLENG=L:GOSUB *MOVE
380 GOSUB *PUSH
390 N=N-1:ANGLE=-ANGLE:GOSUB *HILBERT
400 GOSUB *POP
410 ZDEG=ANGLE:GOSUB *TURN
420 RETURN
430 *PUSH
440 STACK(SP)=N:STACK(SP+1)=ANGLE:SP=SP+2
450 RETURN
460 *POP
470 ANGLE=STACK(SP-1):N=STACK(SP-2):SP=SP-2
480 RETURN
490 *MOVE
500 ZX=ZLENG*COS(ZP*3.14159/180)
510 ZY=ZLENG*SIN(ZP*3.14159/180)
520 LINE -STEP(ZX,-ZY)
530 RETURN
540 *TURN
550 ZP=(ZP+ZDEG) MOD 360
560 RETURN

n88互換basic for windows95でも成功しました、
ご助言ありがとうございました。


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2008年12月06日(土) 18:11 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
お住まい: 埼玉県東松山市
間違いなく動くコード作ったら

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。


通報する
ページトップ
投稿記事Posted: 2008年12月06日(土) 19:07 
プログラム動作確認(走りました)

再帰の所が難しいと思うんですが、

移植の際どんな風に作業されたのですか、

あと、直線の描画方向の変更等も読みこなしていくには難しいと思うんですが。

再帰的定義について、ビジュアルベーシックで、以下のプロ
グラムを実行しました。
ヒルベルト曲線を描くプログラムですが、変数ctが位数らし
いのですが、ct=1(最初は、6でした)ctと、ct-1(ct)の所
で、ctの値が、1,0、-1の順で、変わっていくのです
が、ctの値が、-1から0になるのが分かりません。
手間とは思いますが、もしよければ、ご意見いただけないで
しょうか、再帰的定義や、ぷろぐらむのながれがわかってい
ないなと、実感しました。

Public Class Form1
Dim g As Graphics
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Const GSIZE As Integer = 256
Dim ct, lenn, x, y As Integer
Dim d As Integer
g = PictureBox1.CreateGraphics()
g.Clear(PictureBox1.BackColor)
ct = 1
lenn = GSIZE / (2 ^ ct)
x = GSIZE - GSIZE / (2 ^ (ct + 1))
y = GSIZE / (2 ^ (ct + 1))
d = 270
drawA(ct - 1, x, y, d, lenn)
End Sub

Private Sub drawA(ByVal ct As Integer, ByRef x As Integer, ByRef y As Integer, ByRef d As Integer, ByVal lenn As Integer)
If ct < 0 Then Exit Sub
d = d - 90 : drawB(ct - 1, x, y, d, lenn) : myDrawLine(x, y, d, lenn)
d = d + 90 : drawA(ct - 1, x, y, d, lenn) : myDrawLine(x, y, d, lenn)
drawA(ct - 1, x, y, d, lenn) : d = d + 90 : myDrawLine(x, y, d, lenn)
drawB(ct - 1, x, y, d, lenn) : d = d - 90
End Sub

Private Sub drawB(ByVal ct As Integer, ByRef x As Integer, ByRef y As Integer, ByRef d As Integer, ByVal lenn As Integer)
If ct < 0 Then Exit Sub
d = d + 90 : drawA(ct - 1, x, y, d, lenn) : myDrawLine(x, y, d, lenn)
d = d - 90 : drawB(ct - 1, x, y, d, lenn) : myDrawLine(x, y, d, lenn)
drawB(ct - 1, x, y, d, lenn) : d = d - 90 : myDrawLine(x, y, d, lenn)
drawA(ct - 1, x, y, d, lenn) : d = d + 90
End Sub

Private Sub myDrawLine(ByRef x As Integer, ByRef y As Integer, ByRef d As Integer, ByVal lenn As Integer)
Dim oldx, oldy As Integer
If d < 0 Then d = d + 360
If d >= 360 Then d = d - 360
oldx = x : oldy = y
Select Case d
Case 0 : x = x + lenn
Case 90 : y = y - lenn
Case 180 : x = x - lenn
Case 270 : y = y + lenn
End Select
g.DrawLine(Pens.Black, oldx, oldy, x, y)
End Sub
End Class

確かにタイニーベーシックで、勉強したことは、多かれ少な
かれ、生かされていると思いました。


また以下は、TB

[875] Re[874]: 再帰的定義NO.47 投稿者:takeuchi 投稿日:2007/01/16(Tue) 19:30

> 再帰的定義について、ビジュアルベーシックで、以下のプロ
> グラムを実行しました。

 このプログラムをTBで書き直してみました。殆ど同じです。

Const GSIZE As real = 256
GScreen(GSIZE,GSIZE)
input "1から8程度",ct
lenn = GSIZE / (2 ^ ct)
x = GSIZE - GSIZE / (2 ^ (ct + 1))
y = GSIZE / (2 ^ (ct + 1))
d = 270
drawA(ct - 1, x, y, d, lenn)
End

Sub drawA(ct , x , y , d , lenn)
If ct < 0 Then Exit Sub
d = d - 90 : drawB(ct - 1, x, y, d, lenn) : myDrawLine(x, y, d, lenn)
d = d + 90 : drawA(ct - 1, x, y, d, lenn) : myDrawLine(x, y, d, lenn)
drawA(ct - 1, x, y, d, lenn) : d = d + 90 : myDrawLine(x, y, d, lenn)
drawB(ct - 1, x, y, d, lenn) : d = d - 90
End Sub

Sub drawB(ct, x , y , d ,lenn)
If ct < 0 Then Exit Sub
d = d + 90 : drawA(ct - 1, x, y, d, lenn) : myDrawLine(x, y, d, lenn)
d = d - 90 : drawB(ct - 1, x, y, d, lenn) : myDrawLine(x, y, d, lenn)
drawB(ct - 1, x, y, d, lenn) : d = d - 90 : myDrawLine(x, y, d, lenn)
drawA(ct - 1, x, y, d, lenn) : d = d + 90
End Sub

Sub myDrawLine(x, y, d, lenn)
If d < 0 Then d = d + 360
If d >= 360 Then d = d - 360
oldx = x : oldy = y
Select Case d
Case 0 : x = x + lenn
Case 90 : y = y - lenn
Case 180 : x = x - lenn
Case 270 : y = y + lenn
End Select
Line(oldx, oldy)-(x, y)
End Sub



ご助言などありましたらお願いします。
参考にしてください。


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2008年12月06日(土) 20:27 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
お住まい: 埼玉県東松山市
GosubやReturnを機械的に関数呼び出しに置き換えて、
PushとPopがいらなくなったので削りました。
他のユーザー定義関数を呼ばない関数から動作を確認して行き、あとは気合で(ry

再帰の捕らえ方は
私はまず、意味上は自分自身を呼び出さない場合(ここではN=1)にどのような動作になるかを確認し、
それから自分自身を呼び出す場合について考えます。

他に助言があるとすれば――hideやcodeのBBCodeを是非使ってください。
或いは、掲示板へのリンクがあれば十分なので、わざわざ全文貼らないでください。
掲示板を探して会話の流れを追うまで、質問の意味もよく分かりませんでした。
#ctの値が-1になることがあるのは、コードを目で追っていっても分かると思うのですが・・・。

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。


通報する
ページトップ
 記事の件名: すみませんでした
投稿記事Posted: 2008年12月06日(土) 20:52 
押し付けるような質問ですみませんでした。

ご助言ありがとうございました。

僕は変数の値を追っていくだけで精一杯なので、

ご助言より、

プログラムが動いている感じがします。

生もののようです。

正体はばれているようですんで、

もう少し言うと、いろいろなプログラム言語が読めるのですか?

VBを買ってしまい。(エクスプレスバージョン)2005

TBから入ったおかげでついていけてる気もするんですが、

分かってないなという風にも分かり、微妙です。

今は、CやC++、JAVAの勉強をしたほうがいいかもと、

柴田望洋氏の、明解を読んだりしているんですが、

専門的に勉強したことはあるんですか(失礼)

僕には努力が足りないとも思います。

本当にありがたいのですが、

掲示板チャット状態になってしまいそうですが???

よろしければご助言等いただけませんか。

以上すみませんがお願いします。


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2008年12月06日(土) 21:39 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
お住まい: 埼玉県東松山市
>いろいろなプログラム言語が読めるのですか?
一応、必要になったことのある言語の内大半は読める程度には理解しています。
>専門的に勉強したことはあるんですか
「専門的」の意味が掴めませんが、大学で講義を受けたことはありません。
殆ど独学のようなものですが、勉強する上で沢山の人にヒントを貰いました。

疑問文が質問形式になっているかどうか確認してから投稿したほうがいいよ。

#余分な改行が多い気が・・・

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 18 件の記事 ]  ページ移動 1 2 次へ

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: Ahrefs [Bot], Semrush [Bot] & ゲスト[21人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean