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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
1206
mamo最大値を記録したい9解決


mamo

リンク

2010/12/6(Mon) 09:56:53|NO.36142

メモリー使用率を使って最大値を記録しようと、とりあえず目で見えるように

input a,160,18 input b,160,18 *si a= sysinfo (33) if a>b { b=a objprm 1,b } objprm 0,a wait 10 goto *si

数字を寄せにしようと

input a,160,18 input b,160,18 *si a= sysinfo (33) if a>b { b=a objprm 1,"メモリー使用率 (最大) - "+strf("%4d",b)+"%" } objprm 0,"メモリー使用率 (現在) - "+strf("%4d",a)+"%" wait 10 goto *si
下のように付け加えると if a>b が無視(?)されてしまいます。
なぜなのですか;



この記事に返信する


晩御飯

リンク

2010/12/6(Mon) 13:13:26|NO.36144

5行目でaにメモリ使用率が代入されています。
一方8行目ではbに"メモリー使用率 (最大)-何とか%"という文字列が代入されます。
これを比較しても意図した動作にはなりませんよね。
メモリ使用率と表示するメッセージは別々に持つようにしてみて下さい。

#define NOW 0 #define MAX 1 dim value, 2 // 使用率 sdim message, 2 // 表示する文字列 dim id, 2 // オブジェクトID input message(NOW), 160, 18 : id(NOW) = stat // 現在 input message(MAX), 160, 18 : id(MAX) = stat // 最大 repeat value(NOW) = sysinfo( 33 ) if( value(NOW) > value(MAX) ) : value(MAX) = value(NOW) // 最大使用率の更新 // 表示する文字列の更新 message(NOW) = strf( "メモリー使用率 (現在) - %3d%%", value(NOW) ) message(MAX) = strf( "メモリー使用率 (最大) - %3d%%", value(MAX) ) // オブジェクトの更新 objprm id(NOW), message(NOW) objprm id(MAX), message(MAX) await 10 getkey esc, 27 : if esc : break // ESC で終了 loop end
(このプログラムだと変数messageはいらないですけどね)



mamo

リンク

2010/12/6(Mon) 20:36:50|NO.36148

strf("%4d",b)は寄せているだけではないのですね;
スッキリしました、ありがとうございます。



通りすがり

リンク

2010/12/7(Tue) 01:45:42|NO.36151

>strf("%4d",b)は寄せているだけではないのですね

直接の原因は strf 関数を使った事ではなく
整数型の変数を指定したインプットボックスに

>objprm 1,"…"

の様に文字列を設定している事です。



通りすがり

リンク

2010/12/7(Tue) 03:27:05|NO.36152

>一方8行目ではbに"メモリー使用率 (最大)-何とか%"という文字列が代入されます。
>これを比較しても意図した動作にはなりませんよね。

インプットボックスを作る時に設定された変数とは違う型の値を入力しても
ボックス内の表示は変わりますが、関連付けられた変数の型までは変わらないようです。
(元々の型で表せる範囲までを左から取り出して変換する見たい)

type = "", "label", "str", "double", "int" a = 123 input a, 100, 20 mes "元の変数の値 : " + a mes "元の変数の型 : " + type(vartype(a)) objprm 0, "ABC" ; 整数型変数が設定されたインプットに文字列を設定 mes "変更したインプットの値 : \"ABC\"" mes "変更後の変数の値 : " + a mes "変更後の変数の型 : " + type(vartype(a)) mes b = "ABC" input b, 100, 20 mes "元の変数の値 : " + b mes "元の変数の型 : " + type(vartype(b)) objprm 1, 123 ; 文字列型変数が設定されたインプットに整数を設定 mes "変更したインプットの値 : 123" mes "変更後の変数の値 : " + b mes "変更後の変数の型 : " + type(vartype(b))
ですので今回の質問の場合(objprm 1,"メモリ…"...objprm 0,"メモリ…")は
数値に変換できる物は左端にはないので、objprm が設定する値は 0 となり、
a>b は 0>0 で比較されていたと言う事です。

input a,160,18 input b,160,18 *si a= sysinfo (33) if a>b { b=a objprm 1,"メモリー使用率 (最大) - "+strf("%4d",b)+"%" } objprm 0,"メモリー使用率 (現在) - "+strf("%4d",a)+"%" title "a : " + a + " , b : " + b ; 変数の内容を表示 wait 10 goto *si



ANTARES

リンク

2010/12/7(Tue) 23:29:33|NO.36154

>a>b は 0>0 で比較されていたと言う事です。
「a= sysinfo (33)」があるので、それは違うでしょう。

input a,160,18 input b,160,18 *si a= sysinfo (33) dialog "a="+a+" b="+b,2: if stat==7: end if a>b { b=a objprm 1,"メモリー使用率 (最大) - "+strf("%4d",b)+"%" } objprm 0,"メモリー使用率 (現在) - "+strf("%4d",a)+"%" title "a : " + a + " , b : " + b ; 変数の内容を表示 wait 10 goto *si



晩御飯

リンク

2010/12/7(Tue) 23:39:09|NO.36155

>一方8行目ではbに"メモリー使用率 (最大)-何とか%"という文字列が代入されます。
さりげなく嘘をついていたようです。失礼しました。



ANTARES

リンク

2010/12/8(Wed) 00:08:17|NO.36156

 結局、「if a>b が無視(?)され」るという認識が誤りで、
「objprm 1,……」によってbが0になるため、
「if a>b」が常に真となり、
「b=a」によって「objprm 1,……」が実行されるときには常にbはaに等しく、
その直後に、再びbが0になります。



通りすがり

リンク

2010/12/8(Wed) 00:31:52|NO.36157

>> a>b は 0>0 で比較されていたと言う事です。
>「a= sysinfo (33)」があるので、それは違うでしょう。

ありゃりゃ、早とちりでした。ANTARESさんの仰る通りです。
訂正しようと思った内容と同じ事を既に纏めてもらったので
ここまでにしときます。ご指摘どうもです。



mamo

リンク

2010/12/8(Wed) 02:57:29|NO.36158

>「objprm 1,……」によってbが0になるため
ありがとうございます、使わない変数を利用すればいいのですね。

input a,160,18 input x,160,18 *si a= sysinfo (33) if a>b { b=a objprm 1,"メモリー使用率 (最大) - "+strf("%4d",b)+"%" } objprm 0,"メモリー使用率 (現在) - "+strf("%4d",a)+"%" wait 10 goto *si



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