C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 >>
■18821  Re[4]: 検索処理
□投稿者/ セイン -(2008/05/16(Fri) 15:29:05)
    自己解決できました。

    std::findでやる場合は、比較演算子==をクラスに追加
    std::find_ifでやる場合は、比較用の関数を用意し、設定してあげることによって
    実現できました。ありがとうございます。
記事No.18791 のレス / END /過去ログ37より / 関連記事表示
削除チェック/

■27932  Re[7]: チェックボックスに関して
□投稿者/ まんごーぷりん -(2008/11/17(Mon) 19:55:45)
>
    でも、そもそも 3 つのチェックボックス全体に影響を及ぼすコントロールもチェックボックスにしてしまうことが本当に良いことなのか、ちょっと疑問です。

    全てにチェックが入っている状態から、個別のチェックボックスを外すこともできる訳で、そうなるとチェックされている状態の意味が違ってきてしまいますよね?
    つまり、チェックが何を表わすものなのかの統一性がなくなりませんか?

    ボタンにする方が自然な気がします。
記事No.27918 のレス /過去ログ51より / 関連記事表示
削除チェック/

■81805  Re[3]: データベースからのデータ読込
□投稿者/ 魔界の仮面弁士 -(2016/11/15(Tue) 16:03:49)
    No81804 (夜叉丸 さん) に返信
    > MainDataSet.xsd のデザイン編集で
    > クエリの追加を行って以下のコードを記入します。

    Main 側に追加しているのだとしたら、まずそこが間違っています。

    Main テーブルは NAME をキーとしており、
    現時点で 2 行のデータが入る事が期待されますよね。


    しかし作成した GetMainSubName のクエリーは、
    SUBNAME をキー(あるいは PrimaryKey なし)とした、
    4 行のデータであるはずです。

    でもそれは Main ではなく、むしろ Sub のテーブルの構造ですよね?


    ですからデザイン時に行う作業としては、以下のいずれかにしてみてください。

    (案1) JOIN 結果の格納先は、Main でも Sub でもなく、
      別の DataTable として TableAdapter を構成する。

    (案2) Sub テーブル側に、GetMainSubName のクエリーを追加する。


    サーバー側に問い合わせを行うのなら、通常は案 1 で良いと思います。
    Main や Sub は 2 列構成ですが、JOIN 結果は 3 列構成なので、
    今回のケースではこれが妥当かと思います。

    もしも案2 を選択するのであれば、Sub の DataTable に、デザイン時に
    SUBNAME な列も追加しておけば OK です。(デザイン時に SUBNAME 列を
    追加していなかったとしても、インデクサ指定で扱うことができます)

    ただし、JOIN 結果のために SUBNAME 列を追加しておいた場合、
    既定の GetData/Fill で取得したデータ(SUBNAME 列の無い SELECT SQL)では、
    SUBNAME 列に入る値が無いため、その列の値は NULL 値として処理されます。


    なお、編集結果をデータベース側に復元する事を考えているのであれば、
    先の回答のように、リレーション構成にしてクライアント側で連結させるか、
    あるいは、案2 を用いて、Sub の DataTable 側で処理すれば OK です。




    > EnforceConstraints を使えばよいらしいですが

    そもそも EnforceConstraints は既定で有効になっています。

    EnforceConstraints が true な状態では、

    ・PrimaryKey な列に、同じデータが重複登録された場合
    ・MaxLength を超える長さのデータが登録された場合
    ・AllowDBNull = false な列が NULL 値の状態であった場合
    ・DataRelation に違反するようなデータ構成になった場合

    などの不整合が検出され、エラー(というか例外)として通知されますが、
    EnforceConstraints を切ってしまうと、そういった違反データを
    DataTable に登録できてしまうことになりますよ。
記事No.81800 のレス /過去ログ139より / 関連記事表示
削除チェック/

■91934  Re[15]: C++からVBへの変換
□投稿者/ えんえん -(2019/08/11(Sun) 21:42:09)
    ありがとうございます。
    
    
    二つ変数を使った方法はどうやれば良いか分からなかったので
    とりあえず、先に ArraySegmentを使った方法を試してみました。
    
    
    
    
    
        Public Sub one_D_FFT(ByRef xr#(), ByRef xi#())
    
    
            Dim n As Integer = xr.GetLength(0) - 1
    
            Dim theta = 2 * Math.PI / n
    
            Dim xr2 As New ArraySegment(Of Double)(xr), xi2 As New ArraySegment(Of Double)(xi)
    
            Dim tmpr(n) As Double, tmpi(n) As Double
            Dim tmpr2 As New ArraySegment(Of Double)(tmpr), tmpi2 As New ArraySegment(Of Double)(tmpi)
    
            Call fft(n, theta, xr2, xi2, tmpr2, tmpi2)
    
    
        End Sub
    
    
    
    
        Private Sub fft(ByVal n%, ByVal theta#, ByRef ar As ArraySegment(Of Double), ByRef ai As ArraySegment(Of Double), ByRef tmpr As ArraySegment(Of Double), ByRef tmpi As ArraySegment(Of Double))
    
            If n <= 1 Then Exit Sub
    
            Dim radix As Integer = 2
            Do While radix * radix <= n
                If n Mod radix = 0 Then Exit Do
                radix += 1
            Loop
    
            If n Mod radix <> 0 Then radix = n
    
            Dim n_radix As Integer = n \ radix
    
            For j As Integer = 0 To n_radix - 1
    
                For m As Integer = 0 To radix - 1
    
                    Dim xr As Double = ar.Array(j)
                    Dim xi As Double = ai.Array(j)
    
                    For r As Integer = n_radix To n - 1 Step n_radix
    
                        Dim wr0 As Double = Math.Cos(theta * m * r)
                        Dim wi0 As Double = Math.Sin(theta * m * r)
                        xr += (wr0 * ar.Array(r + j) - wi0 * ai.Array(r + j))
                        xi += (wr0 * ai.Array(r + j) + wi0 * ar.Array(r + j))
    
                    Next r
    
    
                    Dim wr As Double = Math.Cos(theta * m * j)
                    Dim wi As Double = Math.Sin(theta * m * j)
                    tmpr.Array(m * n_radix + j) = xr * wr - xi * wi
                    tmpi.Array(m * n_radix + j) = xi * wr + xr * wi
    
                Next m
    
            Next j
    
            For r As Integer = 0 To n - 1 Step n_radix
    
                fft(n_radix, theta * radix, New ArraySegment(Of Double)(tmpr.Array, tmpr.Offset + r, tmpr.Count - r), New ArraySegment(Of Double)(tmpi.Array, tmpi.Offset + r, tmpi.Count - r), ar, ai)
    
            Next r
    
    
    
            For j As Integer = 0 To n_radix - 1
    
                For m As Integer = 0 To radix - 1
    
                    ar.Array(radix * j + m) = tmpr.Array(n_radix * m + j)
                    ai.Array(radix * j + m) = tmpi.Array(n_radix * m + j)
    
                Next m
    
            Next j
    
    
        End Sub
    
    
    しかし、真っ白なデータしか出力されないのですが。。。。
    何が間違っていますでしょうか?
    
    
    
    
    
記事No.91899 のレス /過去ログ158より / 関連記事表示
削除チェック/

■91938  Re[16]: C++からVBへの変換
□投稿者/ 魔界の仮面弁士 -(2019/08/12(Mon) 12:05:54)
    2019/08/12(Mon) 13:21:00 編集(投稿者)

    No91934 (えんえん さん) に返信
    > 何が間違っていますでしょうか?

    『ステップ実行』しましょう。

    ループ処理などを一行ずつ実行してみた上で、

      この場所では、この変数に
      こういう値がセットされるはずなのに、
      実際にはこんな値になってしまった
     」
    …という点を追跡できれば、どこの翻訳実装に問題があったことが明確になりますよね。


    > とりあえず、先に ArraySegmentを使った方法を試してみました。

    何か所か間違いがありますが、まずはここ。
     tmpr[m * n_radix + j] = xr * wr - xi * wi;

    No91934 のコードでは、上記を
    > tmpr.Array(m * n_radix + j) = xr * wr - xi * wi
    と翻訳してしまっていますので、ここが大きな間違いです。

    たとえば、
     Dim x() As Byte = New Byte(5) {11, 22, 33, 44, 55, 66}
     Dim y As New ArraySegment(Of Byte)(x)
     Dim z As New ArraySegment(Of Byte)(x, 2, 3)
    において、「y.Array」や「z.Array」は、配列 x への参照を意味します。
    ※ Span も似たようなものですが、Span はさらに各要素への参照も持ちます。

    なので、x(3) = 100 と代入すれば、z(1) も同様に 44 から 100 へと変化します。

    この時、それぞれの要素を列挙すれば
     x は {11, 22, 33, 100, 55, 66} 相当 (y.Array や z.Array も同様)
     y は {11, 22, 33, 100, 55, 66} 相当 (y.Offset は 0、y.Count は 6)
     z は {33, 100, 55} 相当 (z.Offset は 2、z.Count は 3)
    となります。
    Array / Offset / Count プロパティの 3 セットが、この構造体の肝です。
    ここまでは良いでしょうか。


    ArraySegment 構造体の場合、値の取得については
     MsgBox( z(i) )
    のように書けるのですが、問題は書き込みです。インデクサが ReadOnly なので、
     z(i) = newValue
    のようには書けません。(Span 構造体なら可能になるはず)

    そのため、オフセット指定の書き込みが必要な場合には、
     z.Array(z.Offset + i) = newValue
    のように、Array プロパティと Offset プロパティを併用することになります。
    No91934 のコードでは、この点が考慮されていないように見受けられます。


    =====

    それと、むやみに ByRef を使わないでください。
    今回は出力引数が存在しないため、ByRef の出番は一切ありません。

    先にも述べましたが、出力引数が必要な場合以外は、値渡しで実装するべきです。



    Sub Main()
      Dim x() As Byte = New Byte(3) {&H11, &H22, &HAB, &HCD}
      MsgBox(BitConverter.ToString(x))

      'AsSegment については No91917 を参照
      Test(x.AsSegment())
      MsgBox(BitConverter.ToString(x))

      Test(x.AsSegment(2, 2))
      MsgBox(BitConverter.ToString(x))
    End Sub

    ' a(0) と a(1) の中身を入れ替える処理
    ' この時、引数 ArraySegment 構造体を ByRef にする必要は無い!
    Sub Test(Of T)(ByVal a As ArraySegment(Of T))
      Dim swap() As T = {a(0), a(1)}
      a.Array(a.Offset + 1) = swap(0)
      a.Array(a.Offset + 0) = swap(1)
    End Sub


    ※ 先の No91917 ですが、最後の End Function が誤って End Sub になっていました。
     恐れ入りますが、 End Function に読み替えておいてください。


    > Public Sub one_D_FFT(ByRef xr#(), ByRef xi#())
    > Private Sub fft(ByVal n%, ByVal theta#, ByRef ar As ArraySegment(Of Double), ByRef ai As ArraySegment(Of Double), ByRef tmpr As ArraySegment(Of Double), ByRef tmpi As ArraySegment(Of Double))

    これらについて、メソッド名を分ける必要は無いと思います。オーバーロードで十分ではないでしょうか。
     Public Sub Fft(xr#(), xi#())
     Private Sub Fft(n%, theta#, ar As ArraySegment(Of Double), ar As ArraySegment(Of Double), tmpr As ArraySegment(Of Double), tmpi As ArraySegment(Of Double))


    メソッド名を分けるにしても、両者でメソッド名の大文字小文字の使い分けが不揃いな点が気にかかります。
    .NET Framework においては一般的に、
      ・クラス名やメソッド名は PascalCase 構文の大文字小文字表記とする。
      ・変数や引数は、camelCase 構文の大文字小文字表記とする。
    というのが一般的ですので、この点を意識したコーディングにされることをお奨めします。
    https://docs.microsoft.com/ja-jp/dotnet/standard/design-guidelines/naming-guidelines
    http://objectclub.jp/community/codingstandard/CodingStdVB.doc
記事No.91899 のレス /過去ログ158より / 関連記事表示
削除チェック/

■96415  Re[5]: SendMessageの使用法
□投稿者/ Azulean -(2020/11/21(Sat) 17:57:02)
記事No.96397 のレス /過去ログ167より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -