プロが教えるわが家の防犯対策術!

プログラムについて全くわからないので教えて下さい。
アドバイスでもいいのでお願いします!
(1)FORTRANの関数MODや、Cの演算子%を使わないで「余り」を求める方法(プログラム)を教えてください。

(2)Nを金額(整数型で単位は円)とするとき、
  (1) 100円未満を切り捨てる
  (2) 10円未満を切り上げる
  (3) 1000円未満を四捨五入する
ためのプログラム(全部で3本)を教えてください。

A 回答 (4件)

使用する言語の指定が無いので考え方だけです。



(1)使用する変数型は整数として
   X÷Y=Z
   X-Y×Z=余り

(2)の (1)は100で割って100倍してください。
    (2)9を加えて10で割って10倍してください。
    (3)500加えて1000で割って1000倍してください。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2002/09/30 22:38

(1)


int n = 10, x = 3;
int amari = n - ((n / x) * x);

(2)
1. int n = 123; int res = (n / 100) * 100;
2. int n = 123; int res = ((n / 10) + (n % 10 ? 1 : 0)) * 10;
3. int n = 1234; int res = ((n / 1000) + (n % 1000 > 500 ? 1 : 0)) * 1000;

C です。こんなもんでどうでしょう?
    • good
    • 0
この回答へのお礼

ありがとうございます。
ちょっとお聞きしたいのですが、
(2)の2のところで、式の意味は分かるのですが、『?』と『:』の意味は何ですか?
あと、(2)の3の『>』の意味もよかったら教えてください。

お礼日時:2002/09/30 22:50

#1に既にご解答がありますが、コーディングでは


(2)は整数を出す関数INTがあるとして(ほとんどの言語にあり),実例で説明すると、273や2890をnとしてください。n=273 a=100*int(n/100)等のコードとなります。
100*int(273/100) 273-->200
10*int((273+9)/10) 273-->280
1000*int((2890+500)/1000) 2890-->3000
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2002/09/30 22:52

>(2)の2のところで、式の意味は分かるのですが、『?』と『:』の意味は何ですか?



C言語の 三項演算子 といって、
 A ? B : C
の A が真なら B の値、A が 偽 なら C の値をとるというものです。VB系なら iif 文と同じようなものです。ですから、
 n % 10 ? 1 : 0
の場合、n を 10 で割った余りが 0 (偽)なら 0、余りが 0ではない(真)なら 1 の値を取ります。
 n % 1000 > 500 ? 1 : 0
'>' は不等号記号です。n % 1000 が 500 より大きければ 1、500未満なら 0 の値を取ります。

ただ、この方法よりも #1 さんの回答の方がよいですね。それと、整数型で変数を宣言していることが前提で、#3さんのご指摘されていた 整数化の処理は省略しています。VB系や perl等、変数の型が不定の言語系では明示的にまるめないと期待通りの動作になりません。#蛇足ですが...

ちなみに三項演算子は「見にくい(解りにくい)」とよく言われ、余り好まれないようです。#私は好きなんですけどね(汗。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2002/10/04 20:42

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