今、画像処理のプログラムを作成中です。
それで、このような計算式がありまして、
Hue = (b-g) * (pai/3)
Hueの計算結果がたくさんあって、数にして311,040個。
(Hueの単位は度で、0°~360°までです。)
それで、その結果を配列にいれたいんです。
どうやって配列を作ればいいのか分かりません。
どなたか分かる方、詳しく教えて下さい!!

このQ&Aに関連する最新のQ&A

A 回答 (3件)

>大いに疑問です。


大丈夫みたいですよ。

Option Explicit
Option Base 0

Private Sub Command1_Click()
Dim x(311040) As Double
Dim idx As Long

For idx = 0 To 311040
x(idx) = idx + 1
Next idx

Debug.Print x(0) + x(311040)
MsgBox x(0) + x(311040)
End Sub

Debug.Print と MsgBox は、デバッグ環境、exeにコンパイルしたもの、両方で確認したという意味です。
#ちなみに、最適化もなかなかのもんです。

>Basicの配列のメモリーへの実装方法
 詳しく知らないのですが、VBの変数はすべて格納領域へのポインタのようです。Variant型なんてのは、相当複雑なことをやっているようです。
 インテル系CPUは、80386(だったか)あたりから、ディスクリプタテーブルを採用しているので、大容量のメモリ領域を擬似的に連続領域のように扱えるコンパイラを作成できます。恐らくVBもそうなのでしょう。

>隔世の感あり。
 たしかに、おっしゃるとおりです。
DISK-BAISCのランダムアクセスファイルで8インチFDにPUT,GETしたり、2kBの中にBASICインタプリタを詰め込んでいたTINY-BASICのころは、まるで石器時代の幻ようです。

>メモリーがふんだんに使えるようになると
 先日もショップで高校生が「ハードディスクは、30GBじゃたりない」と話していて、ハリ倒してやろうかと思いました。

若者がベテランに「Cの構造体って、C++のクラスみたいなもんですか?」と質問したっていう笑えないジョークもあるくらいで・・・

#かくいう私は、すでに老兵です。

この回答への補足

すいません。私の説明が悪かったです。
計算結果は311,040個なんですが、それらの全部の値は0°~359°の計360個の配列に分けて入れたいんです。
例えば、Hue=2.6なら小数点以下は切り捨てて、まずHue=2にします。
それを2°の配列に格納し、カウントしていく。
3110,40個の値がそれぞれ入ってしまった後、2°は何個あったか分かるようにしたいんです。
この説明で大丈夫でしょうか?
よろしくお願いします!!

補足日時:2002/01/31 16:30
    • good
    • 0
この回答へのお礼

ykkw2001さんのを参考にさせて頂いて何とかできました!!
しかし、パソコンが古いため計算がめっちゃ遅いです。
学校の研究室なので我慢するしかありません(;;)
いろいろ書いてくださってありがとうございました★

お礼日時:2002/01/31 18:50

回答者のルーチンが動くことは確認しました。

しかしメモリー容量の
関係から1~例えば320、000個の配列に全て空きなく数をセットして行った時、エラーにならないと言えるでしょうか。大いに疑問です。
Basicの配列のメモリーへの実装方法をご存知の方教えてください。
 メモリーが今のように利用できなかった少し前までは、配列では
なく、レコードとして、外部記憶装置(Disk)に記録し、それを読んで処理していたと思います。DOS-Basicの固定長ランダムファイルのようなものを使うべきでないのでしょうか。Get #1,nのn=320000とすれば320000番目のレコードの内容が変数(フィールド)にセットされる仕組みがあれば、a=b(320000)と同じではないでしょうか。
ただ処理時間の点で格段の差はあるでしょうが。配列にデータを
セットする時も、多量の場合はDiskファイルから読みこんでいませんか。
VBにもPUT,GETステートメントは残されているようです。
メモリーがふんだんに使えるようになると。この質問と
回答者のようなのが当たり前になるのでしょうね。
4Kのメモリーのコンピュターを見聞きしていた者にとって
隔世の感あり。
    • good
    • 0
この回答へのお礼

まだVB初心者なので説明が上手くできていなかったみたいです。。。
すいませんでした。

お礼日時:2002/01/31 17:01

dim hue(311040) as double


hue(311040)=99.99
msgbox hue(311040)

「こんなんじゃダメだ」ってことなの?
    • good
    • 0
この回答へのお礼

すいません。ちょっと言い方間違ってました。。。(><)っっ

お礼日時:2002/01/31 16:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QVBA 配列計算について 配列の入力に配列の使用

配列に複数のセル値の合計値を設定したいと思っています。
求める合計値は複数あるため、出力も配列となります。
そこで下記のようにプログラムを考えたのですが、全て同じ値の配列として出力されてしまいます。
VBAではC言語のように配列の古い値に足していくことはできないのでしょうか?

(sum()は0で初期化) (10個飛ばしのデータの合計値を算出)
For i = 0 To 10
For j = 0 To 5
sum(i)= sum(i) + Worksheets(sheetname).Cells(10, 3).Offset(j * 10, 0).Value
Next i
Next j

出力配列例 全て同じ値になってしまいます・・・
1.254
1.254
1.254
・・・

