コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
ドラキーマカレー ◆3jIC4XsSXrZX
2019/7/13 19:38
質問
【初心者】DATAとREAD
人のプログラムをいじってると、大半のプログラムにDATAやREADがありますが、
どのように使うんですか?

コメント

アバター
ugly777 2019/7/14 0:12 ◆B7lOIJDWuOqi
RESTORE @STRING
WHILE 1
 READ STRI$
 IF STRI$=="" THEN BREAK
 PRINT STRI$
WEND
@STRING
DATA "このけいじばんでは"
DATA "れいのアレのネタをつかうのはひかえるという"
DATA "あんもくのルールがあったりする"
DATA ""

多くの場合必要なDATAの下に空白のDATAを入れて
空白のDATAをREADするとREADをやめたりする
一応解説
WHILE 1〜WEND:
簡単な無限ループ
WHILE〜WEND自体に無限ループは無いので注意
BREAK:
ラベルでないループから抜けるのに使われる
アバター
アオタク 2019/7/14 1:18 ◆6Tx4tgOERFcr
僕もREADとDATAがなかなか分からない段階だったので拝見させて頂きました

そっか、何度も同じように読み込むからFor to nextの形が使いやすいのか...。
そういえば、ループを強制的に進める「コンティニュー」だったっけ(つづり忘れました本当に申し訳ありません)と、ループから強制的に抜ける「BREAK」は、どういった時にハッキリとした差が出てきますか?


(どうでもいいですが、僕がBASIC言語で最初に使えた(覚えた)命令はなぜかFor to nextでした。本当に何故だろうw)
アバター
アオタク 2019/7/14 1:22 ◆6Tx4tgOERFcr
↑の最後で一重カッコの中にもう1つ一重カッコがありますが目を瞑って下さい()
アバター
でんぺん 2019/7/14 2:28 ◆HfSy5ayxtyTa
CONTINUEはループを強制的に次に進めるので条件によって、その行より下の命令を実行しないでいい場合などによく使いますね。

BREAKはループを抜けるので、条件などによってもうループを続ける必要がない場合や無限ループなどから抜けたい場合に使う感じが多いと思います。

READ、DATAで繰り返すときは、BGなどのようにデータ数(サイズ)が決まっている場合はFORを使う事が多くて、メッセージやMML等、長さが固定でない場合はugly777さんの例のように無限ループを作りつつ条件で抜けることが多いんじゃないかなって思います。
アバター
RU-RA 2019/7/14 10:40 ◆WXDJqyOv9yBK
今までこのトピックに出てきた命令を使ったプログラムです。

公開キー[K3CXDKKV]
アバター
Na 2019/7/14 11:12 ◆QoELVrBXBQCI
3号Wikiに初心者講座がありますよ。
一度見てみるといいかも。
http://wiki.hosiken.jp/petc3gou/?Beginner
アバター
アオタク 2019/7/14 12:13 ◆6Tx4tgOERFcr
>>でんぺんさん
つまり、第1ループでのCONTINUEは、その行より下の命令を実行しないで第2ループに入れ、という感じなんですか?

BREAKはそのループをもう完全に抜けるためのものなんですね、ありがとうございます。

READに関しては、DATAの数が決まってたらFOR、そうでなければWHILE 1(途中に条件分岐でBREAK)、という使い方が良いんですね、とても分かりやすくて参考になりました!

3号のサンプルプログラム1にもある「WHILE 1 - WEND」の形で、whileの後は基本的に条件だと思うのですが、そこに1を入れるとどうして無限に続くようになるんですか?1以外だとどう変わってきますか?

(質問が多くて申し訳ない)
アバター
アオタク 2019/7/14 13:03 ◆6Tx4tgOERFcr
>>RU-RAさん
拝見させて頂きました!
1つ1つの行に説明がきっちりあって分かりやすかったです!
(でも僕にとっての1番の収穫は、「WIDTH 16」で文字を大きく出来る、ということでしたw方法が分からなかったのでありがとうございます!)
アバター
アオタク 2019/7/14 13:07 ◆6Tx4tgOERFcr
>>Naさん
はい!しばらく前に一通り見ましたが配列変数がまだよく分かりません...。
取扱い方法がイマイチです。
アバター
Na 2019/7/14 13:51 ◆QoELVrBXBQCI
CONTINUEについて
自分は「NEXTに飛ぶ命令」と理解しています。
例えば
FOR I=1 TO 5
CONTINUE
PRINT I
NEXT
まずI=1からループが始まりますが、CONTINUEがあるのでそれ以降の「PRINT I」は飛ばされ「NEXT」が実行される、つまりI=2になってまたループの初めから実行されます。
(つまり上の例では何も表示されない)

