Syn BASICのプログラムの作り方(9)

このページをスマートフォンなどでご覧になる場合は、画面を横長にする方が読みやすくなる事があります。
目次へ  前のページへ (1) (2) (3) (4) (5) (6) (7) (8) (9) 次のページへ
2024年10月30日 公開

記事きじにふりがなを付つけたいときは、次つぎのチェックボックスをクリックしてください。

3-9.INPUTインプット文ぶんについてさらに詳くわしく

前のページで、プログラム実行じっこう時じにユーザーが入力にゅうりょくした値あたいを変数へんすうに代入だいにゅうできるINPUTインプット文ぶんについて紹介しょうかいしましたが、この節せつでは、INPUTインプット文ぶんのさらに詳くわしい使つかい方かたについて説明せつめいします。

3-9-1.数値すうち変数へんすうのINPUTインプット文ぶんで数値すうち以外いがいの値あたいを入力にゅうりょくしたら

既すでに説明せつめいした通とおり、INPUTインプットの後あとに変数へんすう名めいを付つけると、ユーザーが入力にゅうりょくした値あたいを、指定していした変数へんすうに代入だいにゅうする事ことができます。例たとえば、INPUTインプット Aなら、ユーザーが入力にゅうりょくした値あたいを、Aという数値すうち変数へんすうに代入だいにゅうします。

INPUTインプット AというINPUTインプット文ぶんで、数値すうちの入力にゅうりょくをユーザーに求もとめている場合ばあいに、ユーザーが、数値すうちとは解釈かいしゃくできない文字もじ列れつ(例たとえばabc)を入力にゅうりょくすると、どうなるでしょうか?

実際じっさいに試ためしてみましょう。下したの画面がめん39で、INPUTインプット A ENTERエンターと入力にゅうりょくし、次つぎにabcENTERエンターと入力にゅうりょくしてください。

画面39、練習れんしゅう用よう画面がめん

INPUTインプット AENTERエンターと入力にゅうりょくし、次つぎにabcENTERエンターと入力にゅうりょくしてください。

そうすると、実行じっこう例れい67に示しめす様ように、?Redoリドゥ fromフロム startスタートと表示ひょうじされるはずです。

Syn BASIC Version 0.31α ©2021-2022 Hiroshi Tanigawa(Synapse)
Ok
INPUT A ← INPUT文を入力
? abc ← 数値が要求されているのにabcと入力
?Redo form start ← 再入力が要求された
? 
実行例67、INPUTインプット AENTERエンター、abcENTERエンターと順じゅんに入力にゅうりょくした例れい

このRedoリドゥ fromフロム startスタートというメッセージは、「最初さいしょから(入力にゅうりょくを)し直なおしてください」という意味いみです。このメッセージが出でたら、もう一度いちど入力にゅうりょくし直なおす必要ひつようがあります。

それでは、実際じっさいに入力にゅうりょくし直なおしてみましょう。実行じっこう例れい67の状態じょうたいで、画面がめん39で123ENTERエンターと入力にゅうりょくしてください。

そうすると、実行じっこう例れい68に示しめす様ように、今度こんどはRedoリドゥ fromフロム startスタートというメッセージは表示ひょうじされずに、今度こんどはOKオーケーが表示ひょうじされます。これで、数値すうち変数へんすうAに、123が代入だいにゅうされます。

Syn BASIC Version 0.31α ©2021-2022 Hiroshi Tanigawa(Synapse)
Ok
INPUT A
? abc
?Redo form start
? 123 ← 今度は数字を入力
Ok ← INPUT文の実行が終わり、Okと表示された

実行例68、Redoリドゥ fromフロム startスタートと表示ひょうじされた後あとに123ENTERエンターと入力にゅうりょくした例れい

本当ほんとうにAに123が代入だいにゅうされたかを確認かくにんするには、さらにPRINTプリント AENTERエンターと入力にゅうりょくして、Aの値あたいを表示ひょうじしてください。

3-9-2.1つのINPUTインプット文ぶんで複数ふくすうの変数へんすうに代入だいにゅう

複数ふくすうの変数へんすうをカンマ(,)で区切くぎって並ならべると、1つのINPUTインプット文ぶんで、複数ふくすうの変数へんすうに、ユーザーが入力にゅうりょくした値あたいを代入だいにゅうできます。

例たとえば、INPUTインプット X,Yなら、XとYの2つの変数へんすうに、ユーザーが入力にゅうりょくした数値すうちを代入だいにゅうします。

INPUTインプット X,Y,Zという具合ぐあいに、3つの変数へんすうを指定していする事こともできます。

INPUTインプット NAME$ドル,AGEの様ように、数値すうち変数へんすうと文字もじ列れつ変数へんすうを混まぜる事こともできます。

2つの数値すうち変数へんすうXとYの値あたいを、INPUTインプット文ぶんで入力にゅうりょくする場合ばあいついて、実際じっさいに試ためしてみましょう。下したの画面がめん40で、INPUTインプット X,YENTERエンター、3,8ENTERエンター、PRINTプリント X,YENTERエンターと、順じゅんに入力にゅうりょくしてください。

画面40、練習れんしゅう用よう画面がめん

INPUTインプット X,YENTERエンター、3,8ENTERエンター、PRINTプリント X,YENTERエンターと、順じゅんに入力にゅうりょくしてください。

そうすると、実行じっこう例れい69に示しめす表示ひょうじになるはずです。

Syn BASIC Version 0.31α ©2021-2022 Hiroshi Tanigawa(Synapse)
Ok
INPUT X,Y ← XとYの値を入力するINPUT文
? 3,8 ← 3と8を入力する
Ok
PRINT X,Y ← XとYの値を確認するためのPRINT文
3       8 ← 3と8が代入されていた
Ok

実行例69、INPUTインプット X,YENTERエンター、3,8ENTERエンター、PRINTプリント X,YENTERエンターと、順じゅんに入力にゅうりょくした例れい

この例れいで示しめす様ように、1つのINPUTインプット文ぶんで2つの変数へんすうの値あたいを入力にゅうりょくする場合ばあいは、カンマで区切くぎって、複数ふくすうの変数へんすうの値あたいを入力にゅうりょくします。

ユーザーは、INPUTインプット文ぶんで指定していした変数へんすうの数かずだけ、値あたいを入力にゅうりょくする必要ひつようがあります。

INPUTインプット X,Yと、2つの変数へんすうの値あたいを入力にゅうりょくするINPUTインプット文ぶんで、3ENTERエンターと1つの値あたいを入力にゅうりょくしたり、3,8,5ENTERエンターと3つの値あたいを入力にゅうりょくしたりすると、Redoリドゥ fromフロム startスタートのメッセージが出でて、入力にゅうりょくし直なおす必要ひつようがあります。

3-9-3.INPUTインプット文ぶんでメッセージを表示ひょうじする方法ほうほう

前のページで少すこし説明せつめいしたのですが、INPUTインプット文ぶんでユーザーに入力にゅうりょくを求もとめる際さいに、メッセージを表示ひょうじさせることができます。

例たとえば、INPUTインプット "数字すうじを入力にゅうりょくしてください: ",Aとすると、ユーザーに変数へんすうAの値あたいを入力にゅうりょくしてもらう際さいに、数字すうじを入力にゅうりょくしてください: というメッセージを表示ひょうじする事ことができます。

実際じっさいに試ためしてみましょう。下したの画面がめん41で、INPUTインプット "数字すうじを入力にゅうりょくしてください: ",AENTERエンターと入力にゅうりょくしてください。

画面41、練習れんしゅう用よう画面がめん

INPUTインプット "数字すうじを入力にゅうりょくしてください: ",AENTERエンターと入力にゅうりょくしてください。

そうすると、実行じっこう例れい70に示しめす様ように、数字すうじを入力にゅうりょくしてください: というメッセージを表示ひょうじしてから、入力にゅうりょく状態じょうたいになります。

Syn BASIC Version 0.31α ©2021-2022 Hiroshi Tanigawa(Synapse)
Ok
INPUT "数字を入力してください: ",A
数字を入力してください: 
        ↑ メッセージ表示後に入力状態になる
実行例70、INPUTインプット "数字すうじを入力にゅうりょくしてください: ",AENTERエンターと入力にゅうりょくした例れい

先程さきほどは、メッセージの文字もじ列れつと変数へんすうの間あいだをカンマ(,)で区切くぎりましたが、セミコロン(;)で区切くぎる事こともできます。セミコロンを使つかうと、メッセージに続つづいてクエスチョンマーク(?)が表示ひょうじされます。

実際じっさいに試ためしてみましょう。下したの画面がめん42で、INPUTインプット "Xの値あたいは";XENTERエンターと入力にゅうりょくしてください。

画面42、練習れんしゅう用よう画面がめん

INPUTインプット "Xの値あたいは";XENTERエンターと入力にゅうりょくしてください。

そうすると、実行じっこう例れい71に示しめす様ように、Xの値あたいはというメッセージの後あとに、さらに?を表示ひょうじしてから、入力にゅうりょく状態じょうたいになります。

Syn BASIC Version 0.31α ©2021-2022 Hiroshi Tanigawa(Synapse)
Ok
INPUT "Xの値は";X
Xの値は? 
    ↑ メッセージと?を表示してから入力状態になる
実行例71、INPUTインプット "Xの値あたいは";XENTERエンターと入力にゅうりょくした例れい

3-9-4.文字もじ列れつ変数へんすうのINPUTインプット文ぶんで、カンマを含ふくむ文字もじ列れつを入力にゅうりょくする方法ほうほう

INPUTインプット A$ドルを実行じっこうすると、ユーザーが入力にゅうりょくした文字もじ列れつを、文字もじ列れつ変数へんすうA$ドルに代入だいにゅうします。この際さい、ユーザーが入力にゅうりょくした文字もじ列れつの中なかに、カンマ(,)が含ふくまれていると、正常せいじょうに処理しょりされません。

実際じっさいに試ためしてみましょう。下したの画面がめん43で、INPUTインプット A$ドルENTERエンター、abc,defENTERエンターと、順じゅんに入力にゅうりょくしてください。

画面43、練習れんしゅう用よう画面がめん

INPUTインプット A$ドルENTERエンター、abc,defENTERエンターと、順じゅんに入力にゅうりょくしてください。

そうすると、実行じっこう例れい72に示しめす表示ひょうじになります。

Syn BASIC Version 0.31α ©2021-2022 Hiroshi Tanigawa(Synapse)
Ok
INPUT A$ ← 1つの文字列を入力するためのINPUT文
? abc,def ← abcとdefの2つの文字列と解釈される
?Redo form start ← エラー表示
?  ← 再度の入力が求められる
実行例72、INPUTインプット A$ドルENTERエンター、abc,defENTERエンターと、順じゅんに入力にゅうりょくした例れい

この様ように、Redoリドゥ fromフロム startスタートのエラー表示ひょうじが出でて、文字もじ列れつの再さい入力にゅうりょくが求もとめられます。

これは、入力にゅうりょくした文字もじ列れつが、abc,defという1つの文字もじ列れつではなく、abcとdefの2つの文字もじ列れつがカンマで区切くぎられていると解釈かいしゃくされるからです。INPUTインプット文ぶんでは、1つの文字もじ列れつの入力にゅうりょくを期待きたいしているのに、2つの文字もじ列れつを入力にゅうりょくしたのでRedoリドゥ fromフロム startスタートのメッセージが表示ひょうじされたのです。

どうすればカンマを含ふくんだ文字もじ列れつを入力にゅうりょくできるかというと、ダブルクオーテーションマーク(")で囲かこめばいいのです。

引ひき続つづき、画面がめん43で、"abc,def"ENTERエンターと入力にゅうりょくすると、今度こんどはRedoリドゥ fromフロム startスタートのエラーメッセージは出でずに、INPUTインプット文ぶんの実行じっこうが終了しゅうりょうします。その後あとにPRINTプリント A$ドルENTERエンターと入力にゅうりょくして文字もじ列れつ変数へんすうA$ドルの値あたいを調しらべると、ちゃんとabc,defが表示ひょうじされます。(実行じっこう例れい73参照さんしょう)

Syn BASIC Version 0.31α ©2021-2022 Hiroshi Tanigawa(Synapse)
Ok
INPUT A$
? abc,def
?Redo form start
? "abc,def" ← "で囲って文字列を入力
Ok ← エラーにならずにINPUT文の実行が終了
PRINT A$ ← PRINT文でA$の値を確認
abc,def ← abc,defが表示される

実行例73、続つづけて"abc,def"ENTERエンター、PRINTプリント A$ドルENTERエンターと順じゅんに入力にゅうりょくした例れい

この様ように、入力にゅうりょくする文字もじ列れつの中なかにカンマが含ふくまれると、ダブルクオーテーションマークで囲かこって入力にゅうりょくしないと正常せいじょうに入力にゅうりょくできないのですが、入力にゅうりょくする文字もじ列れつの先頭せんとうや末尾まつびにスペースが含ふくまれる文字もじ列れつを入力にゅうりょくする場合ばあいにも、問題もんだいが発生はっせいします。

下したの画面がめん44で、INPUTインプット A$ドルENTERエンター、 abc ENTERエンター(abcの前後ぜんごにスペースを1つずつ)と入力にゅうりょくしてください。

画面44、練習れんしゅう用よう画面がめん

INPUTインプット A$ドルENTERエンター、 abc ENTERエンター(abcの前後ぜんごにスペースを1つずつ)と入力にゅうりょくしてください。

そうすると、実行じっこう例れい74の様ような表示ひょうじになります。

Syn BASIC Version 0.31α ©2021-2022 Hiroshi Tanigawa(Synapse)
Ok
INPUT A$ ← 文字列を入力するINPUT文
?  abc  ← abcの前後にスペース
Ok ← Okが出て、INPUT文の実行が終了した

実行例74、INPUTインプット A$ドルENTERエンター、 abc ENTERエンターと入力にゅうりょくした例れい

Okオーケーと表示ひょうじされて、INPUTインプット文ぶんの実行じっこうが終了しゅうりょうしているので、一見いっけん、正ただしくA$ドルに abc (abcの前後ぜんごにスペース)という文字もじ列れつが代入だいにゅうされたように思おもえます。

ここで、変数へんすうA$ドルの値あたいを表示ひょうじして確認かくにんしてみましょう。普通ふつうならPRINTプリント A$ドルを実行じっこうするのですが、それでは、A$ドルの末尾まつびにスペースが入はいっている事ことが分わかりません。

そこで、PRINTプリント "#";A$ドル;"#"を実行じっこうする事ことにします。つまり、A$ドルに代入だいにゅうされている文字もじ列れつの前後ぜんごに、#を表示ひょうじさせるのです。

こうすれば、例たとえばA$ドルに abc (abcの前後ぜんごにスペース)と正ただしく入力にゅうりょくされていれば、画面がめんには# abc #と、#、スペース、abc、スペース、#という文字もじ列れつが表示ひょうじされるはずです。もしA$ドルの値あたいが、 abcと、abcの後あとにスペースがなかったり、abc と、abcの前まえにスペースがなかったりすると、表示ひょうじはそれぞれ、# abc#や#abc #となり、スペースが抜ぬけている事ことがはっきりと分わかります。

それでは、画面がめん44で、引ひき続つづきPRINTプリント "#";A$ドル;"#"ENTERエンターと入力にゅうりょくしてください。

そうすると、実行じっこう例れい75の様ような表示ひょうじになります。

Syn BASIC Version 0.31α ©2021-2022 Hiroshi Tanigawa(Synapse)
Ok
INPUT A$
?  abc
Ok
PRINT "#";A$;"#" ← A$の値を確認するPRINT文
#abc# ← abcの前後にスペースがない
Ok

実行例75、引ひき続つづきPRINTプリント "#";A$ドル;"#"ENTERエンターと入力にゅうりょくした例れい

この様ように、#abc#と表示ひょうじされるので、A$ドルの値あたいは、前後ぜんごにスペースがないabcだった事ことになります。

この例れいで示しめす様ように、INPUTインプット文ぶんで文字もじ列れつを入力にゅうりょくする際さいは、先頭せんとうのスペースと末尾まつびのスペースは、削除さくじょされてしまいます。

先頭せんとうと末尾まつびのスペースが削除さくじょされないようにするためには、文字もじ列れつの前後ぜんごを"で囲かこみます。例たとえば、 abc という具合ぐあいに、abcの前後ぜんごにスペースが1つずつ付ついた文字もじ列れつを入力にゅうりょくしたい場合ばあいは、" abc "という具合ぐあいに、文字もじ列れつの前後ぜんごに"を付つけてください。

それでは、実際じっさいに試ためしてみましょう。下したの画面がめん45で、INPUTインプット A$ドルENTERエンター、" abc "ENTERエンター(abcの前後ぜんごにスペース)、PRINTプリント "#";A$ドル;"#"ENTERエンターと、順じゅんに入力にゅうりょくしてください。

画面45、練習れんしゅう用よう画面がめん

INPUTインプット A$ドルENTERエンター、" abc "ENTERエンター(abcの前後ぜんごにスペース)、PRINTプリント "#";A$ドル;"#"ENTERエンターと、順じゅんに入力にゅうりょくしてください。

今度こんどは、実行じっこう例れい76に示しめす様ように、# abc #と、abcの前後ぜんごにスペースが表示ひょうじされるはずです。この様ように、"で文字もじ列れつを囲かこむ事ことで、先頭せんとうや末尾まつびのスペースを正ただしく入力にゅうりょくできる事ことが、確認かくにんできました。

Syn BASIC Version 0.31α ©2021-2022 Hiroshi Tanigawa(Synapse)
Ok
INPUT A$
? " abc " ← 文字列を"で囲む
Ok
PRINT "#";A$;"#"
# abc # ← abcの前後にスペースがある
Ok

実行例76、INPUTインプット A$ドルENTERエンター、" abc "ENTERエンター、PRINTプリント "#";A$ドル;"#"ENTERエンターと順じゅんに入力にゅうりょくした例れい

3-10.RUNラン命令めいれいやNEWニュー命令めいれいを実行じっこうすると変数へんすうが消きえる

リスト9に示しめす、変数へんすうXの値あたいを画面がめんに表示ひょうじするプログラムが入力にゅうりょくしてある状態じょうたいで、X=1ENTERエンター、RUNランENTERエンターと順じゅんに入力にゅうりょくすると、何なにが表示ひょうじされるでしょうか?ちょっと、考かんがえてみてください。

X=1で、変数へんすうXに1を代入だいにゅうしてからRUNランでプログラムを実行じっこうしているので、画面がめんには1が表示ひょうじされそうな気きもするのですが···。

リスト9、変数へんすうXの値あたいを画面がめんに表示ひょうじするプログラムCOPY
10 PRINT X

それでは、実際じっさいに試ためしてみましょう。下したの画面がめん46で、10 PRINTプリント XENTERエンター、X=1ENTERエンター、RUNランENTERエンターと、順じゅんに入力にゅうりょくしてください。

画面46、練習れんしゅう用よう画面がめん

10 PRINTプリント XENTERエンター、X=1ENTERエンター、RUNランENTERエンターと、順じゅんに入力にゅうりょくしてください。

そうすると、実行じっこう例れい77に示しめす様ように、1ではなく0が表示ひょうじされます。

Syn BASIC Version 0.31α ©2021-2022 Hiroshi Tanigawa(Synapse)
Ok
10 PRINT X ← リスト9を入力
X=1 ← Xに1を代入
Ok
RUN ← プログラムを実行
0 ← Xの値は0だった
Ok

実行例77、Xに1を代入だいにゅうした後あとにリスト9のプログラムを実行じっこうした例れい

これは、RUNラン命令めいれいでプログラムを実行じっこうする際さいに、プログラムの実行じっこうに先立さきだって、全すべての変数へんすうを消去しょうきょするからです。リスト9のプログラムを実行じっこうし始はじめる時ときには、変数へんすうXは、消去しょうきょされてなくなっています。一度いちども代入だいにゅうされていない数値すうち変数へんすうを読よむと、0が読よみだされるので、10 PRINTプリント Xで、0が表示ひょうじされたのです。

ちなみに、一度いちども代入だいにゅうされていない文字もじ列れつ変数へんすうを読よむと、空から文字もじ列れつ(文字数もじすうが0文字もじの文字もじ列れつ)が読よみだされます。

参考さんこう:RUNラン命令めいれいは、プログラムを実行じっこうする前まえに、全すべての変数へんすうを消去しょうきょして、変数へんすうが全まったくない状態じょうたいでプログラムを実行じっこうするのですが、これを、「全すべての数値すうち変数へんすうに0を代入だいにゅうし、全すべての文字もじ列れつ変数へんすうに空から文字もじ列れつを代入だいにゅうしてからプログラムを実行じっこうする」と考かんがえても、プログラムの実行じっこう結果けっかに違ちがいはありません。

RUNラン命令めいれいでプログラムを実行じっこうする時とき以外いがいに、NEWニュー命令めいれいでプログラムを消去しょうきょする際さいにも、全すべての変数へんすうが消去しょうきょされます。

次回じかいから、プログラムの流ながれの制御せいぎょに関かんして説明せつめいする予定よていです。

目次へ  前のページへ (1) (2) (3) (4) (5) (6) (7) (8) (9) 次のページへ

関連ページ

PCBgogoのバナー
Arduino 電子工作
このサイトの記事が本になりました
ISBN:978-4-7775-1941-5
→工学社の書籍の内容の紹介ページ
本のカバーの写真か書名をクリックすると、Amazonの書籍購入ページに移動します。
電子工作で学ぶ論理回路入門
このサイトの中の人が書いた本です。
ISBN:978-4-7775-2280-4
→工学社の書籍の内容の紹介ページ
→この本の紹介記事
本のカバーの写真か書名をクリックすると、Amazonの書籍購入ページに移動します。