
任意の整数の偶数/奇数を判定するモジュールを開発しています。
納期は連休明けです。
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行ずつ眼でチェックしていますが、紙を大量に消費しますし、時間もばかになりません。
効率よくバグを検出する方法を教えてください。
連日の深夜残業でかなり参っています。(><)
A 回答 (10件)
- 最新から表示
- 回答順に表示
No.10
- 回答日時:
失礼を承知で一言。
もし小生のプロジェクトにこのようなプログラムを記述している人物がいるとしたら、『現時点のプログラム能力も、将来性も無い』ということで抜けて頂く以外ありません。
四則演算+剰余算、ビット演算は、プログラム言語に依存しない、基礎中の基礎だからです。
あまりにも基礎過ぎて、ポカッと抜けて難しく考えてしまう、ということがゼロであるとは言いませんし、それだけで上記のような判断は厳しすぎる、とは小生も感じます。
上記のような判断は、ポカッと抜けるにしても『オイオイしっかりしてくれよ』というレベルである、ということもありますが、他の人に相談できないというコミュニケーション能力の無さにあります。
モジュールレベル開発である、と貴殿がおっしゃっているゆえに、そのモジュールの仕様(引数、返り値等)を指示する人物がいるはずですが、その人に相談できないわけが無いからそう判断します。
これは他の回答者様も感じているのではないか、と思いますが、偶数か奇数か判定する関数、など普通はわざわざモジュール化せずとも、関数一個(Mod でも And でも)で済むものですので、なぜそんなことをするのだろう?という疑問があります。
現プロジェクト責任者の方(もしくは貴殿にモジュール内容を指示する人)も、小生と同様に感じているにもかかわらず、何らかのしがらみで不要の判断を下せずに(その責任を取ることがイヤで?)、毒にも薬にもならないことを貴殿に指示している、というのはそれほど的外れの推察ではない気がします。
ごく短期的に考えると、プログラマーの能力は『現時点でのプログラム能力』の事でしょうが、ある程度長期的に考えると、プログラマーの能力とは『他人とのコミュニケーション能力』です。
わからないことを自分ひとりで抱え込まずに、上司、同僚に相談できる能力。
雑談レベルでもかまわないので、『こう実装しよう思うのだけど、もっと効率的な方法があるような気がして仕方が無い』、と相談できる能力。
『自分には難しすぎで無理です』と、自分の力量、仕事の難しさを判断して相談できる能力。
『このように指示されたのですが、この条件の場合に矛盾が生じますが、その場合はどうすればよいのですか』と確認できる能力。
等々
ここで質問するのは、解決は教えてもらえるでしょうが、職場内でのコミュニケーション能力の向上には役立ちません。
小生はコミュニケーション能力の高い人物には、大きな将来性を感じます。
質問には関係のない事で、しかも推論を重ねた上での、さらに質問者様への厳しい意見ですが、質問者様の仕事に対していくらかプラスになればと思い、僭越ながら書かせていただきました。
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)
Debug.Print IsOdd(2)
End Sub
<実行結果>
False
True
False
No.8
- 回答日時:
以下のPGで可能です。
If b Mod 2 = 1 Then
a = True
Else
a = False
End If
尚、Modは商の余りを計算する演算子です。
No.7
- 回答日時:
No.6 の訂正
a = b And 1
でも、偶数・奇数の判定ができます。
a = 1 :奇数
a = 0 :偶数
または
a = (b And 1) = 1
でも、偶数・奇数の判定ができます。
a = True :奇数
a = False:偶数
No.5
- 回答日時:
これは「モジュールを開発」というレベルですかね。
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 …
¥という演算子もあります。
http://www008.upp.so-net.ne.jp/ikaia/VB.htm
プログラムは,ステートメント、関数の活用や、繰り返しロジックに持ち込む技術といえます。私はもし5回程度以上列挙するコードになったら、別に良い方法がないか考えてます。
本当の質問者のレベルが見えませんので、失礼になるかもしれませんが、質問が事実で、他に特別な理由がないなら、奮起してさらに勉強が必要です。
#3でもおっしゃっていることのほかに、周りにプログラムのわかる助言者でもおられれば、しばらくは見てもらって、知識を吸収し方が良いですよ。また関数やロジックやアルゴリズムに関心を持ってください。
No.4
- 回答日時:
偶数奇数の判定モジュール。
2で割ってあまりを見る方法以外にも。
if (b and 1) = 0 then
a=true
else
a=false
end if
これは2進数で表示した時、1ビット目が1の場合は奇数である。1ビット目が0の場合偶数である。
これを利用したものです。
たしか、割り算をするよりもビット演算の方が実行速度が速かった気がします。(VBでも速いのかよくわからないですが。)
No.3
- 回答日時:
解答自体は、No.1 No.2で良いのですが、回りに質問できる
同僚・先輩・上司等はおられないのでしょうか?
他にも同様な事をしていて、その結果が連日の深夜残業に
なっている様な気がします。
他にも困っている問題が残っているのであれば、納期遅れ
になる前に上司に報告して判断を仰ぎましょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
オンライン健康相談gooドクター登場
24時間365日いつでも医師に健康相談できる!詳しくはコチラ>>
-
excel・VBAで奇数・偶数の分岐がうまくいかない。
Excel(エクセル)
-
DataGridViewで指定したセルの値を取得
Visual Basic(VBA)
-
VB.NET getとsetの概念がわかりません。
Visual Basic(VBA)
-
4
奇数・偶数の判断 VBA
Excel(エクセル)
-
5
モーダルフォームとモードレスフォーム
Visual Basic(VBA)
-
6
VB.NETで他のプロジェクトで作成したフォームを使う方法
Visual Basic(VBA)
-
7
vb.netで画面のコントロールId名を変数で動的に制御し処理する方法
Visual Basic(VBA)
-
8
文字列の後ろから必要分だけ削除したい。
Visual Basic(VBA)
-
9
VB.NET の配列の要素数
Visual Basic(VBA)
-
10
VB.net 引数で配列変数を渡す際の要素数
Visual Basic(VBA)
-
11
.NET SqlDataReader のレコード有無判定
Visual Basic(VBA)
-
12
VB.NETでフォーム上にExcelのような表を表示する方法
Visual Basic(VBA)
-
13
vb2008にてDefaultCellStyleが反映されない
Visual Basic(VBA)
-
14
VB初心者。小数点以下の表示でつまづいています(涙
Visual Basic(VBA)
-
15
「エクセルファイルが開いていたら開かない」としたい
Visual Basic(VBA)
-
16
偶数、奇数の判定について
Visual Basic(VBA)
-
17
VB2010でExcelの行をコピーして挿入する
Visual Basic(VBA)
-
18
「%」を使って、偶数か奇数かを判別するプログラムです。
C言語・C++・C#
-
19
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
20
VB.NETの配列の限界を教えてください
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
現在アクティブなフォーム名を...
-
5
VBでグローバル変数を宣言するには
-
6
Access VBA標準モジュールにつ...
-
7
VBA モジュールで共通に使う変...
-
8
どのファイルを開いた時もマク...
-
9
モジュールとは何ですか
-
10
Form間の値の渡し方
-
11
他Book(シートモジュール)のマ...
-
12
モジュールとクラスの違いって...
-
13
VBのフォームモジュールと標準...
-
14
標準モジュールを削除したい。(...
-
15
VBA モジュールを閉じるショー...
-
16
private subモジュールを他のモ...
-
17
ユーザー定義関数に#NAME?が返...
-
18
Excel VBAでリンク切れをチェッ...
-
19
VBAからpythonへの転向について
-
20
大量の標準モジュールを解放す...
おすすめ情報