構造体の使い方

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
Cursol

構造体の使い方

#1 投稿記事 by Cursol »

コード: 全て選択

Type Temp
	a as long
	b as long
End Type

Dim A = [0,0] as Temp
Dim B = [1,1] as Temp
Dim C = [2,2] as Temp
と言う構造体があるときにA,B,Cの各要素を足すときは

コード: 全て選択

Dim ta=0 ,tb=0, tc=0 as Long

ta = A.a + B.a + C.a
tb = A.b + B.b + C.b
tc = A.c + B.c + C.c
とすることで求める事ができますがこれを

コード: 全て選択

Dim ta=0 ,tb=0, tc=0 as Long

For i = 1 to 3
    ta = ta + X.a
    tb = tb + X.b
    tc = tc + X.c
Next
といった感じでXと言うようなもので表して表現したいんですがこのようなことは可能なのでしょうか?
Sinryow
記事: 141
登録日時: 2005年5月31日(火) 09:34
お住まい: 北海道
連絡する:

Re: 構造体の使い方

#2 投稿記事 by Sinryow »

構造体の配列変数を使えばよいだけではないでしょうか。

コード: 全て選択

Type Temp
    a as long
    b as long
	c as long
End Type

Dim ta=0 as Long, tb=0 as Long, tc=0 as Long
Dim X[2]=[[0,0,0], [1,1,1], [2,2,2]] as Temp
Dim i As Long

For i = 1 to 3
    ta = ta + X[i-1].a
    tb = tb + X[i-1].b
    tc = tc + X[i-1].c
Next
※細かいことを言いますと
1)「Dim ta=0, tb=0, tc=0 as Long」と書くと,taとtbは変数の型を省略したとみなされます(→ABでは変数の型を省略するとDoubleになるため,CursolさんのままだとtaとtbはDoubleになってしまいます)。
2)Tempのメンバの「c」を忘れてましたよ。
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

Re: 構造体の使い方

#3 投稿記事 by イグトランス »

> For i = 1 to 3
For i = 0 to 2と書けば直にXと書けますよね。
iを画面への出力などほかに使っていなければi = 1で始めるメリットは薄いと思います。

細かいことですいませんが。
Cursol

ありがとうございます。

#4 投稿記事 by Cursol »

>構造体の配列変数を使えばよいだけではないでしょうか。

構造体配列と言った便利な物があったのですね~。おかげさまでコードがすっきり収まりました。ありがとうございました。

>1)「Dim ta=0, tb=0, tc=0 as Long」と書くと,taとtbは変数の型を省略したとみなされます(→ABでは変数の型を省略するとDoubleになるため,CursolさんのままだとtaとtbはDoubleになってしまいます)。

うーむ、てっきりこれでよいかと思いこんでました。

>2)Tempのメンバの「c」を忘れてましたよ。

なんてこった…orz
Sinryow
記事: 141
登録日時: 2005年5月31日(火) 09:34
お住まい: 北海道
連絡する:

Re: 構造体の使い方

#5 投稿記事 by Sinryow »

> > For i = 1 to 3
> For i = 0 to 2と書けば直にX[i]と書けますよね。
> iを画面への出力などほかに使っていなければi = 1で始めるメリットは薄いと思います。
>
> 細かいことですいませんが。

というかCursolさんのコードをなるべくいじらないようにするために1~3のままにしただけなのですねどね(^^;)
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================
返信する