HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2023
1012
adc変数の独立5解決


adc

リンク

2023/10/12(Thu) 12:18:09|NO.100205

またもすみません。
前回の最大値の件である問題が発生して
Enterkeyを二回押すと前回の変数(ac)が0と誤判定してしまうのと、
「戻すとき」にどうしても変数を独立させたいのでいろいろ調べてみたところ
#module
#defcfunc
#global
が出てきてそれの説明を見てよくわかりませんでした。
またもしこれ以外のやり方があればそれも教えてくれると嬉しいです。



この記事に返信する


沢渡

リンク

2023/10/12(Thu) 17:00:32|NO.100206

こちらのスレッド↓での話の続きでしょうか?
https://hsp.tv/play/pforum.php?mode=all&num=100181
新スレを立てるのではなく、先のスレッドに続けて書いた方が良いと思いますが。

さて、前回のスレのコードを見ましたが、
acというのは「前回入力した値を記憶するための変数」でいいのでしょうか?
(となると、どうして「if a<ac」だとか「if a>ac」などというように
 aとacの大小を比較する必要があるのか、よくわかりませんが)

「Enterkeyを二回押すと前回の変数(ac)が0と誤判定してしまう」とは、
どういうことでしょうか?
先のコードを見た限り、一回目のEnterを入力したらinputの内容が0になるので、
そのままもう一回Enterを押してしまうと「0」が入力されたことになり、
それが問題だということでしょうか?
だとすれば、Enterが入力された時にinputに割り当てられているaの値を調べ、
それが0だったら入力を受け付けないようにすれば良いと思いますが。

また、「変数を独立」とは、どういうことなのか?
具体的にどんなことなのか、よくわかりません。
先のコードを見た限り、入力を一回だけ取り消せるようになっているようですが、
これを何回でも取り消せるようにしたいということでしょうか?
(少なくとも#moduleだとか#globalだとか#defcfuncだとかが出る幕はない筈)



adc

リンク

2023/10/13(Fri) 13:06:29|NO.100217

すみません、説明しにくいのでプログラムを送って説明します。

screen 0,1280,650,0,0,0 onkey gosub*jump *start q=0 w=q+20 repeat circle q,180,-60,180-w circle 480,-60,480-w,q circle q,420,-60,420-w circle 870,-60,870-w,q color 0,0,0 q=q+200 if q>2000{ break} loop objsize 100 pos 0-r,623 a=0 : input a if c>999{ z=20 if c>9999{ z+20 if c>99999{ z+20}}} font "MS Pゴシック", 180-z, 1 pos 500-(z/2),200+(1*z/3) mes c if c>0 and b>0{ pos 500-(z/3),440+(1*z/3) mes c/b} if c<=0 and b<=0{ pos 500,440 mes 0} font "MS Pゴシック", 180-(2*z/3), 1 pos 900-(z/2),200 mes b pos 900-(z/2),440 mes d stop *jump if wparam=27 and e=0 and b>=1{ dialog"戻しますか?",3 if stat=6{ b=b-1 c=c-ac e=e+1 if ac>d : d= cls goto*start}} if wparam=13 { objsel -1 if a>=ac : d=a if a<ac : d=ac b=b+1 ac=a c=c+a e=0 r=9 cls goto*start} stop
3段落のことですがほぼほぼ沢渡さんのことはあたっています。

また4段落ですが私もやったことがないのでわかりませんが
dを独立させて周りから影響を受けないようにしたいという意味です。



沢渡

リンク

2023/10/13(Fri) 15:15:09|NO.100218

そのコードを見た感じ、dというのは「これまでに入力した最大の値」
ということでいいですか?
またeというのは「戻す」を実行したフラグで、
これが1の時は「戻す」を無効にする、ということでいいですか?

今回の質問の内容は、「戻す」を実行した時に、
dの値も前の状態に戻したいということでしょうか?
(おそらくそれを期待して『独立』なるものをさせたいのだと推察します)
だったら、値を入力した時にdの内容を別な変数に記憶させておき、
「戻す」を実行した時にdをその内容に戻せばいいと思いますが。

以下、これらのことを踏まえて改変してみましたが、これで良いでしょうか?

screen 0,1280,650,0,0,0 onkey *jump //←*jumpの部分はサブルーチンという扱いではなくなったのだから、onkey gosubではなくただのonkeyにすべき b=0 : c=0 : d=0 //dはこれまでに入力した値の最大値 d_old=0 //d_oldは値を入力する前のdの値 *start q=0 w=q+20 repeat circle q,180,-60,180-w circle 480,-60,480-w,q circle q,420,-60,420-w circle 870,-60,870-w,q color 0,0,0 q=q+200 if q>2000{ break} loop objsize 100 pos 0,623 a=0 : input a objsel stat if c>999 { z=20 if c>9999{ z+20 if c>99999{ z+20 } } } font "MS Pゴシック", 180-z, 1 pos 500-(z/2),200+(1*z/3) mes c if c>0 and b>0 { pos 500-(z/3),440+(1*z/3) mes c/b } if c<=0 and b<=0 { pos 500,440 mes 0 } font "MS Pゴシック", 180-(2*z/3), 1 pos 900-(z/2),200 mes b pos 900-(z/2),440 mes d stop *jump if wparam=27 and e=0 and b>=1 { dialog"戻しますか?",3 if stat=6 { b=b-1 c=c-ac e=e+1 d=d_old cls goto *start } } if wparam=13 { if a { //aが0以外の時に以下を実行する objsel -1 d_old=d //dの値を記憶しておく if a>d : d=a //最大値を更新 b=b+1 ac=a c=c+a e=0 r=9 cls goto *start } } stop



adc

リンク

2023/10/14(Sat) 10:21:56|NO.100225

ありがとうございます。
初めて(2回目)これを使いましたが質問できて良かったです。



adc

リンク

2023/10/20(Fri) 09:49:39|NO.100313

すみません。題名とは異なるのですが
赤外線を使ってその変数を(a)に代入することはできるのでしょうか。
(使うのはarduino基盤です。)



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.100205への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

ONION software Copyright 1997-2023(c) All rights reserved.