-PR-
  • すぐに回答を!
  • 質問No.2122395
締切り
済み

偶数/奇数の判定

  • 閲覧数44345
  • ありがとう数19
  • 気になる数2
  • 回答数10
  • コメント数3

お礼率 3% (1/32)

任意の整数の偶数/奇数を判定するモジュールを開発しています。
納期は連休明けです。

Public Function a(b)
  Select Case b
    Case 1
      a = True
    Case 2
      a = False
    Case 3
      a = True
    Case 4
      a = False
     :
    (中略)
     :
    Case 10000
      a = False
  End Select
End Function

上記のようなプログラムを途中まで書いたところなのですが、コードの行数が長く、どうも効率が悪いような気がしています。
このままでは納期に間に合うか不安です。
効率のよいアルゴリズムをご存知の方、教えてください。

また、現在は、ソースコードをプリントアウトして1行ずつ眼でチェックしていますが、紙を大量に消費しますし、時間もばかになりません。
効率よくバグを検出する方法を教えてください。

連日の深夜残業でかなり参っています。(><)
通報する
  • 回答数10

回答 (全10件)

  • 回答No.7
レベル13

ベストアンサー率 31% (336/1058)

No.6 の訂正 a = b And 1 でも、偶数・奇数の判定ができます。 a = 1 :奇数 a = 0 :偶数 または a = (b And 1) = 1 でも、偶数・奇数の判定ができます。 a = True :奇数 a = False:偶数
No.6 の訂正

a = b And 1

でも、偶数・奇数の判定ができます。
a = 1 :奇数
a = 0 :偶数


または

a = (b And 1) = 1

でも、偶数・奇数の判定ができます。
a = True :奇数
a = False:偶数
  • 回答No.4
レベル12

ベストアンサー率 25% (163/639)

偶数奇数の判定モジュール。 2で割ってあまりを見る方法以外にも。 if (b and 1) = 0 then a=true else a=false end if これは2進数で表示した時、1ビット目が1の場合は奇数である。1ビット目が0の場合偶数である。 これを利用したものです。 たしか、割り算をするよりもビット演算の方が実行速度が速かった気がします。(VBでも速いのか ...続きを読む
偶数奇数の判定モジュール。
2で割ってあまりを見る方法以外にも。

if (b and 1) = 0 then
a=true
else
a=false
end if

これは2進数で表示した時、1ビット目が1の場合は奇数である。1ビット目が0の場合偶数である。
これを利用したものです。

たしか、割り算をするよりもビット演算の方が実行速度が速かった気がします。(VBでも速いのかよくわからないですが。)
  • 回答No.6
レベル13

ベストアンサー率 31% (336/1058)

ちなみに a = b And 1 でも、偶数・奇数の判定ができます。 a = True :奇数 a = False:偶数 No.4 の応用
ちなみに

a = b And 1

でも、偶数・奇数の判定ができます。
a = True :奇数
a = False:偶数

No.4 の応用
  • 回答No.8

以下のPGで可能です。 If b Mod 2 = 1 Then a = True Else a = False End If 尚、Modは商の余りを計算する演算子です。
以下のPGで可能です。
If b Mod 2 = 1 Then
a = True
Else
a = False
End If

尚、Modは商の余りを計算する演算子です。
  • 回答No.1
レベル10

ベストアンサー率 43% (84/192)

If ((b / 2) - Int(b / 2)) Then a = True Else a = False 2で割って小数点以下を削除した物と比べています。
If ((b / 2) - Int(b / 2)) Then a = True Else a = False


2で割って小数点以下を削除した物と比べています。
  • 回答No.3
レベル13

ベストアンサー率 31% (336/1058)

解答自体は、No.1 No.2で良いのですが、回りに質問できる 同僚・先輩・上司等はおられないのでしょうか? 他にも同様な事をしていて、その結果が連日の深夜残業に なっている様な気がします。 他にも困っている問題が残っているのであれば、納期遅れ になる前に上司に報告して判断を仰ぎましょう。
解答自体は、No.1 No.2で良いのですが、回りに質問できる
同僚・先輩・上司等はおられないのでしょうか?
他にも同様な事をしていて、その結果が連日の深夜残業に
なっている様な気がします。

他にも困っている問題が残っているのであれば、納期遅れ
になる前に上司に報告して判断を仰ぎましょう。
  • 回答No.2
レベル13

ベストアンサー率 30% (306/1002)

以下の通り if (b mod 2)=0 then a=false else a=true end if
以下の通り
if (b mod 2)=0 then a=false
else
a=true
end if
  • 回答No.5
レベル14

ベストアンサー率 28% (4309/15202)

これは「モジュールを開発」というレベルですかね。 VBであれば、非常に効率がわるいdすよ。機械語で組んでいても、シフト演算などでもう少しましなものができますよ。 ちなみにエクセルでは偶数・奇数判定に、ISEVEN、ISODD関数があるが、VBでは使えないので、 2で割った余りが0か1かで判定するより他ないでしょう。 余りが0の場合が偶数、1の場合が奇数です。余りはMOD関数が使えて、aをbで割るあ ...続きを読む
これは「モジュールを開発」というレベルですかね。
VBであれば、非常に効率がわるいdすよ。機械語で組んでいても、シフト演算などでもう少しましなものができますよ。
ちなみにエクセルでは偶数・奇数判定に、ISEVEN、ISODD関数があるが、VBでは使えないので、
2で割った余りが0か1かで判定するより他ないでしょう。
余りが0の場合が偶数、1の場合が奇数です。余りはMOD関数が使えて、aをbで割るあまりは a Mod b と中間に置く演算子です。
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_p03.htm
¥という演算子もあります。
http://www008.upp.so-net.ne.jp/ikaia/VB.htm
プログラムは,ステートメント、関数の活用や、繰り返しロジックに持ち込む技術といえます。私はもし5回程度以上列挙するコードになったら、別に良い方法がないか考えてます。
本当の質問者のレベルが見えませんので、失礼になるかもしれませんが、質問が事実で、他に特別な理由がないなら、奮起してさらに勉強が必要です。
#3でもおっしゃっていることのほかに、周りにプログラムのわかる助言者でもおられれば、しばらくは見てもらって、知識を吸収し方が良いですよ。また関数やロジックやアルゴリズムに関心を持ってください。
  • 回答No.9

答えは出尽くしていますが... 私なら、関数名も重視します。 Public Function IsOdd(ByVal N As Integer) As Boolean   IsOdd = N Mod 2 End Function Private Sub Command1_Click()   Debug.Print IsOdd(0)   Debug.Print IsOdd(1)    ...続きを読む
答えは出尽くしていますが...
私なら、関数名も重視します。

Public Function IsOdd(ByVal N As Integer) As Boolean
  IsOdd = N Mod 2
End Function

Private Sub Command1_Click()
  Debug.Print IsOdd(0)
  Debug.Print IsOdd(1)
  Debug.Print IsOdd(2)
End Sub

<実行結果>

False
True
False
  • 回答No.10
レベル12

ベストアンサー率 54% (327/598)

失礼を承知で一言。 もし小生のプロジェクトにこのようなプログラムを記述している人物がいるとしたら、『現時点のプログラム能力も、将来性も無い』ということで抜けて頂く以外ありません。 四則演算+剰余算、ビット演算は、プログラム言語に依存しない、基礎中の基礎だからです。 あまりにも基礎過ぎて、ポカッと抜けて難しく考えてしまう、ということがゼロであるとは言いませんし、それだけで上記のような判断は厳しすぎる、 ...続きを読む
失礼を承知で一言。
もし小生のプロジェクトにこのようなプログラムを記述している人物がいるとしたら、『現時点のプログラム能力も、将来性も無い』ということで抜けて頂く以外ありません。
四則演算+剰余算、ビット演算は、プログラム言語に依存しない、基礎中の基礎だからです。
あまりにも基礎過ぎて、ポカッと抜けて難しく考えてしまう、ということがゼロであるとは言いませんし、それだけで上記のような判断は厳しすぎる、とは小生も感じます。
上記のような判断は、ポカッと抜けるにしても『オイオイしっかりしてくれよ』というレベルである、ということもありますが、他の人に相談できないというコミュニケーション能力の無さにあります。
モジュールレベル開発である、と貴殿がおっしゃっているゆえに、そのモジュールの仕様(引数、返り値等)を指示する人物がいるはずですが、その人に相談できないわけが無いからそう判断します。
これは他の回答者様も感じているのではないか、と思いますが、偶数か奇数か判定する関数、など普通はわざわざモジュール化せずとも、関数一個(Mod でも And でも)で済むものですので、なぜそんなことをするのだろう?という疑問があります。
現プロジェクト責任者の方(もしくは貴殿にモジュール内容を指示する人)も、小生と同様に感じているにもかかわらず、何らかのしがらみで不要の判断を下せずに(その責任を取ることがイヤで?)、毒にも薬にもならないことを貴殿に指示している、というのはそれほど的外れの推察ではない気がします。
ごく短期的に考えると、プログラマーの能力は『現時点でのプログラム能力』の事でしょうが、ある程度長期的に考えると、プログラマーの能力とは『他人とのコミュニケーション能力』です。
わからないことを自分ひとりで抱え込まずに、上司、同僚に相談できる能力。
雑談レベルでもかまわないので、『こう実装しよう思うのだけど、もっと効率的な方法があるような気がして仕方が無い』、と相談できる能力。
『自分には難しすぎで無理です』と、自分の力量、仕事の難しさを判断して相談できる能力。
『このように指示されたのですが、この条件の場合に矛盾が生じますが、その場合はどうすればよいのですか』と確認できる能力。
等々
ここで質問するのは、解決は教えてもらえるでしょうが、職場内でのコミュニケーション能力の向上には役立ちません。

小生はコミュニケーション能力の高い人物には、大きな将来性を感じます。

質問には関係のない事で、しかも推論を重ねた上での、さらに質問者様への厳しい意見ですが、質問者様の仕事に対していくらかプラスになればと思い、僭越ながら書かせていただきました。
  • 回答数10
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
    • 2015-08-21 15:03:48
    • コメントNo.3

    人によって色々な効率化の案が出てくるんですね。とても面白いです。プログラムってのは意外と個性も出るし奥深いですね

    • 2015-08-18 11:38:58
    • コメントNo.2

    人間の目だと、あまり深く考えずに奇数偶数を分けているような感じですが、それをプログラミングにしようと思うと、大変なのですね。深く考えていないから?かもしれませんが、そういう意味でも ...続きを読む

    • 2015-08-13 13:13:45
    • コメントNo.1

    少人数の会社だと、情シス、ネットワークエンジニア、本来顧客と折衝がメインのSE、ウェブ系のコーダーなどがプチ開発的なことをせざるを得ないケースもあるかも…。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