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の状態じょうたいで、画面がめん39123ENTERエンター入力にゅうりょくしてください。

そうすると、実行じっこうれい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なら、XYの2つの変数へんすうに、ユーザーが入力にゅうりょくした数値すうち代入だいにゅうします。

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

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

2つの数値すうち変数へんすうXYあたいを、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つの文字もじれつではなく、abcdefの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の書籍購入ページに移動します。