代入・条件判断・繰り返し

SET 〈変数〉=〈式〉

〈式〉の値を〈変数〉に代入します。

コマンド“SET”は省略できます。“SET A=B”は、“A=B” と記述してかまいません。

†セグメントの代入には、SETSEG文、COPYSEG文を使います。

配列名の代入

〈変数〉に〈配列名〉を代入することにより、〈変数〉を〈配列名〉の代わりに使えます。ただし、〈変数〉の型はシンボル型または汎用型である必要があります。

SET 〈変数〉=〈配列名〉

例: VARIABLE A[10],B,C[5]

SET B=A # B[5]はA[5]と同じ
SET C[2]=A # C[2][6]はA[6]と同じ

部分配列の代入

〈部分配列〉で指定した配列要素に、〈式〉、〈文字列〉あるいは〈部分配列2〉の値を順番に設定します。設定する数が不足した場合は、最後の値を残り全部に設定します。

SET 〈部分配列〉=〈式〉…
SET 〈部分配列〉=〈文字列〉
SET 〈部分配列〉=〈部分配列2〉

例: SET A[5:4]= a,b,c,d

は、

SET A[5]=a
::
SET A[8]=d

と同じ意味です。

SET A[5:5]="abcd"

は、

SET A[5]='a'
::
SET A[8]='d'
SET A[9]=0

と同じ意味です。

†"abcd"は最後に0が存在することに注意してください。

SET A[5:4]=B[20:4]

は、

SET A[5]=B[20]
::
SET A[8]=B[23]

と同じ意味です。

SET A[0:100]=0

は、

SET A[0]=0
::
SET A[99]=0

と同じ意味です。

SETSEG 〈可変セグメント〉=〈セグメント〉

SEGMENT文で定義した〈可変セグメント変数〉に〈セグメント〉で指定したセグメントを代入します。

†〈仮身セグメント〉は代入することができません。

SETSEG文では、〈可変セグメント〉の内容と〈セグメント〉の内容は位置、表示状態を除いて共有されます。実行後の〈可変セグメント〉の内容は、以下の通りです。〈セグメント〉の内容を参照するため、〈セグメント〉の内容が変更された場合は、その変更が反映されます。

元の位置:〈セグメント〉の元の位置。
位置:〈可変セグメント〉が空の時は〈セグメント〉の位置。空でない時は〈可変セグメント〉の現在位置。
表示状態:〈セグメント〉の表示状態。
内容:〈セグメント〉の内容を参照。

例:
SEGMENT B1,B2
SETSEG B1=ボタン1
SETSEG B2=B1
# セグメントB1、B2はボタン1と同じ内容となる。
SETSEG B1=ボタン2
# セグメントB1、B2はボタン2と同じ内容となる。

◆SETSEG文により同一の形状のセグメントを多数生成できます。また、元になるセグメントの内容を変更することで、生成した多数のセグメントを一度に切り換えることも可能です。

COPYSEG 〈可変セグメント〉=〈セグメント〉…

SEGMENT文で定義した〈可変セグメント〉に〈セグメント〉で指定したセグメントを代入します。

†〈仮身セグメント〉は代入することができません。

COPYSEG文では、〈可変セグメント〉の内容と〈セグメント〉の内容は共有されずに、複製されて独立したセグメントとなります。複数の〈セグメント〉を指定することにより、複数のセグメントを1つにまとめることができます。実行後の〈可変セグメント〉の内容は、〈セグメント〉の内容は参照ではなく複製される点を除いて、SETSEG文と同じです。

例:
SEGMENT F1
COPYSEG F1=図1,図2,図3
# 図1,図2,図3を順に重ねたものがセグメントF1となる。

◆COPYSEG文では〈セグメント〉のデータを実際に複製するため、メモリを多く消費します。特に複製する必要がない場合は、SETSEG文を使用してください。

IF 〈条件式〉

IF〈条件式〉

~ # 〈条件式〉の値が0でないとき実行する

【ELSEIF〈条件式1〉

~ # 〈条件式〉の値が0で、〈条件式1〉の値が0でないとき実行する

【ELSE

~ # 〈条件式〉、〈条件式1〉の値が0のとき実行する

ENDIF

プログラム例

# 現在の年と時間によって場合分けする例
VERSION 3
VARIABLE 年:I, 時間:I
PROLOGUE
SET 年=$DATE/10000 # $DATE
SET 時間=$TIME/10000 # $TIME
IF (年==96)&&(時間<12)
# 1996年の午前のとき
ELSEIF (年==95)&&(時間>=12)
# 1995年の午後のとき
ELSE
# そのほか
ENDIF
END

SWITCH 〈基準式〉

SWITCH 〈基準式〉

CASE 〈式1〉

~ #〈基準式〉==〈式1〉のとき実行する

【BREAK】 # SWITCH文を抜ける

CASE 〈式2〉

~ #〈基準式〉==〈式2〉のとき実行する

【BREAK】 # SWITCH文を抜ける

::

DEFAULT

~ # 〈基準式〉と〈式1〉、〈式2〉…の値が一致しないとき実行する

ENDCASE

〈式〉は、任意の式を記述することができます。

各CASEの処理はBREAK文により終了します。BREAK文を省略した場合は、続くCASEの処理に進みます。

†C言語のSWITCH構造と基本的に同じです。

REPEAT 【〈繰り返し回数式〉】

REPEAT【〈繰り返し回数式〉】

~ # 〈繰り返し回数式〉の回数だけ繰り返す

【BREAK】 # REPEAT文を抜ける

【CONTINUE】 # REPEAT文を継続する

ENDREPEAT

REPEAT~ENDREPEATまでの間を〈繰り返し回数式〉の回数だけ繰り返して実行します。

〈繰り返し回数式〉は、1~最大整数値を取ります。システム変数$CNTにより、繰り返し回数(最初は0)を参照できます。また、$CNTに値を設定することで、強制的に繰り返し回数を変えられます。

〈繰り返し回数式〉は、省略すると無限回繰り返します。この場合、BREAK文でREPEAT文を抜けることになります。

REPEAT文は、CONTINUE文でループを継続できます。CONTINUE文以降は実行されず、ループの最後に制御を移します。

プログラム例

#1+2+3+....+10を求める
VERSION 3
VARIABLE S:I
PROLOGUE
SET S=0
REPEAT 10
SET S=S+$CNT+1
ENDREPEAT
MESG "合計=%d",S
END

出力
合計=55

プログラム例

# 1+2+3+....の結果が100を超える点を求める
VERSION 3
VARIABLE I:I,S:I
PROLOGUE
SET S=0
REPEAT
SET S=S+$CNT+1
IF S>100
SET I=$CNT+1
BREAK # BREAK文。ループを抜ける。
ENDIF
ENDREPEAT
MESG "合計=%d I=%d",S,I
END

出力
合計=105 I=14

WHILE 〈条件式〉

WHILE 〈条件式〉

~ # 〈条件式〉の値が0でない間繰り返す

【BREAK】 # WHILE文を抜ける

【CONTINUE】 # WHILE文を継続する

ENDWHILE

WHILE~ENDWHILEまでの間を、〈条件式〉の値が0でない間繰り返して実行します。

〈条件式〉に常に0でない値を設定すると、無限回繰り返します。この場合、BREAK文でWHILE文を抜けることになります。

WHILE文は、CONTINUE文でループを継続できます。CONTINUE文以降は実行されず、ループの最後に制御を移します。

前のページへ手続き 次のページへ制御

ページの先頭へ戻る

HOME > サポート情報 > 取扱説明書 > 代入・条件判断・繰り返し