「夫を成功」へ導く妻の秘訣 座談会

プログラムの条件文で、10個の関数
a,b,c...の数字が全て等しくないという条件にしようとすると、どう表現すれば良いでしょうか?

a〈〉b or b〈〉c . ..

というように全ての組み合わせを書かない方法で、どうか宜しくお願いします。
VBがわかりやすいので、出来ればVBで宜しくお願いします。

質問者からの補足コメント

  • すみません、やはりカウントも結局は何をもって判定させるのかわからず、詰まってしまいました。10個の変数をバラバラである事の条件が奥深いです。

      補足日時:2020/10/07 19:37

A 回答 (9件)

> プログラムの条件文で、10個の関数



多分変数?

> a,b,c...の数字が全て等しくないという条件にしようとする

10個の変数からペア選んできて・・・となるとこれは数学的には組み合わせの問題で、10C2なんで全部で45個不等式作らないといけません。
まぁ、ショートカットは色々と考えられるんでしょうが、原則、Visual Basicだと非力過ぎて、そのまま45個書くしかないんじゃないかしらん。
    • good
    • 1

ANO7です。


.NET 3.5以降なら HashSetクラス を使う方がよりスマートですね。

Sub Main()
Dim a, b, c As Integer
a = 1
b = 2
c = 3

Dim hset As New HashSet(Of Integer)

Dim bDup As Boolean = False
If Not hset.Contains(a) Then
hset.Add(a)
Else
bDup = True
End If
If Not hset.Contains(b) Then
hset.Add(b)
Else
bDup = True
End If
If Not hset.Contains(c) Then
hset.Add(c)
Else
bDup = True
End If

If bDup Then
Console.WriteLine("重複!")
End If


End Sub
    • good
    • 0

VBってVB.NET?



例えばこんなのは?

変数は3個。数字は整数としました。

Sub Main()
Dim a, b, c As Integer
a = 1
b = 1
c = 3

Dim dic As New Dictionary(Of Integer, Integer)

Dim bDup As Boolean = False
If Not dic.ContainsKey(a) Then
dic.Add(a, 1)
Else
bDup = True
End If
If Not dic.ContainsKey(b) Then
dic.Add(b, 1)
Else
bDup = True
End If
If Not dic.ContainsKey(c) Then
dic.Add(c, 1)
Else
bDup = True
End If

If bDup Then
Console.WriteLine("重複!")
End If


End Sub

End Module
    • good
    • 0

90個の総当たり検査が基本だけど


ハッシュテーブルや集合が使える言語なら
要素の一意性を高速にチェックできますね。
    • good
    • 0

その10個の関数を必ず実行する必要があるのか。


途中で条件に合わない事が判明したら、残りは実行しなくても構わないのか。
それによって書き方は変わります。

同じ関数を複数回実行するような書き方は、リソースの無駄なので除外すべきです。
    • good
    • 0

結局は「総当たり戦で同じ値の組合せが無いことを確認する」くらいしか方法は無いと思います。



配列等だったら、「ソートして隣り同士が違う」で判定できます。
総当たり戦でも、簡単な2重ループで作れます。

10個もの値を別々の変数で持とうとする時点で、考え方が間違っていると言えるでしょう。


また、初心者アルアルですが
日本語の「か」とプログラム言語の「or」「and」の違いをちゃんとしましょう。

「a,b,c...の数字が全て等しくない」
というのを
「aとbが違う か bとcが違う か ....」
と日本語で考えて
「a〈〉b or b〈〉c . ..」
としたのでしょう。
ですが、「a,b,c...の数字が全て等しくない」というのは「全ての組合せで等しくない」なので
「aとbが違う しかも bとcも違う しかも ....」
の方が適切で、これは or ではなく and になります。
    • good
    • 0

変数を0リセットして


等しい時に変数に1を加えていく
    • good
    • 0
この回答へのお礼

おぉ!つまりカウントで等しいときに1以上になり、弾けるわけですね!
なるほど!ありがとうございます!

お礼日時:2020/10/07 19:33

配列に放り込んで、並べ替えして、隣合った数字が同じになってないかループ回してチェックとか。



> 10個の関数
> a,b,c...の数字が

10個の変数でなくて関数なの?

VB.NET使うとして、
Option Base 0

Dim ary(10) as Integer
Dim same as Boolean
Dim cnt as Integer

' 配列を用意
ary(0) = a()
ary(1) = b()
~(略)~
ary(9) = j()
' 並べ替え
Array.Sort(ary)
' チェック
same = Flase
For cnt=0 to 8
 if ary(cnt)=ary(cnt+1) then
  same = True
  break
 endif
Next cnt

if Not same then Print "等しくない"

だとか?
確認しないけど。
    • good
    • 1
この回答へのお礼

ありがとうございます。配列から逃げていましたが、今回をきっかけに覚えたいと思います。
ランダムでパターンを変えて配列をしているようですが、全てのパターンが出ると考えて良いでしょうか?

お礼日時:2020/10/07 19:31

10個もでは面倒なので、5個(a-e)で表せば、


and(
a<>b,a<>c,a<>d,a<>e,
b<>c,b<>d,b<>e,
c<>d,c<>e,
d<>e
)
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング