|
|
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はいらないですけどね)
|
|
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
|
|
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に"メモリー使用率 (最大)-何とか%"という文字列が代入されます。
さりげなく嘘をついていたようです。失礼しました。
|
|
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さんの仰る通りです。
訂正しようと思った内容と同じ事を既に纏めてもらったので
ここまでにしときます。ご指摘どうもです。
|
|
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
|
|