質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.47%

  • VB.NET

    945questions

    Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

  • VB

    310questions

    VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

VB 数値に順位をつけるプログラム

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 2,337

_LAGRANGE_

score 36

以下のように配列matrix(5)が存在し、matrix(0)からmatrix(5)までなんらかの値が入っているときに、それらに順位をつけるプログラミングをしています。

ループの前後は省略させていただきます。

'選んだ要素がほかの要素に抜かされる回数をカウントする
For i As Integer = 0 To 5
            rank(i) = 1
            For k As Integer = 0 To 5
                If matrix(i) < matrix(k) Then
                    rank(i) = rank(i) + 1
                End If
            Next
        Next

これでrank(i)には順位が1から6まで入るのですが、これだと
・同じ要素番号を比較してしまっている
・matrix(0)に対しmatrix(0)からmatrix(5)までを比較したら次のループからはFor i As Integer = 1 To 5、・・・、でいい
ということからこれらを修正し、コードは長くなってもループの周回数は少なくなるようにしたいです。

色々試したのですがたぶんIf文の位置が間違っていたりでうまくいきません。コードじゃなくて日本語でもいいのでどの位置にどういうことを書けば周回数を減らせるか教えてください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

・同じ要素番号を比較してしまっている

処理としては過剰にカウントされるわけではないので問題ないのでは。
仮にif文を次のようにしたとしても処理コストは余計増えるような気がします。

If matrix(i) < matrix(k) And i <> k Then

matrix(0)に対しmatrix(0)からmatrix(5)までを比較したら次のループからはFor i As Integer = 1 To 5、・・・、でいい 

先頭からループをしないと正しくカウントされないのではと思います。

とりあえずコードとしては現状のままで問題ないと思いますが、ループの回数を減らしたいとのことなので、無理やり別のコードを考えてみました。

Dim matrix_work() As Integer
matrix_work = matrix.Clone()
Array.Sort( matrix_work )
Array.Reverse( matrix_work )
for i As Integer = 0 to 5
      rank(i) = Array.IndexOf( matrix_work, matrix(i) ) + 1
next


果たしてこれが良いコードかどうかはご自身で判断してください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

解決済みですので内容については言及しません。

プログラムには、計算量(オーダ(O))という考え方があります。
プログラムの計算量を求める方法

ぜひ心の片隅に。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

関連した質問

  • 解決済

    Mapのすべての要素をループで表示したい

    キーに品番、値に商品名をセットしたHashMapクラスがあるのですが、 HashMapの全ての要素を以下のようなイメージで表示させたいです。 ループ処理をどう書けばいいのでしょうか

  • 解決済

    Eclipseでデバッグ中に、jarファイルのソースを見たい

    いつもお世話になります。今、springframwork4について勉強しています。 そのなかで、入力チェック等で設定がうまくいかず、悩んでしまうことがたびたびあります。 ecl

  • 解決済

    2次元配列の表示

    visual basicのプログラミングをしています データの中身の確認のために 512×512の2次元配列の中身を表示させたいです A(i,j)を表示させたいです エラー

  • 解決済

    エクセル:指定範囲の反転データを作成する

    VBAを用いて指定した範囲内のデータをx, y軸に対して線対象なデータをプロットするマクロを作成しました。 私はVBAを触ったことがなかったので、ネットの情報を見ながら試行錯誤で

  • 解決済

    DataTableで行のコピーを行った際の疑問点

    質問内容 DataTableで行のコピーを行った際に気になることがありました。 サンプルのソースコードでは次の処理をしています。 ・元となるDataTableのデータ分F

  • 解決済

    Cで行列のランク計算のプログラムを作っています。

    前提・実現したいこと Cで行列のランク計算をするプログラムを作っています。 プログラムの流れは、 1.行列の行数(lnum)、列数(cnum)を入力 2.行列の各成分を

  • 解決済

    行と列が違う配列の掛け算

    前提 書籍で勉強している学生です。 書籍の2周目をしています。 書籍の解答がないため問題のヒントや解説をしていただけると嬉しいです。 問題 4行3列の行列と3行4列の行列の積を

  • 解決済

    配列を用いたランキングのソート

    前提・実現したいこと  生成した配列(適当な点数をつけた仮のランキング)に、追加のscoreの数値を加えて、ランキングをソートし更新したいです。 (このソースの形はなるべく崩したく

同じタグがついた質問を見る

  • VB.NET

    945questions

    Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

  • VB

    310questions

    VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。