Casio Basic入門27

Casio Basic入門
<目次>

誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します
最終更新: 2015/01/23

 4. CasioBasicを使ってみる(続き)

Chapter 5

◆ Chapter 5 の目標: サブルーチンを使いこなす

前回: Casio Basic入門26 を見る


前回は、ドイツ時間を夏時間や標準時間に切り替える機能、それに伴って正しい時間を表示する機能を追加しました。
今回は、前回とほど同様の方針で、LA時間を夏時間に切り替える機能を追加してゆきます。


今回完成させるプログラムを一番下に掲載しているので、先にそれを見て、分かれば先に進んでも良いでしょう。



Chapter5-5
少し異なるルーチンを、わかりやすく追加する(2)

ロサンゼルス時間の夏時間切り替え機能をメニュー番号4にします。同時に、現在は夏時間なのか、標準時間なのかを表示するようにします。

今回は、以下のように 2:PST の右に LA時間の夏時間l設定用のメニューを追加します。

39-TZ5_main    


標準時間を ST、夏時間を DL と表示することにしています。
ST は Standard Time (標準時間) の略で、DL は Daylight Saving (アメリカ流の夏時間の表現) からとっています。

上の画面は、起動時の初期表示で、起動時には標準時間となるようにします。そして、[4] キーを押したら夏時間に切り替わり、もう一度押したら標準時間に戻る...といった動作(トグル動作)にします。

プログラム内部で、現在がLAの夏時間かどうかがわかるようにするために、新しい変数 T を夏時間フラグとして用い、

T = 0 時は標準時間で、T = 1 の時は夏時間

と決めます。


今回は、[4] キーを押してLA時間を夏時間に変更し、ロサンゼルス時間を計算し、その結果を画面表示する機能を追加します。

1.初期化処理
先ず、今回追加する新しい変数 T (ヨーロッパの夏時間フラグ)の初期化を行う。
次に、初期表示の変更を行います。初期表示はサブルーチン TZM で受け持っているので、これを修正する。

2.メニュー番号取得処理
ループの中で Getkey コマンドを使って、[4] キーが押された時、メニュー変数 M4 を入れる。
なお、この処理では、何かキーが押されるまでプログラムは先に進まず、入力待ちの状態になる。

3.入力処理
M=4 の時は、キー入力処理は行なわない。但し、LA時間 U が、夏時間か標準時間に変更されるので、U から「時」と「分」を分離する。

4.時間の計算
M=4 の時、変更されたLA時間を計算する。日本時間とドイツ時間には影響が無いので、これらの計算は行わない。

5.時間表示の更新
時間表示サブルーチン TZD を用いるので、これまでのように日本時間、ドイツ時間、LA時間の表示を更新する。

6.ループ構造
既にある While 1 ~ WhileEnd ループの中に、上記追加コードを入れる。


メインルーチンの擬似的なプログラムは、以下になります。今回の機能追加に必要な修正部分がはっきりします。

[初期設定]

Prog "TZM"  [メイン画面表示]

While 1

  [メニュー番号取得処理]

  If M=0:Then
    [日本時間入力処理] (時間から「時」と「分」の分離も行う)
  Else If M=1:Then
    [ドイツ時間入力処理] (時間から「時」と「分」の分離も行う)
  Else If M=2:Then
    [LA時間入力処理] (時間から「時と「分」の分離も行う)
  Else If M=3:Then
    キー入力処理は行わない。時間から「時」と「分」の分離のみ行う
  Else If M=4:Then
    キー入力処理は行わない。時間から「時」と「分」の分離のみ行う
  IfEnd:
IfEnd
  IfEnd:IfEnd
  IfEnd

  If M=0:Then
    [時間計算]
  Else If M=1:Then
    [時差計算]
  Else If M=2:Then
    [時間計算]
  Else If M=3:Then
    [時間計算]
  Else If M=4:Then
    [時間計算]
  IfEnd:
IfEnd
  IfEnd:IfEnd
  IfEnd

  Prog "TZD"  
[時間の再表示]

WhileEnd


(赤文字は追加・修正部分)



1.初期化処理
今回は、ドイツの夏時間フラグ T を追加したので、これを 0 で初期化しておきます。
T = 0 は、標準時間であることを示します。

0→T

を追加します。



2.メニュー番号取得処理


[4] キーを押すと、メニュー変数 M に 4 を設定する。

メニュー番号取得処理のプログラム
-1→M
Do
Getkey→K
LpWhile K=0
K=25⇒0→M
K=35⇒1→M
K=36⇒2→M
K=37⇒3→M
K=21⇒4→M 
[今回追加]


