15ピースのスライドパズルです
この記事はリニューアルしました
https://ulprojectmail.blogspot.com/2022/02/n88-basicpuzzle-2.html
N88-BASICでスライドパズル (2回目)
15ピースのスライドパズルです
この記事はリニューアルしました
https://ulprojectmail.blogspot.com/2022/02/n88-basicpuzzle-2.html
N88-BASICでスライドパズル (2回目)
Cのポインターが分かりにくい理由
N88-BASICでもポインターと同じように
アドレスを扱うことができ、アセンブラも
当然アドレスを使用しますが、
Cのポインターの分かりにくさの原因を
解説します。(個人的意見です。)
#include <stdio.h>
void main(void)
{
int a; /* 整数型変数 a */
int* p; /* (整数型変数のアドレス)を入れる変数 p */
a = 5;
p = &a; /* aのアドレス(&a)をpに代入 */
printf("%d\n”, *p); /* アドレスpの中身5が表示される */
}
pはアドレス(場所を表す数、番地)を入れる変数
*pはpに入っているアドレス(上記&a)の中身(上記aの内容)です。
アドレス 内容(1アドレスに1バイト入ります)16進表記です。
00000100 05 ← a(下位バイトから入ってますa = 00 00 00 05)
00000101 00 int型を4バイト(32ビット)
00000102 00 として説明しています
00000103 00
aは00000005
&aはaのアドレス00000100なので、
p = &aでpは00000100になります。
*pはアドレス00000100の中身00000005
になります。
Cでポインターpやqの宣言は、通常
int *p, *q;
と書きます。
*pや*qがint型であるという宣言です。
整数型ポインターpの中身*pは確かにint型
なので分からなくもないのですが、
アドレスを格納する変数であるポインター
の宣言に、アドレスの中身である*pが
出てくる所が混乱する原因だと思います。
なので、
int*を整数型ポインターの宣言だと思えば
分かりやすいかと思います。
int* p;
は、整数型ポインター pを作ると解釈します。
コンパイラーは空白を無視するので、
int *p; も int* p;もint*p;と同じです。
ただし、
int *p, *q; はpとqがポインターになりますが
int* p, q; は、int *p, q; と同じなので、
pはポインターでqは整数型になります。
よって、
int* p;
int* q;
というように、1行ずつ書きます。
こうすれば、ポインターの宣言に*pなどの
ポインターの中身が出て来ないので
分かりやすいかと思います。
int*が整数型へのポインター変数の宣言文
と思い込みましょう。
個人的に int *p; は分かりにくいと思ったので、
int* p; と書くようにしています。
8ピースのスライドパズルです
この記事はリニューアルしました
https://ulprojectmail.blogspot.com/2022/02/n88-basicpuzzle-1.html
N88-BASICでスライドパズル (1回目)
クイックソートのプログラムの比較です
Cは配列版とポインター版を用意しました
ポインター版はアセンブラに移植し易くするため用です
(速度も速くなります)
(Assemblerは8086系です)
この記事はリニューアルしました
https://ulprojectmail.blogspot.com/2022/01/n88-basiccquick-sort.html
N88-BASIC、C、アセンブラでQuick sort
VL-BASICのPLAY(MML)を.mid(SMF)に変換サンプル
以前紹介しましたMML→.mid変換をするBASICプログラムを
サンプルとして追加しmid~.zipを公開しました。
VL-BASICにCHILD命令を追加しました。
CHILDはBASICからコンソール(DOS)アプリを
呼び出す命令です。
また、MPU TRONに待ち時間(ディレイタイム)
に関する不具合がありましたので修正しました。
mid~.zip(tron2txt.exe、txt2mid.exe、
tron.bas)と、VL-BASICは、
以下からダウンロードして下さい。
VL-BASIC(N88-BASIC互換?)ホームページへのリンク
ホームページに書いてあるパスワードを入力して、
Readme.txtを読んで、遊んで見て下さい。
すべて、windows用です。
tron.basのLISTです。
100 '----------------------------------------------------------------------
110 ' Jupiter of the planets by G.Holst の一部演奏
120 '
130 ' for VL-BASIC(MML→.mid) by ULproject
140 '----------------------------------------------------------------------
150 CMD MPU ON
160 MPU TRON ("a")
170 GOSUB *PLAY
180 MPU TROFF
190 CHILD "tron2txt a.txt"
200 CHILD "txt2mid a_txt.txt"
210 MPU MCI "open a_txt_txt.mid alias FILE"
220 MPU MCI "set FILE time format ms"
230 MPU MCI "play FILE"
240 MPU MCI "status FILE length", B$
250 K = VAL(B$)
260 WHILE I < K AND INKEY$ = ""
270 MPU MCI "status FILE position", B$
280 I = VAL(B$)
290 WEND
300 MPU MCI "close ALL"
310 MPU OFF
320 END
330 '--- play
340 *PLAY
350 PLAY "@127", "@127", "@127"
360 PLAY "v 10", "v 10", "v 10", "v 10"
370 PLAY "t100", "t100", "t100", "t100"
380 PLAY "l8q7o4", "l8q7o4", "l8q7o4", "l8q7o4"
390 A$ = "<g&b-&"
400 PLAY A$ '--- 1
410 A$ = "> c 4 c&e-&d .&<b-16&"
420 B$ = "< a-4&r4 a-.& r 16 "
430 C$ = "< e-4 r4 f4"
440 D$ = "<<a-4 r4 f4"
450 PLAY A$, B$, C$, D$ '--- 2
460 A$ = "> e-&f&e-4d 4&"
470 B$ = " b-&r r 4r 4 "
480 C$ = " e-4 r 4e-4 "
490 D$ = " g 4 r 4g 4 "
500 PLAY A$, B$, C$, D$ '--- 3
510 A$ = " c &d&c4<b-4&"
520 B$ = " a-&r r4 f 4&"
530 C$ = " e-4 r4 d 4 "
540 D$ = " a-4 r4 b-4 "
550 PLAY A$, B$, C$, D$ '--- 4
560 A$ = " g 2 g&b-&"
570 B$ = " e-2 d&r "
580 C$ = "> c 2<b-4 "
590 PLAY A$, B$, C$ '--- 5
600 A$ = "> c 4 c8&e-&d .&<b-16&"
610 B$ = " a-4&r4 a-.& r 16 "
620 C$ = " e-4 r4 f4"
630 D$ = " a-4 r4 f4"
640 PLAY A$, B$, C$, D$ '--- 6
650 A$ = "> e-&f&g4g 4&"
660 B$ = " b-&r r4e-4&"
670 C$ = " e-4 r4b-4 "
680 D$ = " g 4 r4e-g "
690 PLAY A$, B$, C$, D$ '--- 7
700 A$ = " g&f&e-4&f 4&"
710 B$ = " c 2 c 4 "
720 C$ = " a-2 a-4 "
730 D$ = " a-2 a-4 "
740 PLAY A$, B$, C$, D$ '--- 8
750 A$ = " e-4&>b-4r4"
760 B$ = " r 4 g 4r4"
770 C$ = " r 4 e-4r4"
780 D$ = " r 4 e-4r4"
790 PLAY A$, B$, C$, D$ '--- 9
800 RETURN