[質問]型が一致しません. への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 708  ()
投稿日時
2007/9/14 21:19:00
アドバイスありがとうございました!!
もうひとつお聞きしたいのですが、プログラム中の
If sc(i) < 0.27 Then
crack(i) = 1
.....
の部分で、sc(i) < 0.27にあてはまるとcrack(i) = 1となり、「さらにその部分を黒で塗りつぶす」というコードを加えたいのですが、どうすればいいでしょうか??
アドバイスお願いします。
もうひとつお聞きしたいのですが、プログラム中の
If sc(i) < 0.27 Then
crack(i) = 1
.....
の部分で、sc(i) < 0.27にあてはまるとcrack(i) = 1となり、「さらにその部分を黒で塗りつぶす」というコードを加えたいのですが、どうすればいいでしょうか??
アドバイスお願いします。
投稿者 後藤  ()
投稿日時
2007/9/8 17:03:00
>>2
Dim sc As Variant
↑sc を単独の入れ物として宣言しておきながら
sc(i) = rnd * 1
↑使用時にscのi番目の入れ物に rnd*1 を入れなさい
としているため、エラー13「型が一致しません」と叱られます。
最初に示されたコードを見ると動的配列ですので
Dim sc() As Variant に変更すればOKです。
使うときは ReDim で配列の大きさを設定して下さい。
詳細はヘルプの動的配列に載っています。
neptuneさんが示された型については、ここの講座でも詳しく書かれています。
一度ご覧になると良いと思います。(私なら Dim sc() As Single と宣言します)
第36回 型の指定
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard36.htm
Dim sc As Variant
↑sc を単独の入れ物として宣言しておきながら
sc(i) = rnd * 1
↑使用時にscのi番目の入れ物に rnd*1 を入れなさい
としているため、エラー13「型が一致しません」と叱られます。
最初に示されたコードを見ると動的配列ですので
Dim sc() As Variant に変更すればOKです。
使うときは ReDim で配列の大きさを設定して下さい。
詳細はヘルプの動的配列に載っています。
neptuneさんが示された型については、ここの講座でも詳しく書かれています。
一度ご覧になると良いと思います。(私なら Dim sc() As Single と宣言します)
第36回 型の指定
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard36.htm
投稿者 neptune  ()
投稿日時
2007/9/8 07:02:00
>>2
こんにちは
>Dim sc As Variant
はホントですか?
Dim sc() As Variant とかDim sc(要素数) As Variant
にしてないんですか?
本来は要素数をあらかじめ指定
Dim sc(要素数) As single
か、
Dim sc() As single
か
Dim sc() As double
として、要素数でredimするのが一般的です。
>Dim wd, hght As Variant
は
Dim wd As Variant
Dim hght As Variant
と同義で
Dim wd, hght
とも同義です。
先ずは、
Variant は万能ですが、キチンとデータ型を指定してやってはどうでしょう?
こんにちは
>Dim sc As Variant
はホントですか?
Dim sc() As Variant とかDim sc(要素数) As Variant
にしてないんですか?
本来は要素数をあらかじめ指定
Dim sc(要素数) As single
か、
Dim sc() As single
か
Dim sc() As double
として、要素数でredimするのが一般的です。
>Dim wd, hght As Variant
は
Dim wd As Variant
Dim hght As Variant
と同義で
Dim wd, hght
とも同義です。
先ずは、
Variant は万能ですが、キチンとデータ型を指定してやってはどうでしょう?
投稿者 708  ()
投稿日時
2007/9/8 06:27:00
>>1
ありがとうございます!
初心者すぎてほんまに申し訳ありません
宣言部分とはこれでいいんでしょうか?
Dim NNN As Variant
'ax()=ボロノイ点のx座標 ay()=ボロノイ点のy座標
'ad()=原点とボロノイ点の距離
Dim sxxo, syyo, sxyo, aspc As Variant
Dim ntsbd, xcrtn, nssc, mlm, tn, ttsang As Variant
Dim xrnyn, xrnwd, xrnmz As Variant
Dim lmax, mmax, nmax As Variant
Dim tnang(10000), tsang(10000), nang(10000, 20), sang(10000, 20), tc(10000) As Variant
Dim sc As Variant
Dim rnd As Variant
'試験片の形状
Dim wd, hght As Variant
ありがとうございます!
初心者すぎてほんまに申し訳ありません
宣言部分とはこれでいいんでしょうか?
Dim NNN As Variant
'ax()=ボロノイ点のx座標 ay()=ボロノイ点のy座標
'ad()=原点とボロノイ点の距離
Dim sxxo, syyo, sxyo, aspc As Variant
Dim ntsbd, xcrtn, nssc, mlm, tn, ttsang As Variant
Dim xrnyn, xrnwd, xrnmz As Variant
Dim lmax, mmax, nmax As Variant
Dim tnang(10000), tsang(10000), nang(10000, 20), sang(10000, 20), tc(10000) As Variant
Dim sc As Variant
Dim rnd As Variant
'試験片の形状
Dim wd, hght As Variant
投稿者 後藤  ()
投稿日時
2007/9/8 05:17:00
sc の宣言部がないので断言できませんが
Rnd関数はSingle型を返すので sc はSingle型を
格納できる型でなければいけません。
sc の型が Single Double Object などに
なっているか確認してみて下さい。
あと、動作は問題ありませんが気になった点
sc(i) = rnd * 1
↑この * 1 は必要ないと思うのですが..
Rnd関数はSingle型を返すので sc はSingle型を
格納できる型でなければいけません。
sc の型が Single Double Object などに
なっているか確認してみて下さい。
あと、動作は問題ありませんが気になった点
sc(i) = rnd * 1
↑この * 1 は必要ないと思うのですが..
投稿者 708  ()
投稿日時
2007/9/8 03:41:00
visual basic 6.0を使用している初心者です.
プログラムを実行したところ,エラー13「型が一致しません」
という表示がでてプログラム中(一部)の
sc(i) = rnd * 1
を黄色で指摘されました.
何かアドバイスがあればお願いします
プログラムは次のような感じです(一部のみ掲載)
Private Sub strboronoi(wd As Variant, hght As Variant)
Picture1.Cls
Randomize
xa1 = 0
ya1 = 0
m = 0
dtotal = 0
ii = 0
NNN = wd * hght
For i = 0 To NNN
'節点座標の設定
ax(i) = (0.1 + rnd * 0.8 + i Mod wd) * Picture1.Width / wd
ay(i) = (0.1 + rnd * 0.8 + (i - i Mod wd) / wd) * Picture1.Height / hght
ad(i) = dis1(0, 0, ax(i), ay(i))
Picture1.PSet (ax(i), ay(i)), vbBlack
Next i
'最下段について、各要素の乱数を決める。
For i = 0 To wd
sc(i) = rnd * 1
Next i
'上で決めた乱数に対して、条件節を作り、奇数列についてき裂の発生の有無を判定する。
'最下段の各要素について、各要素の乱数が、パーライト組成率0.27以下の場合、つまりき裂が発生しない要素の決定
For i = 0 To wd
If sc(i) < 0.27 Then
crack(i) = 1
For j = 1 To (hght / 2)
crack(i + j * 2 * wd) = 1
Next j
End If
Next i
'2列目について各要素を決める
For i = wd To (2 * wd - 1)
sc(i) = rnd * 1
Next i
'上で決めた乱数に対して条件節を作り、奇数列についてき裂の有無を判定する。
'2列目の各要素について
For i = wd To (2 * wd - 1)
If sc(i) < 0.27 Then
crack(i) = 1
For j = 1 To 11
crack(i + j * 2 * wd) = 1
Next j
End If
Next i
プログラムを実行したところ,エラー13「型が一致しません」
という表示がでてプログラム中(一部)の
sc(i) = rnd * 1
を黄色で指摘されました.
何かアドバイスがあればお願いします
プログラムは次のような感じです(一部のみ掲載)
Private Sub strboronoi(wd As Variant, hght As Variant)
Picture1.Cls
Randomize
xa1 = 0
ya1 = 0
m = 0
dtotal = 0
ii = 0
NNN = wd * hght
For i = 0 To NNN
'節点座標の設定
ax(i) = (0.1 + rnd * 0.8 + i Mod wd) * Picture1.Width / wd
ay(i) = (0.1 + rnd * 0.8 + (i - i Mod wd) / wd) * Picture1.Height / hght
ad(i) = dis1(0, 0, ax(i), ay(i))
Picture1.PSet (ax(i), ay(i)), vbBlack
Next i
'最下段について、各要素の乱数を決める。
For i = 0 To wd
sc(i) = rnd * 1
Next i
'上で決めた乱数に対して、条件節を作り、奇数列についてき裂の発生の有無を判定する。
'最下段の各要素について、各要素の乱数が、パーライト組成率0.27以下の場合、つまりき裂が発生しない要素の決定
For i = 0 To wd
If sc(i) < 0.27 Then
crack(i) = 1
For j = 1 To (hght / 2)
crack(i + j * 2 * wd) = 1
Next j
End If
Next i
'2列目について各要素を決める
For i = wd To (2 * wd - 1)
sc(i) = rnd * 1
Next i
'上で決めた乱数に対して条件節を作り、奇数列についてき裂の有無を判定する。
'2列目の各要素について
For i = wd To (2 * wd - 1)
If sc(i) < 0.27 Then
crack(i) = 1
For j = 1 To 11
crack(i + j * 2 * wd) = 1
Next j
End If
Next i
>crack(i) = 1となり、
と言われましても、crackが何を示すのか判りません。
>「さらにその部分を黒で塗りつぶす」
と言われましても、その部分とは何を指すのか判りません。
私の解読力が低いのかもしれませんが、お示しになったコードから
は読み取れませんでした。