[4] キーのキーコードは 21 です。




3.入力処理

ドイツ時間を、夏時間 - 標準時間 に切り替えるのみで、キー入力処理は行いません。ドイツ時間が切り替わっても、日本時間やロサンゼルス時間には影響が無いので、この時点での日本時間 J を分離して、「時」を 変数 A に、「分」を変数 B に入れておきます。

Int(J÷100)→A
J-100A→B"


この部分は、M = 3 の時のドイツの夏時間設定と同じなので、Else If M=4IdEnd を追加せずに、以下のようにします。

Else If M=3
Then
Int(J÷100)→A
J-100A→B
IfEnd


この部分を以下のように修正します。

Else If M=3 Or M=4
Then
Int(J÷100)→A
J-100A→B
IfEnd


Or M=4 を追加するだけです。



4.時間計算

最初に、今回追加するプログラムを示します。

Else If M=4
Then
If T:Then
0→T:Q+1→Q
Else
1→T:Q-1→Q
IfEnd
A-Q→C
C<0⇒C+24→C
100C+B→U
Prog "TZM"
IfEnd


ドイツの夏時間計算のルーチンで、P を Q に置き換え、G を U に置き換えるだけです。つまり、基本ロジックは全く同じです。

一応、説明をします。

最初の部分は、夏時間フラグの変更と時差の変更を行います。

  If T:Then
  0→T:Q+1→Q
  Else
  1→T:Q-1→Q
  IfEnd


現状が夏時間の時は、T=1 になっています。
  If T:Then
は、T1 の時の分岐処理なので、
夏時間フラグ:0 にし、時差:Q を1時間増やします。

Else 以下は、現状が標準時間の時の処理で、
夏時間フラグ:T1 にし、時差:Q を1時間減らしています。


この後に続く処理では、LA時間を計算し、時間表示サブルーチン TZM を呼び出します。

  A-Q→C
  C<0⇒C+24→C
  100C+B→U
  Prog "TZM"


入力処理のところで、現在の日本時間 J から「時」:A と「分」 B を算出しています。
LA時間は、日本時間の「時」 A と時差 から計算するので、A - Q でLA時間の「時」が得られます。

この計算の結果が負の数になる場合は、LAはまだ前日と言うことになります。この場合は、得られた負の数に 24 を足せば、24時制の「時」になります。

そこで、A - Q を一旦変数 C に入れておき、それが負の数なら 24 を足しておきます。
   A-Q→C
   C<0⇒C+24→C


LA時間:U は、100C + B で計算できます。
   100C+B→U 

最後に、サブルーチン TZM を呼び出す
   Prog "TZM"


さて、画面表示サブルーチン TZM をLAの夏時間に対応するように変更します。

サブルーチン TZM のプログラム
Locate 1,1,"0:JST"
Locate 1,2,"1:CET"
Locate 1,3,"2:PST"
Locate 13,2,"3:"
Locate 13,3,"4:"
Locate 1,4,"<AC>:QUIT"


If S:Then
Locate 5,2,"ST"   
[1:CET を 1:CEST に表示を切り替える]
Locate 15,2,"DL"  
[3:ST を 3:DL に表示を切り替える]
Else
Locate 5,2,"T "   
[1:CEST を 1:CET に表示を切り替える]
Locate 15,2,"ST"  
[3:DL を 3:ST に表示を切り替える]
IfEnd


If T:Then
Locate 4,3,"D"    
[2:PST を 2:PDT に表示を切り替える]
Locate 15,3,"DL"  
[4:ST を 4:DL に表示を切り替える]
Else
Locate 4,3,"S"    
[2:PDT を 1:PST に表示を切り替える]
Locate 15,3,"ST"  
[4:DL を 4:ST に表示を切り替える]
IfEnd


(赤文字は追加分)

アメリカの標準時間と夏時間の略称は、以下のように共に3文字です。

そこで、略称の2文字目を T と D で切り替えると、標準時間と夏時間の略称表示を切り替えられ、上のプログラムをこれを実行しています。

タイムゾーン標準時間 夏時間 
太平洋時間PSTPDT
山岳部時間MSTMDT
中央部時間CSTCDT
東部時間ESTEDT



5.時間の再表示


時間の再表示は、サブルーチン TZD で行います。これについては変更の必要がありません。

サブルーチン TZD のプログラム
J=-1⇒Return