WHILE 1について
WHILEの後には条件が入りますが、そもそも「条件」とは何か。
試しに「条件」とやらを表示してみると、
PRINT (2>0)
2>0なのでこの条件は真になりますが、表示されるのは「1」です。
また、PRINT (0>2) だと「0」が表示されます。
つまり、「条件」は真のとき1、偽のとき0、ということです。
したがって、WHILEやIF、REPEATのような「条件」を書くところには、
基本的に0または1を書くということです。(厳密にはほかの数字もあり)
1は真を表すので、WHILE 1は常に真、つまり無限ループとなります。

ちなみにWHILE〜WENDと似たものにREPEAT〜UNTILがあります。
REPEAT
(処理)
UNTIL 条件
これは条件が真(1)になる「まで」繰り返します。(WHILEの場合と逆)

わかりにくかったらすみません

追記 CONTINUE、BREAKはWHILEやREPEATのループ内でも使えますよ
アバター
でんぺん 2019/7/14 14:08 ◆HfSy5ayxtyTa
基本的にNaさんが回答しているのでWHILE 1だと無限ループするのはそういう理由です。本来はループする条件でループさせる命令ですが1(真)にしているから無限ループになるって事ですね。ちなみにプチコン4では無限ループ専用の命令もあるようです。ちなみにプチコンでは1以上(※ちょっと訂正。数値なら0以外)なら真になります。

CONTINUEもNaさんが書いてるんで僕が書くことはほとんどありませんねー…。

ちなみにWHILEとREPEATでは条件をどこで判断するかも異なります。WHILEはその命令(条件)の書いてある部分である頭、REPEATは条件の書いてある(UNTIL)の箇所で判断するので、WHILEの場合は始めにもし条件に引っかからなければループの中は1回も実行されませんがREPEATは最後に判定があるのでループの中身が最低1回は実行される事になりますね。
アバター
Na 2019/7/14 14:28 ◆QoELVrBXBQCI
厳密には「1以上なら真」ではなく「0でなければ真」です。
-1でも0.00001でも真とみなされます。
さらに言うと文字列は0ではないので真です。(いま発見した)
文字列の長さは関係ありません。
WHILE "むげん"
PRINT "A"
WEND
アバター
でんぺん 2019/7/14 14:36 ◆HfSy5ayxtyTa
そうですねー。厳密には0以外でしたね。わかってましたが、ちょっと勇み足に書き込んでしまいました…。気を付けねば…
アバター
アオタク 2019/7/14 15:13 ◆6Tx4tgOERFcr
>>Naさん
For to next内の場合はNEXTに飛ぶ、という考えですか、そのほうが分かりやすそうですね!僕もそう覚えておきます。

そうだった、1って「真」のことも表すから無限にループ出来るのか。
非公式講座を前に読んでたのですぐ理解出来ました。
教えて頂き本当にありがとうございます。
...となると、WHILE TRUE - WENDの形でも無限ループになるんですか?(一応試してはみます)

REPEAT - UNTILなどについては、ヘルプを見てなんとか理解が出来ました。違いも含めて。
UNTILの「依然として」という意味から(?)覚えました(?)。

とても分かりやすいです、ありがとうございます!
アバター
Na 2019/7/14 15:29 ◆QoELVrBXBQCI
「依然として」?そんな意味あった?
untilは「〜までずっと」という意味ですよ(そのまんま)。

追記 「依然として」はstillですね。
アバター
アオタク 2019/7/14 15:39 ◆6Tx4tgOERFcr
>>でんぺんさん
>>Naさん
0以外の数値と文字列は真になるんですか、ありがとうございます!何かに使えるかもしれない()

はい、条件の場所の違いで、ヘルプを見てはよく混乱してましたw
ところで、「条件判断を先に行って不成立まで続くWHILE」と「成立するまで先に処理を行うREPEAT」は、一見すると、まだどちらか片方の命令しか必要ないように見えなくもないですが、どういった場合になってくるとそれぞれの命令の使い分けが必要になりますか?
アバター
アオタク 2019/7/14 15:46 ◆6Tx4tgOERFcr
WHILE TRUE - WEND
REPEAT - UNTIL 0
REPEAT - UNTIL FALSE
これでも無限に動きましたが、やはりWHILEのほうが分かりやすく書けそうですね。

>>Naさん
あっ()
ごめんなさいw
stillでしたねww
(混じった)
アバター
アオタク 2019/7/14 15:54 ◆6Tx4tgOERFcr
ちゃんと確認してから投稿するべきだった()
アバター
こういち 2019/7/14 16:11 ◆ou0jbJnEJ0Kb
文字列は数値と比較すると3なので真として扱われるってMIKIさんが言ってた。(本当かどうかは置いておく)
ついでにラベルも文字列なので真。
アバター
アオタク 2019/7/14 16:23 ◆6Tx4tgOERFcr
>>こういちさん
そういうことなんですね...なるほど。
ラベルもOKとは......。

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -