N88-BASIC、アセンブラ、Cでポインター (1回目)

2023/1/11(水)
N88-BASIC、アセンブラ、Cでポインター (1回目)
 
C言語にポインターが存在する意味が
 
文字列中のアルファベットの小文字を
大文字に変換するプログラムを作ることで
 
何となく分かるようにするシリーズです
 
 
今回はN88-BASIC(VL,XL,NL-BASIC)で
普通に作ったプログラムの紹介です
 
BASICとアセンブラ(Z80)をスルーする方は
4回目(C言語)から見て下さい
 
blg~.zip中のptr001.basの150行目からです
 
150 INPUT A$
160 N = LEN(A$)
170 PRINT A$
180 C = ASC("a") - ASC("A")
190 FOR I=1 TO N
200   B$ = MID$(A$, I, 1)
210   IF "a" <= B$ AND B$ <= "z" THEN MID$(A$, I) = CHR$(ASC(B$) - C)
220 NEXT
230 PRINT A$
 
プログラムと解説を交互に書きました
 
150 INPUT A$
  キーボードから入力した文字列を文字変数A$に入れる
160 N = LEN(A$)
  NにA$の文字数を入れる
170 PRINT A$
  A$の文字列を表示する
180 C = ASC("a") - ASC("A")
  文字a,Aのキャラクターコードの差をCに入れる
190 FOR I=1 TO N
  IがNを超えていればNEXTの次に移動(Iは1~)
200   B$ = MID$(A$, I, 1)
  B$に「A$の1から数えてI番目の文字1文字」を入れる
210   IF "a" <= B$ AND B$ <= "z" THEN MID$(A$, I) = CHR$(ASC(B$) - C)
  B$が"a"~"z"なら"A"~"Z"に替えてA$のI番目に入れる
220 NEXT
  Iを1増やしてFORに戻る
230 PRINT A$
  A$の文字列を表示する
 
BASICでは'以降はコメントです
BASICでは変数名の最後で型を表します
A$:文字列、A%:16bits整数、A,A!:32bits実数、A#:64bits実数
(AはDEFINT,DEFSNG,DEFDBLで頭文字指定して型を変更可)
 
ASC("a")はaのキャラクターコード(&H61)
BASICでは&Hは16進数を表す
CHR$(&H41)でキャラクターコード&H41の文字"A"になる
 

123abc[]を入力したとすると
 
"1","2"と順番に文字を調べて
"a"~"z"ならキャラクターコードをC(&H20)引いた文字にする
CHR$(ASC("a") - &H20)で"A"になる
これを文字数回繰返す
結果は
123ABC[]
になる
 
次回から
このプログラムを様々な言語や方法で書いて行きます
 
N88-BASIC,Z80,C,8086系(386以降)を予定しています
(CはC言語です)
 
Z80はPC-88またはXL-BASICで動きます
 
C、インラインアセンブラは、
Cコンパイラーなどを準備しておいて下さい
例、Microsoft Visual Studioなど
 
windowsのconsoleアプリは実行終了後
ウインドウが閉じてしまうので
最後にキー入力待ちを入れています
使用している入力関数は
Microsoft Visual Studio以外では
代替え関数に変更する必要があるかも
しれませんがご了承下さい
 
VL,NL,XL-BASIC用のプログラムファイル(例a.bas)
を作る時はメモ帳(名前を付けて保存)などで
ANSIファイルで作成する必要があります
 
VL,NL,XL-BASICとblg~.zip(ptr001.bas)は
以下のリンクからダウンロードできます

https://ulprojectmail.blogspot.com
Readme.txtを読んで遊んで下さい
















このブログの人気の投稿

NEWS

N88-BASICでゲーム (1回目)