Locate 8,1,"000"
J⇒Locate 11-Int(log(J)),1,J
Locate 8,2,"0000"
G⇒Locate 11-Int(log(G)),2,G
Locate 8,3,"0000"
U⇒Locate 11-Int(log(U)),3,U




今回までに作成したプログラムは、以下の通り(今回追加した部分を赤文字で示す):

メインルーチン:TZ のプログラム
8→P:17→Q
-1→J:0→G:0→U
0→S:0→T
Prog "TZM"

While 1

-1→M
Do
Getkey→K
LpWhile K=0
K=25⇒0→M
K=25⇒1→M
K=36⇒2→M
K=37⇒3→M
K=21⇒4→M

If M=0:Then
8→X:1→Y:4→D:1→E
Prog "INPI"
Prog "TZC"
X→A:Y→B:Z→J
Else If M=1
Then
8→X:2→Y:4→D:1→E
Prog "INPI"
Prog "TZC"
X→A:Y→B:Z→G
Else If M=2:
Then
8→X:3→Y:4→D:1→E
Prog "INPI"
Prog "TZC"
X→A:Y→B:Z→U
Else If M=3 Or M=4
Then
Int(J÷100)→A
J-100A→B
IfEnd:IfEnd
IfEnd:IfEnd

If M=0:Then
A≧24⇒A-24→A
100A+B→J
A-P→C
C<0⇒C+24→C
100C+B→G
A-Q→C
C<0⇒C+24→C
100C+B→U
Else If M=1
Then
A≧24⇒A-24→A
100A+B→G
A+P→C
C≧24⇒C-24→C
100C+B→J
A+P-Q→C
C<0⇒C+24→C
C≧24⇒C-24→C
100C+B→U
Else If M=2
Then
A≧24⇒A-24→A
100A+B→U
A+Q→C
C≧24⇒C-24→C
100C+B→J
A+Q-P→C
C<0⇒C+24→C
C≧24⇒C-24→C
100C+B→G
Else If M=3
Then
If S:Then
0→S:P+1→P
Else
1→S:P-1→P
IfEnd
A-P→C
C<0⇒C+24→C
100C+B→G
Prog "TZM"
Else If M=4
Then
If S:Then
0→T:Q+1→Q
Else
1→T:Q-1→Q
IfEnd
A-Q→C
C<0⇒C+24→C
100C+B→U
Prog "TZM"

IfEnd:IfEnd
IfEnd:IfEnd
IfEnd

Prog "TZD"

WhileEnd




サブルーチン:TZM のプログラム (画面表示)
Locate 1,1,"0:JST"
Locate 1,2,"1:CET"
Locate 1,3,"2:PST"
Locate 13,2,"3:"
Locate 13,3,"4:"
Locate 1,4,"<AC>:QUIT"

If S:Then
Locate 5,2,"ST"
Locate 15,2,"DL"
Else
Locate 5,2,"T "
Locate 15,2,"ST"
IfEnd

If T:Then
Locate 4,3,"D"
Locate 15,3,"DL"
Else
Locate 4,3,"S"
Locate 15,3,"ST"
IfEnd




サブルーチン:TZC のプログラム (時間を「時」と「分」に分離):変更なし
If Z<100:Then
Z→X:0→Y
Else
Int(Z÷100)→X
Z-100X→Y
IfEnd




サブルーチン TZD のプログラム (時間の表示):変更なし
J=-1⇒Return

Locate 8,1,"0000"
J⇒Locate 11-Int(log(J)),1,J
Locate 8,2,"0000"
G⇒Locate 11-Int(log(G)),2,G
Locate 8,3,"0000"
U⇒Locate 11-Int(log(U)),3,U




今回は、ロサンゼルスの夏時間設定機能を追加しました。
次回は、ヨーロッパのタイムゾーンを変更できるように、機能追加を行います。



つづく...


Casio Basic入門28 / 目次




応援クリックをお願いします。励みになるので...

人気ブログランキングへ


FC2ブログランキングへ



カシオプログラム関数電卓 FX-5800P-N カシオプログラム関数電卓 FX-5800P-N
(2006/09/22)
CASIO(カシオ)

商品詳細を見る



keywords: fx-5800PCasioBasic、世界時間換算, プログラミング入門プログラム関数電卓

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



関連記事

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

コメントの投稿

非公開コメント

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

やす (Krtyski)

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


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

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

おもしろい・役に立つならクリックしてください。励みになります。

人気ブログランキングへ


FC2ブログランキングへ


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

RSSリンクの表示
最新トラックバック
ブロとも申請フォーム

この人とブロともになる

QRコード
QR