回避方法もしくはうまい計算方法などありませんでしょうか

Aベストアンサー

なにを計算したいんでしょうか?

このコードでは、どのSum(i)にも、
Cells(10,3).Value + Cells(20,3).Value + ・・・・ + Cells(60,3).Value
の値が入るから、同じになるのは当然です。

i ごとにSum(i)を変えたいのなら、
Worksheets(sheetname).Cells(10, 3).Offset(j * 10, 0).Value
の中のどこかに i が入ってないと・・・・

Q4桁の数字を A*1000+B*100+C*10+D 以外で表現したい。

A=1
B=2
C=3
D=4

のとき 
1234をA*1000+B*100+C*10+D以外で表現したいのですが
何かいい方法がないでしょうか?
4桁ならいいんですが
15、6桁を10行ぐらいコーディングしないといけないのでなえてます↓助けてください。

Aベストアンサー

No.4です。

VB2005でも問題なくできますよ。実際に確認済みです。

Dim A As Integer = 1
Dim B As Integer = 2
Dim C As Integer = 3
Dim D As Integer = 4
Dim E As integer

E = (A & B & C & D) * 1
MsgBox(E)

これで試してください。

Q計算式を渡すと、計算結果を返してくれる関数

FormアプリでString型の計算式を渡すと、計算結果を返してくれる関数を教えてください。

Aベストアンサー

VB.NET周辺にはありませんが、こちらのページにいくつか方法が載っています。
http://dobon.net/vb/dotnet/programing/eval.html
JScript.NET / C# Compiler / Microsoft Script Control など、どれもVB.NETの範疇を超える領域を使います。純粋にVBだけで計算するには文字列を解析しながら処理するしかありません。

QVBSで配列の結果内容から任意の文字列を探す。

VBS初心者です。
配列を1つにまとめた内容(strMSG)から
正規表現を利用して任意のキーワードを元に
grepのような実行結果が欲しいです。

【実行サンプル】
-------------------------------------------
Option Explicit
Dim TEST(4),i,strMSG

TEST(1) = "001-AB1"
TEST(2) = "001-AB2"
TEST(3) = "AB1-001"
TEST(4) = "AB2-001"

For i = 1 To UBound(TEST)
strMSG = strMSG + TEST(i) & vbCrLf
next

msgbox strMSG
-------------------------------------------

strMSGの内容として4行分TESTの配列が格納されています。
ここでは例として、先頭001で始る文字列を検索かけたいです。

【理想の実行結果】
検索キーワード:先頭が001で始る行
-------------------------------------------
001-AB1
001-AB2
-------------------------------------------

よろしくお願いします。

【備考】
1つ1つのTEST配列単位でgrepかけるより、配列を1つにまとめたものに
1度だけgrepかけたほうが処理速度が速いかな?と考えているためです。

VBS初心者です。
配列を1つにまとめた内容(strMSG)から
正規表現を利用して任意のキーワードを元に
grepのような実行結果が欲しいです。

【実行サンプル】
-------------------------------------------
Option Explicit
Dim TEST(4),i,strMSG

TEST(1) = "001-AB1"
TEST(2) = "001-AB2"
TEST(3) = "AB1-001"
TEST(4) = "AB2-001"

For i = 1 To UBound(TEST)
strMSG = strMSG + TEST(i) & vbCrLf
next

msgbox strMSG
-------------------------------------------

strMSGの内容として4行分TESTの配列が格納さ...続きを読む

Aベストアンサー

>4行分TESTの配列が格納されています。
正規表現を使うまでもないのでは
Option Explicit
Dim TEST(3),i,strMSG
Dim TEST2

TEST(0) = "001-AB1"
TEST(1) = "001-AB2"
TEST(2) = "AB1-001"
TEST(3) = "AB2-001"

For i = 0 To UBound(TEST)
If Left(TEST(i), 3) = "001" Then
strMSG = strMSG & TEST(i) & vbCrLf
End If
Next
MsgBox strMSG

別案
TEST(0) = "001-AB1"
TEST(1) = "001-AB2"
TEST(2) = "AB1-001"
TEST(3) = "AB2-001"
TEST2 = Filter(TEST, "001-")
msgbox JOIN(TEST2, vbCrLf)

QExcelマクロにて30分単位の計算方法について

Excelのマクロにて30分単位の計算方法についてご存知の方宜しくお願いします。

8:01~8:30のデータを8:30に変換
8:31~9:00のデータを9:00に変換
という様に30分単位で時間の切り上げ計算

8:00~8:29のデータを8:00に変換
8:30~8:59のデータを8:30に変換
という様に30分単位で時間の切り捨て計算

セルにCEILING(A1,"0:30")やFLOOR(A1,"0:30")を使用して記述しても良かったのですが
パターンが多すぎてセルに記述する事が出来ませんでした。(文字数制限の為)
ので、マクロでの記述方法をご存知の方宜しくお願いします。

Aベストアンサー

要はマクロでワークシート関数が使えればいいという感じ?

Application.WorksheetFunction.Ceiling
Application.WorksheetFunction.Floor

でどーかな?


人気Q&Aランキング

おすすめ情報