ページ 11

プログラムの簡略化について

Posted: 2008年12月05日(金) 10:37
by いけやん
いつもお世話になっております。
いけやんです。

始めに言いますと開発は「VB」になります。(一応規約を読むとC以外でもおkとの事だったので・・・)
大丈夫かな?

タイトルにある通りプログラムを簡略化(もしくは、短く、効率、がいい様)にしたく
又、考え方等がCでもVBでも関係なく通用するかな?と思い質問さして頂きました。

開発環境
Win XP
VB6.0

今VBでクリックで「・」点を打ち、座標を取ってくるプログラムを作っています。
そして、そこの処理で「具体的な座標」と「おおよその座標」が必要な処理で悩んでいます。

「具体的な座標」はうまくいったのですが、「おおよその座標」の処理が
例えば「具体的」X = 8391.0だったとすると
おおよそに直すとX = 8000.0にし、8521.0の場合は9000.0にくり上げする仕様です。
(三桁目を見て○500から上はくり上げ)
(○499までは切り捨てとなっております)

そこで自分が考えた処理は
if X = 1000から1999の間か{
     if 1000から1499までか{X = 1000代入}
     else X =2000代入
}
次は2000の処理,3000の処理・・・と続いていくので
非効率かなと思い皆様のお力を借りにきました。



X = 7488.0→7000.0
X = 3963.0→4000.0

この様な感じになっております、質問がわかり難い、見にくい等
あると思いますが、どうぞよろしくお願い致します。

Re:プログラムの簡略化について

Posted: 2008年12月05日(金) 10:46
by Mist
1.具体的な座標を整数型の変数Aに入れる(2のため)
2.Aを1000で割ったあまりを変数Bに入れる
3.変数Bが500未満であれば、おおよその座標は具体的な座標を1000で割った商
  変数Bが500以上であれば、おおよその座標は具体的な座標を1000で割った商+1000

で出来ると思います。

Re:プログラムの簡略化について

Posted: 2008年12月05日(金) 10:50
by 御津凪
X = (((X+500)/1000)*1000);
こういう計算で1000 単位での四捨五入が出来ると思う。

Re:プログラムの簡略化について

Posted: 2008年12月05日(金) 10:52
by Mist
最後間違えてる(^^;

3.変数Bが500未満であれば、おおよその座標は具体的な座標を1000で割った商に1000掛ける
  変数Bが500以上であれば、おおよその座標は具体的な座標を1000で割った商+1して1000掛ける


VBは昔やったけど忘れてしまったのでCで書いてみた。
構文はともかく考え方は同じと思うので。
double  d_gutai = 8500.0;
int     i_gutai;
int     amari;
int     oyoso;

i_gutai = d_gutai;
amari = i_gutai % 1000;
if (amari < 500) {
    oyoso = (i_gutai / 1000) * 1000;
} else {
    oyoso = ((i_gutai / 1000) + 1) * 1000;
}

Re:プログラムの簡略化について

Posted: 2008年12月05日(金) 11:26
by いけやん
Mistさん
御津凪さん
ご回答、ありがとうございます。

御二方のソースを打ってから、また返信したいと思います。

Re:プログラムの簡略化について

Posted: 2008年12月10日(水) 10:16
by いけやん
申し訳ありません。ご返信が遅くなりました。
月曜ぐらいには、できていたのですが掲示板を見ていなかったので
遅れました(汗

御二方のソースを参考(ほぼ、Mistさんですが・・・)
下記の様な感じになりました。
Private Function TGhn_FT_X(nX As Single) As Integer

    Dim Ans As Integer
    Dim amari As Integer
    
    amari = nX Mod 1000
    amari = Abs(amari)
    If Abs(amari) < 500 Then
        Ans = (Abs(nX / 1000)) * 1000
    Else
        Ans = (Abs(nX / 1000) + 1) * 1000
    End If
    Ans = Ans - amari'3桁以下を000にする
    
    '元の値が-なら-にしてやる
    If nX < 0 Then
        Ans = Ans * -1
    End If
    
    TGhn_FT_X = Ans
    
End Function
御二方、ありがとうがざいました。
完成してから気付いたのですが、四捨五入のプログラムでしたね。
ググればいっぱいでてきましたorz
お手数をお掛けしました。