新規記事の投稿を行うことで、非表示にすることが可能です。
2017年09月05日
《その16》 p.63 fmod関数
fmod関数(p.63)で実数の剰余を求めることができます。
(例1) 2.4 ÷ 1.5
fmod(2.4, 1.5) で 2.4 を 1.5 で割ったときの剰余を求めることができます。
電卓で 2.4 ÷ 1.5 を計算すると、割り切れて 商は1.6 です。
割り切れるのなら 剰余は 0 のはずだから、fmod(2.4, 1.5) は 0 になるような気が
してしまいますが、そうではありません。
fmod(2.4, 1.5) は 0.9 になります。なぜだかわかりますか?
fmod関数は、「商は整数である」 と考えているようです。
2.4 の中に 1.5 は1つしか含まれないので、
商は 1
剰余は 2.4 − 1.5 × 1 を計算して 0.9
ということになります。
(例2) 2.4 ÷ 2.5
2.4 の中に 2.5 は含まれないので、
商は 0
剰余は 2.4
です。
(例3) 3.1 ÷ 1.5
3.1 の中に 1.5 は2つ含まれるので、
商は 2
剰余は 0.1
です。
#include <cmath>
#include <iostream>
using namespace std;
int main()
{
double x;
cout << "実数値:"; cin >> x;
if (double m = fmod(x, 1.5)) {
cout << "その値は1.5で割り切れません。\n";
cout << "剰余は" << m << "です。\n";
}
else {
cout << "その値は1.5で割り切れます。\n";
}
}
--
《その15》 p.60 コンマ演算子,p.62 条件における宣言,p.61演習2-13
まず、p.61演習2-13 のコードを書き、そのあとで 『コンマ演算子』 と 『条件における宣言』 について考えてみます。
新版 明解C++ 入門編 p.61 演習2-13
// p061_演習2-13
#include <iostream>
using namespace std;
int main()
{
int a, b;
cout << "変数a:"; cin >> a;
cout << "変数b:"; cin >> b;
if (a < b) {
int t = a; /* ブロック内でのみ利用する変数は、
そのブロックの中で宣言する。 */
a = b;
b = t;
}
cout << "a≧bとなるようにソートしました。\n";
cout << "変数aは " << a << "です。\n";
cout << "変数bは " << b << "です。\n";
}
次に、コンマ演算子を使ってみます。どのように使うかは いろいろなやり方があるので、もっとセンスのある使い方がたくさんあると思いますが、
(`・ω・´) とりあえず・・・
新版 明解C++ 入門編 p.61 演習2-13 別解
// p061_演習2-13
#include <iostream>
using namespace std;
int main()
{
int a, b;
cout << "変数a:"; cin >> a;
cout << "変数b:"; cin >> b;
if (int t = a < b) t = a, a = b, b = t;
cout << "a≧bとなるようにソートしました。\n";
cout << "変数aは " << a << "です。\n";
cout << "変数bは " << b << "です。\n";
}
上のコードで
if (int t = a < b) t = a, a = b, b = t;
の部分が 変更箇所です。p.62 『条件における宣言』 に if文の ( ) の中に指定する《条件》は、単なる式だけでなく、変数の宣言であってもよい と書かれています。
上のコードの int t = a < b の部分です。
”=” より ”<” のほうが優先順位が上なので、まず a < b が評価され、true または false が決まります。次に、trueであれば 1、false であれば 0 が t に代入され、最後に "int t = a < b" 全体が t の値で評価されます。
なので、結果的に、条件 (int t = a < b) は (a < b) と同じ働きをすることになると思われます。
そのついでに、t の初期化も完了するんですね。
つまり、"int t = a < b" は、 ていねいに書くと、"int t = (a < b)" または "int t = (int)(a < b)" ということなんだと思います。
そして、 『コンマ演算子』を
t = a, a = b, b = t;
のようにして使ってみました。
--
《その14》 p.57演習2-10,演習2-11,p.59演習2-12
新版 明解C++ 入門編 p.57 演習2-10
// p057_演習2-10
#include <iostream>
using namespace std;
int main()
{
int a, b, c;
cout << "整数a:"; cin >> a;
cout << "整数b:"; cin >> b;
cout << "整数c:"; cin >> c;
int min = a;
if (b < min) min = b;
if (c < min) min = c;
cout << "最小値は " << min << "です。\n";
}
新版 明解C++ 入門編 p.57 演習2-11
// p057_演習2-11
#include <iostream>
using namespace std;
int main()
{
int a, b, c;
cout << "整数a:"; cin >> a;
cout << "整数b:"; cin >> b;
cout << "整数c:"; cin >> c;
int mid = a;
if ((b - c) * (b - a) <= 0) mid = b;
if ((c - a) * (c - b) <= 0) mid = c;
cout << "中央値は " << mid << "です。\n";
}
新版 明解C++ 入門編 p.59 演習2-12
// p059_演習2-12
#include <iostream>
using namespace std;
int main()
{
int a, b;
cout << "整数a:"; cin >> a;
cout << "整数b:"; cin >> b;
int min = a;
int max = b;
if (a > b) {
min = b;
max = a;
}
if (a == b) cout << "二つの値は同じです。\n";
else {
cout << "小さいほうの値は" << min << "です。\n";
cout << "大きいほうの値は" << max << "です。\n";
}
}
--
《その13》 p.55演習2-7,演習2-8,演習2-9
新版 明解C++ 入門編 p.55 演習2-7
// p055_演習2-7
#include <iostream>
using namespace std;
int main()
{
double p, q;
cout << "実数p:"; cin >> p;
cout << "実数q:"; cin >> q;
cout << "大きいほうの値は " << (p > q ? p : q) << "です。\n";
}
新版 明解C++ 入門編 p.55 演習2-8
// p055_演習2-8
#include <iostream>
using namespace std;
int main()
{
int a, b;
cout << "整数a:"; cin >> a;
cout << "整数b:"; cin >> b;
cout << "2数の差は " << (a > b ? a - b : b - a) << "です。\n";
}
新版 明解C++ 入門編 p.55 演習2-9
// p055_演習2-9
#include <iostream>
using namespace std;
int main()
{
int a, b;
cout << "整数a:"; cin >> a;
cout << "整数b:"; cin >> b;
int d = a > b ? a - b : b - a; // dは2数の差
cout << "それらの差は ";
d > 10 ? (cout << "11以上です。") : (cout << "10以下です");
cout << '\n';
}
--
《その12》 p.47演習2-4,演習2-5,p.53演習2-6
新版 明解C++ 入門編 p.45 演習2-4
// p047_演習2-4
#include <iostream>
using namespace std;
int main()
{
int x;
cout << "正の整数値を入力 : "; cin >> x;
if (x <= 0)
cout << "正でない値が入力されました。\n";
else if (x % 5)
cout << "その値は5で割り切れません。\n";
else
cout << "その値は5で割り切れます。\n";
}
新版 明解C++ 入門編 p.47 演習2-5
// p047_演習2-5
#include <iostream>
using namespace std;
int main()
{
int x;
cout << "正の整数値を入力 : "; cin >> x;
if (x <= 0)
cout << "正でない値が入力されました。\n";
else if (!(x % 3))
cout << "その値は3で割り切れます。\n";
else
cout << "その値を3で割った剰余は " << x % 3 << "です。\n";
}
新版 明解C++ 入門編 p.53 演習2-6
// p047_演習2-6
#include <iostream>
using namespace std;
int main()
{
int x;
cout << "点数を入力 : "; cin >> x;
if (x < 0 || x > 100)
cout << "不適切な値が入力されました。\n";
else if (x < 60)
cout << "不可\n";
else if (x < 70)
cout << "可\n";
else if (x < 80)
cout << "良\n";
else
cout << "優\n";
}
--