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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
いけやん

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

#1

投稿記事 by いけやん » 16年前

いつもお世話になっております。
いけやんです。

始めに言いますと開発は「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

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

Mist

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

#2

投稿記事 by Mist » 16年前

1.具体的な座標を整数型の変数Aに入れる(2のため)
2.Aを1000で割ったあまりを変数Bに入れる
3.変数Bが500未満であれば、おおよその座標は具体的な座標を1000で割った商
  変数Bが500以上であれば、おおよその座標は具体的な座標を1000で割った商+1000

で出来ると思います。

御津凪

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

#3

投稿記事 by 御津凪 » 16年前

X = (((X+500)/1000)*1000);
こういう計算で1000 単位での四捨五入が出来ると思う。

Mist

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

#4

投稿記事 by Mist » 16年前

最後間違えてる(^^;

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:プログラムの簡略化について

#5

投稿記事 by いけやん » 16年前

Mistさん
御津凪さん
ご回答、ありがとうございます。

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

いけやん

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

#6

投稿記事 by いけやん » 16年前

申し訳ありません。ご返信が遅くなりました。
月曜ぐらいには、できていたのですが掲示板を見ていなかったので
遅れました(汗

御二方のソースを参考(ほぼ、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
お手数をお掛けしました。

閉鎖

“C言語何でも質問掲示板” へ戻る