StrJoin( - コマンドリファレンス

Casio Basicプログラミング - コマンドリファレンス
<コマンドリファレンス・トップ>

誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します

2018/01/27

[純正 / C.Basic] [FX / CG]


StrJoin(




文字列を結合する。

(書式) StrJoin("<文字列1>","<文字列2>")
"<文字列1>" の右に "<文字列2>" を結合する。

※ 最大文字列長は、純正Casio Basic の999に対してC.Basic は255となっている点に注意。

(キープレス) [SHIFT]-[VARS](PRGM) [F6](▷) [F6](▷) [F1](STR) [F1](Join)

(例)
 StrJoin("ABC","DEF")→Str 1
※ "ABCDEF" がStr 1 に代入される。

(例)
 "Casio "→Str 1
   "Basic"→Str 2
   Locate 1,1,StrJoin(Str 1,Str 2)
※ テキスト座標 (1, 1) に "Casio Basic" を出力する。

(例)
 "GHI"→Str 1
   StrJoin(StrJoin("ABC","DEF"),Str 1)→Str 1
※ Str 1 が "ABCDEFGHI" になる。




応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: プログラム関数電卓、Casio Basic、C.Basic、プログラミング




テーマ : プログラム関数電卓
ジャンル : コンピュータ

Gosub - コマンドリファレンス

Casio Basicプログラミング - コマンドリファレンス
<コマンドリファレンス・トップ>

誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します

2018/01/21

[C.Basic] [FX / CG]


Gosub




プログラムファイル内のサブルーチンへジャンプする。ジャンプの際に引数と戻り値を指定することが可能。純正Casio Basicにはない C.Baisc 独自コマンドで、Goto コマンドを拡張したもの。

Prog コマンドで別のプログラムファイルを呼び出す代わりに、Gosub / Lbl / Return で同じファイル内に記述したルーチンを実行することが可能になる。


(書式) Gosub <ジャンプ先ラベル>[,<引数1>[,<引数2>]...]

ジャンプ先ラベルは、プログラムファイル内に記述した Lbl ラベル。例えば Gosub E に対して Lbl E で受ける。ここで使えるラベルは Goto / Lbl で使えるラベルと同じで、09AZ、さらに azr ([ALPHA][x^2]のr)θ ([ALPHA][∧]のθ) が使える。或いは、Alias コマンドで指定した別名ラベルも使える。

指定ラベルへジャンプした後、Gosub実行位置へ戻るには、必ず Return コマンドを用いる。制御コマンドが無い場合は、処理がそのまま下へ続く。Return コマンドを用いる際、C.Basic で拡張された機能として、戻り値を指定できる。例えば Return X とすると 変数 Ans に 変数Xの内容が格納され、Gosub コマンド位置に制御が戻る。Gosub の直後で 変数 Ans を参照すると 変数 X の値が得られる。

(例)
 10->X
 Gobus A
 Disp Ans
 Stop

 Lbl A
 Return 2X


Gosub 以外に Lbl A に到達しないように Stopコマンドを用いている。Lbl A にジャンプ後 2Xを変数 Ansで返す。Disp Ans2X の結果 (=20) を表示する。


<引数n> はジャンプ先へ渡す変数を指定する。
ジャンプ先に渡す変数はジャンプ先で別名変数にできる。その場合は Local コマンドを利用する。別名変数は全ての変数が使えるが、プログラムの可動性を得るために小文字使用を推奨する。

例えば、Gosub で変数XYを渡し、ジャンプ先で渡された変数を a, z として利用するときは、

Gosub A,X,Y
・・・
Lbl A
Local a,z


と記述する。なお 変数 X, Y, a, z はプログラム内で共通して使える大域変数のままである点に注意。但しジャンプ先ラベル以下で別名変数として擬似的なローカル変数として使えるので、コマンド名が Local になっている。

(例)
  10→X
  20→Y
  X+1→a
  Y×2→b
  Gosub A,X,Y
  Disp Ans
  Disp a
  Disp b
  Stop

  Lbl A
  Local a,b
  Dips a
  Disp b
  Return a+b


-------------実行結果
  10
  20
  30
  10
  20
-------------

Gosub 実行前は、X=10Y=10a=11b=20 となっている。
Gosub 実行により Lbl A へジャンプし、ジャンプ後 Local コマンドで、変数 X の値は 変数 a に格納、変数 Y の値は 変数 b に格納される。この時点で、a=10b=20 となる。これによりジャンプ前の変数 ab の値は変更されている。
Return a+b により a+b の値は変数 Ans に格納され、Gosub の位置へ戻る。
従って、Disp Ans30 と表示され、Disp a10と、Disp b20 と表示される。



応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 



keywords: プログラム関数電卓、Casio Basic、C.Basic、プログラミング

リンク集 | ブログ内マップ





テーマ : プログラム関数電卓
ジャンル : コンピュータ

Menu - コマンドリファレンス

Casio Basicプログラミング - コマンドリファレンス
<コマンドリファレンス・トップ>

誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します

2018/01/16
更新 2018/01/20

[純正 / C.Basic] [FX / CG]


Menu




メニュー画面を作る。

[純正 / C.Basic]

(書式) Menu "<メニュータイトル>", "<項目1>",<ラベル文字1>,"<項目2>",<ラベル文字2>[,"<項目n>",<ラベル文字n>...]
項目/ラベル数は2~9で正常動作、それ以外はエラーになる。項目nを選択すると<ラベル文字n>に対応した Lbl n に分岐する。項目n に対応する動作は、Lbl n に続いて記述する。Lbl n の記述動作終了時のジャンプ先は、Goto n ... Lbl n と同様に、Goto、Return、Stop で指定する。ラベル文字n / Lbl n の n は、0~9、A~Z、、θ が使える。
※ 純正Casio BasicのMenuコマンドでは、タイトルは最大16文字だが、C.Basic では最大17文字使える。

(キープレス) [SHIFT]-[VARS](PRGM) [F3](JUMP) [F6](Menu)

(例)
  Menu "Favorite Games","Whack-a-Mole",1,"Master Mind",2,"Hit & Blow",3,"Exit",4
  Lbl1
  Prog "WHACKAMO"
  Return
  Lbl 2
  Prog "MASIOV4C"
  Return
  Lbl 3
  Prog "HITBLOW"
  Return
  Lbl 4

※ 出力
Genuine_Menu.png



[C.Basic for CG] [CG]

C.Basic for CGのMenuコマンドは色設定ができる (拡張機能)。

(書式) Menu [@]"<メニュータイトル>", "<項目1>",<ラベル文字1>,"<項目2>",<ラベル文字2>[,"<項目n>",<ラベル文字n>...]
項目/ラベル数は2~9で正常動作、それ以外はエラーになる。項目nを選択すると<ラベル文字n>に対応した Lbl n に分岐する。項目n に対応する動作は、Lbl n に続いて記述する。Lbl n の記述動作終了時のジャンプ先は、Goto n ... Lbl n と同様に、Goto、Return、Stop で指定する。ラベル文字n / Lbl n の n は、0~9、A~Z、、θ が使える。
※ 色設定 (拡張機能)
 ・タイトルの文字色は、Menuコマンド直前の色指定で設定可能。
 ・メニュー項目の文字色は、Plot/Line-Colorの色指定で設定可能。
 ・メニューの背景色は、Back-Colorの色指定で設定可能。
※ Menu 直後に "@" を付けると、<メニュータイトル>と<項目n>のフォントサイズが同じ
  (C.Basic for FX版の仕様)になる。[2018/01/20 追加]

(キープレス) [SHIFT]-[VARS](PRGM) [F3](JUMP) [F6](Menu)

(例)
  Plot-Line-Color Black '拡張機能によりメニュー項目の文字をBlackに設定
  Back-Color EGB(140,190,160) '拡張機能により背景色をRGB( コマンドで中間色に設定
  Red '拡張機能によりタイトルの文字色を Red に設定
  Menu " Favorite Games","Whack-a-Mole",1,"Master Mind",2,"Hit & Blow",3,"Exit",4
  Lbl1
  Prog "WHACKAMO"
  Return
  Lbl 2
  Prog "MASIO4C"
  Return
  Lbl 3
  Prog "HITBLOW"
  Return
  Lbl 4

※ 出力
DispCap1.png





応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 



keywords: プログラム電卓、Casio Basic、fx-5800P、 fx-9860GII、fx-9860GII SD、fx-CG20、fx-CG50





応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 



keywords: プログラム関数電卓、Casio Basic、C.Basic、プログラミング

リンク集 | ブログ内マップ





テーマ : プログラム関数電卓
ジャンル : コンピュータ

StrMid( - コマンドリファレンス

Casio Basicプログラミング - コマンドリファレンス
<コマンドリファレンス・トップ>

誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します

2018/01/17

[純正 / C.Basic] [FX / CG]


StrMid(




文字列の任意の位置から任意の数の文字を抜き出して、文字列として返す。

(書式) StrMid("<文字列>",n[,m])
"<文字列>" のn文字目から、m文字を抜き出し、文字列として返す。
※ m を省略した時は、n文字目から最後までの文字列を返す。
※ n と m は 1以上最大4桁 (≦9999)の整数。
※ C.Basic では文字列の文字数が最大255文字なので、n と m は1以上255以下の整数。

(キープレス) [SHIFT]-[VARS](PRGM) [F6](▷) [F6](▷) [F1](STR) [F6](▷) [F3](Mid)

(例)
 StrMid("Hello World",7)→Str 1
※ "Hello World" の7文字目から文字列の最後まで抜き出した結果 "World" をStr 1 に代入する。

(例)
 "What a wondrful world!"→Str 1
   StrMid(Str 1,8,9)→Str 2
※ Str 1 の8文字目から9文字抜き出した "wonderful" を Str 2 に代入する。

(例)
純正Casio Basic (fx-CGシリーズ)の基本色番号から対応する色の名前を出力するプログラム例
  "Black  Blue  Red   Magenta Green  Cyan  Yellow"→Str 1
  "Select Index (1 - 7)"?→N
  StrMd(Str 1,8(N-1)+1,7)→Str 2
  Locate 1,3,Str 2
※ 各色は左から順にインデックス番号1~7に対応 (純正Casio Basic基本色番号)
※ Str 1 の各色は空白を含めて7文字に固定し、各色は空白1つで区切っている。
  Black - Blue間空白3文字、Blue - Red間空白4文字、Red - Magenta間空白5文字
  Magenta - Gree間空白1文字、Gree - Cyan間空白3文字、Cyan - Yellow間空白4文字
※ インデックスN に対応する色の文字列の頭の位置は、8(N-1)+1 となる。
※ Str 1 の 8(N-1)+1 文字目から7文字抜き出し、Str 2 に代入、Locate で Str 2 を表示。
※ 従って、インデックス番号N を入力すれば対応する色の表記が出力される。




応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 



keywords: プログラム関数電卓、Casio Basic、C.Basic、プログラミング



テーマ : プログラム関数電卓
ジャンル : コンピュータ

StrCmp( - コマンドリファレンス

Casio Basicプログラミング - コマンドリファレンス
<コマンドリファレンス・トップ>

誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します

2018/01/16

[純正 / C.Basic] [FX / CG]


StrCmp(




文字列を比較して、一致するかどうかを判定する。

(書式) StrCmp("<文字列1>","<文字列2>")
"<文字列1>" と "<文字列2>" が一致すれば 0 を返し、一致しない時は -1 か 1 を返す。

文字列を比較する際、文字列の先頭から文字コードを比較し、文字コードが異なる最初の文字が見つかった時、文字列1の方が大きければ 1 を返し、小さければ -1 を返す。その後の文字コードの比較は行わない。

(キープレス) [SHIFT]-[VARS](PRGM) [F6](▷) [F6](▷) [F1](STR) [F3](Cmp)

(例)
 StrCmp("ABC123","ABc456" )
※ 2つの文字列が一致せず、-1 を返す。頭から文字コードを比較して最初に一致しないのが C と c で、左側にある C の文字コードが c よりも小さいので -1 を返す。C / c の後の 123 と 456 を比較すれば 右側が大きくなるが、ここは比較していない。

(例)
  If StrCmp(Str 1,"OK"):Then
  Locate 1,1,"OK"
  Else
  Locate 1,1,"NG"
  IfEnd
Str 1 が "OK" ならば OK と表示、そうでなければ NG と表示する。




応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 



keywords: プログラム関数電卓、Casio Basic、C.Basic、プログラミング

リンク集 | ブログ内マップ





テーマ : プログラム関数電卓
ジャンル : コンピュータ

Casio Basic プログラミング

Casio Basic プログラミング

随時追記・修正します
初版: 2018/01/07
追記・修正: 2018/01/16


Casio Basicプログラミング - 目次 -


プログラミングの楽しさは、自分で書いたコードが動作するのを目の当たりにする時だと思う。確実に動作するコードがあれば、それを利用して楽にプログラムが書けて楽しい。そこで、これまで "逆引き Casio Basic" で掲載してきたものを含め、より基礎的なものを追加して、"Casio Basicプログラミング" としてまとめてゆくことにする。

Casio Basicプログラミングは、"基礎編"、"実用編"、"コマンドリファレンス編" の3部構成にする。

純正Casio Basic については、fx-5800P、fx-9860Gシリーズ、fx-CGシリーズが対象。
C.Basic (アドイン版Casio Basic) については、C.Basic for FX の対象が fx-9860Gシリーズ、C.Basic for CG の対象が fx-CGシリーズとなる。

なお、C.Basic について簡単に説明すると、これは純正Casio Basic の互換動作を目指した上で、純正コマンドの機能を拡張したり新たなコマンドが用意されていて、100%純正コマンドだけで書いたコードでも驚くほど速く実行でき、さらに拡張コマンドや独自コマンドを使えば純正Casio Basicでは実現できないプログラムを書ける。グラフィックスコマンドについては極めて高速動作するプログラムが書ける(純正Casio Basicとの対比)。

但し、C.Basic は純正Casio Basicの全てのコマンドに 100%対応してはおらず、特にグラフ機能コマンド (電卓に備わっている各種グラフ描画機能をマクロ的に利用するコマンド) は僅かに対応するに留まる。これらマクロ的なコマンド以外のグラフィックスコマンドを利用するプログラミングは、現行の C.Basic で十分に楽しめると思う。

具体的に対応する機種は、新世代 Casio Basic を搭載した下記のものだ。互いに移植性は比較的高い。
<新世代Casio Basic搭載機>
  - fx-5800P
  - fx-9860G (OS Ver 2 以降)
  - fx-9860GII
  - fx-CG10
  - fx-CG20
  - fx-FD10 Pro
  - fx-CG50

対応機種については、fx-5800P は "5800P"、fx-9860Gシリーズは "FX"、fx-CGシリーズは "CG" と表記する。 

Casio Basicプログラミング - 目次 -

コマンドリファレンス編

 [純正 / C.Basic] コマンドリファレンス・トップ


基礎編

文字列処理

 [C.Basic] DATEから年月日を取り出す [FX / CG]
  ※DATEコマンドで表示される年月日情報から年だけまたは月だけを取り出したい


実用編

ファイル入出力

 [C.Basic] BMPファイルのロード [FX / CG]
  ※ビットマップファイルをロードして描画したい


入力処理
      
 
[純正 & C.Basic] キーリピート抑制 [5800P / FX / CG]
  ※キーリピートを抑制する 

 [純正 & C.Basic] 矢印キーの判別 [5800P / FX / CG]
  ※4つの矢印キーのうち、どれが押されたかを判別する 

 [純正 & C.Basic] 矢印キーで項目選択(1) [5800P / FX / CG]
  ※矢印キーを使って項目を選択する(1) 

 [純正 & C.Basic] 矢印キーで項目選択(2) [5800P / FX / CG]
  ※矢印キーを使って項目を選択する(2) 

 [純正 & C.Basic] キー押下でプログラムをコントロールしたい [5800P / FX / CG]
  ※プログラムの一旦停止や実行をキー押下でコントロールしたい

 [純正 & C.Basic] テンキーでメニュー選択させたい [5800P / FX / CG]
  ※テンキーでメニュー選択させるプログラムを作りたい

 [純正 & C.Basic] キー長押しでメニュー選択させたい [5800P / FX / CG]
  ※メニュー選択機能で、同じキーの長押しにより2つ目の選択肢を与えたい


出力処理

 [純正 & C.Basic]  命令を Basic コマンドに置き換えたい [5800P / FX / CG]  
   命令 を Basic コマンドに置き換えて、fx-5800 と fx-9860GII 互換のコードを書く


計 算

 [純正] fx-5800P で Mod を使いたい [5800P]
  ※fx-9860GII (グラフ関数電卓)の 除算の余りが得られる Mod 関数を fx-5800P で実現する

 [純正 & C.Basic] 整数の桁数を求めたい [5800P / FX / CG]
  ※Locate コマンドを用いて、正しい場所に数値を表示するために 「整数の桁数」 を求める


処理速度

 [純正] プログラムを速くしたい [5800P]
  ※Casio Basic特有の内部処理に基づいて、プログラムを速くする対策を行う




応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 



keywords: CasioBasicプログラミング入門プログラム関数電卓

リンク集 | ブログ内マップ

テーマ : プログラム関数電卓
ジャンル : コンピュータ

Pol( / Rec( - コマンドリファレンス

Casio Basicプログラミング - コマンドリファレンス
<コマンドリファレンス・トップ>

誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します

2018/01/16

[純正 / C.Basic] [FX / CG]


Pol( / Rec(




極座標と直交座標の間で座標変換する。

(書式) Pol(x座標値,y座標値)
(x座標値, y座標値) を極座標に変換した結果を List Ans [動径, 偏角] に格納する。実行時の角度単位設定 Deg, Rad, Gra が反映される。変換結果の偏角(θ)は -180°<θ≦180° (Deg設定時)の範囲、Rad、Gra 設定時は相当する角度範囲になる。

(キープレス) [OPTN] [F6](▷) [F5](ANGLE) [F6](▷) [F1](Pol()

(例)
 Pol(14,20.7)
※ 直交座標 (14, 20.7) を極座標に変換する。

(例)
  Deg
  14→X
  20.7→Y
  Pol(X,Y)
  List Ans[1]→r
  List Ans[2]→θ
  Locate 1,1,"Pol(X,Y)"
  Locate 1,2,"r="
  Locate 3,2,r
  Locate 1,3,"θ="
  Locate 3,3,θ
※ 変換結果 r=24.98979792、θ=55.92839019 が得られる。



(書式) Rec(動径,偏角)
(動径, 偏角) を直交座標に変換した結果を List Ans [x座標値, y座標値] に格納する。実行時の角度単位設定 Deg, Rad, Gra が反映される。

(キープレス) [OPTN] [F6](▷) [F5](ANGLE) [F6](▷) [F2](Rec()

(例)
 Rec(25,56)
※ 極座標 (25, 56) を直交座標に変換する。

(例)
  Deg
  25→r
  56→θ
  Rec(r,θ)
  List Ans[1]→X
  List Ans[2]→Y
  Locate 1,1,"Rec(r,θ)"
  Locate 1,2,"X="
  Locate 3,2,X
  Locate 1,3,"Y="
  Locate 3,3,Y
※ 変換結果 X=13.97982259、Y=20.72593931 が得られる。





応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 



keywords: プログラム関数電卓、Casio Basic、C.Basic、プログラミング

リンク集 | ブログ内マップ





テーマ : プログラム関数電卓
ジャンル : コンピュータ

文字列変数 Str - コマンドリファレンス

Casio Basicプログラミング - コマンドリファレンス
<コマンドリファレンス・トップ>

誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します

2018/01/15

[純正 / C.Basic] [FX / CG]


文字列変数 Str




文字列変数は、Str 1 ~ Str 20 が使える。

(書式) Str n
n は1 ~ 20。

(キープレス) [VARS] [F6](▷) [F5](Str)

(例) "ABcd"→Str 1
※ 文字列 ABcd を 文字列変数 Str 1 に格納する。

(例) Str 1→Str 2
※ 文字列変数 Str 1 を Str 2 に代入する。

(例)
  "Hello World"→Str 1
  Locate 3,4,Str 1
※ テキスト座標(3, 4)に Hello World と表示する。



[C.Basic]

C.Basic では 純正Casio Basicと同様に文字列変数や文字列コマンドが使えるが、文字列の実体は行列として実装している。プレフィックス$を使えば、行列が文字列として認識される。

Str 1Str 20 は、デフォルトでは自動的にバイト型行列 Mat r ([ALPHA][x2](r)r) として確保される。全要素は 0 で初期化される。具体的にはデフォルトで {20,256}→Dim Mat r.B と自動的にバイト型行列r が初期化される。文字列の最大の文字数は255文字で、256バイト目の 0 は文字列終端として確保する必要がある。

なお、以下の純正Casio Basicの文字列コマンドを使う限り、行列を意識する必要はない。
+ (文字列の結合)
StrJoin(
StrLen(
StrCmp(
StrSrc(
StrLeft(
StrRight(
StrMid(
Exp▸Str(
Exp(
StrUpr(
StrLwr(
StrInv(
StrShift(
StrRotate(

Str変数の実体となる行列は、デフォルトの Mat r 以外の任意の行列変数を指定可能で、Str変数を使う前に指定する。
(例) '#Str A
{20,256}→Mat A.B と同じ。Str A が使えるようになる。

(例)
 ["ABC","def","1+2x3"]→Mat A.B
※ バイト型行列 MatA[3,6]を自動的に確保し、それぞれの要素に文字 (1バイト)を配置する。
 Mat A = A B C 0 0 0
      d e  f  0 0 0
      1 + 2 x 3 0
Mat A から文字列 "ABC" を利用するには、$Mat A$Mat A[1]$Mat A[1,1] とする、
 Locate 1,1,$Mat A
 Locate 1,2,$Mat A[1]
 Locate 1,3,$Mat A[1,1]
※ Mat A から文字列 "def" を利用するには、$Mat A[2]、$Mat A[2,1] とする。
 Locate 1,4,$Mat A[2]
 Locate 1,5,$Mat A[2,1]
※ Mat A から文字列 "1+2x3" を利用するには、$Mat A[3]、$Mat A[3,1] とする。
 Locate 1,6,$Mat A[3]
 Locate 1,7,$Mat A[3,1]
※ Mat A から文字列 "2x3" を取り出すには、$Mat A[3,3] とする。
 Locate 1,1,$Mat A[3,3]
     指定した行列要素からその行の末尾の終端までが文字列として利用できる。

Str変数を20個以上使えるように拡張できる。デフォルトのまま行列r ([ALPHA][x2](r)r)を拡張してより多くの文字列が使えるようになる。
(例)
  ClrMat r
  '#Str r,120
※ デフォルトの行列r を拡張して文字列を120個使えるように拡張し、Str 1 ~ Str 120 まで使える。

Str変数がインデックスで使える。
(例)
  "1"→Str 1
  "2"→Str 2
  "3"→Str 3
  "4"→Str 4
  "5"→Str 5
  "6"→Str 6

  "7"→Str 7
  For 1→C To 7

   Locate 1,C,Str C
  Next
※ 左端に上から下まで、1~7が順に表示される。




応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 



keywords: プログラム関数電卓、Casio Basic、C.Basic、プログラミング

リンク集 | ブログ内マップ





テーマ : プログラム関数電卓
ジャンル : コンピュータ

DATE から 年月日を取り出す - Casio Basicプログラミング

Casio Basicプログラミング
<目次>

誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します

2018/01/07

[C.Basic] [FX / CG]

DATEコマンドで表示される情報から年だけまたは月だけの数理を取り出したい。



DATEコマンドの出力は文字列なので、そこから StrRight や Str Mid を使って、年や月に関する文字列を部分的に取り出せば良い。

例えば、年月日のそれぞれを取り出すには、以下のようにする;

・年: StrLeft(DATE,4)
・月: StrMid(DATE,6,2)
・日: StrMid(DATE,9,2)
・曜日: StrRight(DATE,3)

時間も TIMEから同様に取り出せる。


応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: プログラム関数電卓、Casio Basic、C.Basic、プログラミング

リンク集 | ブログ内マップ




テーマ : プログラム関数電卓
ジャンル : コンピュータ

キー押下でプログラムをコントロールしたい - Casio Basicプログラミング

Casio Basicプログラミング
<目次>

誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します

追記修正 2017/01/03
[純正] [5800P / FX / CG]
プログラムの一旦停止や実行をキー押下でコントロールしたい。



プログラムは、コードの上から下へ順に実行されるものだ、と理解することは基本だ。逆にプログラムを一旦停止するには、一旦停止の機能をコードとして書く必要がある。

最も簡単な方法は、Casio Basic に備わっている Casio 特有の旧来からの命令の1つ  (出力)命令を使うことだ。
命令には、一旦停止の機能も備わっているので、プログラムを一旦停止したいところで使うことができる。但し、一旦停止を解除するには [EXE] を押す必要があり、他のキーは使えない。なお  命令は出力命令なので空白を含めて何か出力させるようにコードを書く必要がある。何も出力せずに一旦停止のみ行うには ""◢ とすれば良い。

命令を含んた旧来の命令の使いこなしは、Casio Basic 入門38 を参照



Basic コマンドを使うと、キーを押した時のプログラムの動作のコントロールを、より自由度高く行える。

汎用性のあるコードとして、以下の事例を紹介する。
  • 処理を一旦停止させ、何かキーを押している間に処理を先に進める方法
  • 処理を一旦停止させ、何かキーを押すたびに(押している時間に係わらず) 処理を1回だけ実行する方法
  • ◢ 命令と同じ動作を、Basic コマンドで実現する方法
  • ◢ 命令とほぼ同じ機能だが、[EXE] キー以外で一旦停止を解除する方法
  • 処理を一旦停止させ、何かキーを押している間だけ処理を実行する方法
これらのコードは、基本的にキーが押されたことの検出とキーが離されたことの検出、それらの組み合わせで実現するところに共通点がある。具体的には While / WhileEnd ループと Getkey を使って2~4行のコードで実現できる。

⇒ Casio Basic コマンドリファレンス: Whileループ


先ず、以下のプログラムを作り、これを元にそれぞれの課題を実現する方法を付加してゆく。
以下のプログラムは、fx-5800P, fx-9860GII, fx-CG20 のすべてに共通して使える。

ファイル名: C-UP
0→C
While 1
Isz C
Locate 1,1,C
WhileEnd


変数 C0 で初期化し、
Isz CC を1つ増やして Locate 1,1,C で増やした C の値を表示する。
While 1 / WhileEnd による無限ループでこの処理を繰り返す。

プログラム C-UP を実行すると、数字がカウントアップされ、[AC] キーで強制終了する。

==========

何かキーを押している時だけカウントアップを実行し、キーを離したら一旦停止するように、C-UP を改造する。

ファイル名: C-UP1
0→C
While 1
Isz C
Locate 1,1,C
While Getkey=0
WhileEnd

WhileEnd


プログラム C-UP に赤文字の2行を追加した。
 While Getkey=0
 WhileEnd

は、いずれのキーも押されていない時に処理を先に進めない (一旦停止) 機能を実現する。プログラムを一旦停止し、何かキー([AC] キーを除く)を押したら一旦停止を解除する。

さらにキーを押している間カウントアップ処理が継続され、キーを離したら処理が一旦停止する。
なお、カウントアップを1回だけ行うには、キーを押している時間をできるだけ短くする必要がある。言い換えればキーの長押しは、キーを複数回押したのと同じと判定される、つまりキ-リピートを検出する。

ここで、
 While Getkey=0
 WhileEnd

の動作を詳しく見てみる。While Getkey=0 は、While ループの [ループ継続条件]Getkey=0 になっている。
Getkey=0 は、何もキーが押されていないことを意味するから、何もキーが押されていないときこのループが継続する。つまりループがグルグル回っていて、プログラムの処理は先に進まないから、ここでプログラムが一旦停止しているように見える(実際はループ処理が続くのでプログラムは停止していない)。

Getkey は、それが実行された時に押されているキーを判別するコマンドで、押されているキーごとの固有のキーコードを返し、キーが押されていない時は 0 を返す。「返す」というのは、Getkey が その値になっていると思って良い。キーが押されていない場合は 0 になる。
従って、Getkey=0 は、いずれのキーも押されていない条件を示す。

==========

次に、C-UP1 を改造して、キーを押す時間にかかわらず、1回押したらカウントアップを1回だけ行うようにする。

ファイル名: C-UP2
0→C
While 1
Isz C
Locate 1,1,C
While Getkey
WhileEnd

While Getkey=0
WhileEnd

WhileEnd


C-UP1 に青文字の
 While Getkey
 WhileEnd

の2行を追加した。

ここで、
 While Getkey
 WhileEnd
は、何かキーが押されている限りこの2行のループ処理が続き、キーが離された時にこのループを抜ける。つまりキーリピートを抑制する機能を実現する。

Getkey は、このコマンドが実行された時に何かキーが押されていたら 0 以外のキーコードを返す。「返す」とは、Getkey その値であると思って良い。
While Getkey は、While のループ継続条件が Getkey になっていて、何かキーが押されていたら Getkey が 0 以外の値になるから、この時ループは継続され、処理は先へ進まない。キーが離されると、Getkey は 0 になるからループから抜けて、処理は先へ進む。

==========

C-UP2 を改造して、 命令と同じ機能を実現してみる。

つまり、

0→C
While 1
Isz C
Locate 1,1,C◢

WhileEnd

と同じ機能を実現する。


ファイル名: C-UP3
0→C
While 1
Isz C
Locate 1,1,C
While Getkey
WhileEnd

While Getkey≠47
WhileEnd

WhileEnd


C-UP2 の赤文字の部分を変更した。

ここで、、
 While Getkey≠47
 WhileEnd
このループは、キーコード 47 のキー、つまり [EXE] キーが押されない限り、繰り返しを継続して、処理が先に進まない。[EXE] キーが押される時のみ、処理が先へ進む。

命令を使う時は、キーリピートは無いので、
 While Getkey
 WhileEnd
によりキーリピートを抑制している。

この例は、キーコード47の [EXE] キーで処理を1回進めるものだが、他のキーに対応するキーコードを使えば、好きなキーコードで処理を1回進めることができる。汎用の高い方法だ。

==========

プログラム C-UP を改造して、何かキーが押されている時だけ、カウントアップを停止させるようにする。

ファイル名: C-UP4
0→C
While 1
Isz C
Locate 1,1,C
While Getkey
WhileEnd

WhileEnd


このコードで、
 While Getkey
 WhileEnd

は、何かキーが押されている限り、この2行のループが継続することは、上で紹介した。キーが離されている時は、このループは継続しない。

もし、この Getkey が実行されるとき、キーが押されていない場合、[ループ継続条件] である Getkey は 0 なので、ループに1度も入ることなくループを抜ける。




応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 




keywords: プログラム関数電卓、Casio Basic、C.Basic、プログラミング

テーマ : プログラム関数電卓
ジャンル : コンピュータ

最新記事
検索フォーム
最新コメント
カテゴリ
C# (3)
Visitors
Online Counter
現在の閲覧者数:
プロフィール

やす (Krtyski)

Author:やす (Krtyski)
since Oct 30, 2013


プログラム電卓は、プログラムを作って、使ってナンボ!

実際に触って気づいたこと、自作プログラム、電卓プログラミングについて書いています。

なお管理人はカシオ計算機の関係者ではなく、Casio Basicが面白いと感じる1ユーザーです。


写真: 「4駆で泥んこ遊び@オックスフォード郊外」

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

ブロとも申請フォーム

この人とブロともになる

QRコード
QR