アフィリエイト広告を利用しています

広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog

2017年09月01日

《その10》 p.30演習1-13,演習1-14


新版 明解C++ 入門編 p.30 演習1-13

// p030_演習1-13

#include <ctime>
#include <cstdlib>
#include <iostream>
using namespace std;

int main()
{
srand(time(NULL));
cout << rand() % 9 + 1 << " "
<< rand() % 9 + 1 << " "
<< rand() % 9 + 1 << "\n";

cout << "\n";
cout << -(rand() % 9 + 1) << " "
<< -(rand() % 9 + 1) << " "
<< -(rand() % 9 + 1) << "\n";

cout << "\n";
cout << rand() % 90 + 10 << " "
<< rand() % 90 + 10 << " "
<< rand() % 90 + 10 << "\n";
}


このプログラムで コンパイルは成功します。できあがった実行ファイルも ちゃんと動作します。
なので このままでいいのですが、Visual Studio Community 2017 は このコードをコンパイルするときに、『warning C4244: '引数': 'time_t' から 'unsigned int' への変換です。データが失われる可能性があります。』という警告を出してきます。

srand関数は'unsigned int'型の値が欲しいのに、与えられた time(NULL) が'time_t'型なので、「'time_t' から 'unsigned int' へ変換して使いますが、データが失われるかもしれませんよ。」という警告みたいです。

変換されても大丈夫なので、警告を無視してもかまわないのですが、気になる人は、
	srand(time(NULL));

	srand((unsigned int)time(NULL));
とすれば、警告は出なくなります。

(unsigned int)time(NULL) とすると、time(NULL)の型を'unsigned int'に変換できるようです。で、変換したものを srand関数に渡すことになるので、Visual Studio Community 2017 は納得してくれます。



p030_演習1-13 の実行例

c1.jpg

c1.jpg

c1.jpg




新版 明解C++ 入門編 p.30 演習1-14

// p030_演習1-14

#include <ctime>
#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int x;
cout << "任意の整数値を入力 : "; cin >> x;

srand((unsigned int)time(NULL));
cout << x - 5 + rand() % 11 << " "
<< x - 5 + rand() % 11 << " "
<< x - 5 + rand() % 11 << " "
<< x - 5 + rand() % 11 << " "
<< x - 5 + rand() % 11 << " "
<< x - 5 + rand() % 11 << "\n";
}


rand() % 11 は 0 〜 10 までの乱数なので、
- 5 + rand() % 11 は -5 〜 5 までの乱数になります。

したがって、
x - 5 + rand() % 11 は x - 5 〜 x + 5 までの乱数になります。



新版 明解C++ 入門編は、p.30の段階では、まだ 繰返しの方法を説明してくれてないので、ちょっとくどいですが 値を出力させたい回数だけ同じコードを書きました。


p030_演習1-14 の実行例

c1.jpg

c1.jpg

c1.jpg
 

新版 明解C 入門編 (明解シリーズ)

新品価格
¥2,916から
(2017/8/30 21:02時点)











--

《その9》 p.27 Column 1-2 除算の演算結果


int x = -22; int y = 5;
のときの

商  x / y
剰余 x % y


について考えてみます。


(-22) ÷ 5 を、次の@A の2通りのやり方で計算してみます。

@
 符号を除いて絶対値で計算すると 22 ÷ 5 = 4.4
 商は 4.4以下の最大の整数だから 4
 結果は負なので、これに負の符号を付けて 商は -4
 余りは
   (元の数) − (割る数) × 商
 を計算して
   (-22) − 5 × (-4) = -2

 このように考えると
   商  x / y は -4
   剰余 x % y は -2

 になります。

A
 符号を付けたままで計算すると (-22) ÷ 5 = (-4.4)
 商は -4.4以下の最大の整数だから -5
 余りは
   (元の数) − (割る数) × 商
 を計算して
   (-22) − 5 × (-5) = 3

 このように考えると
   商  x / y は -5
   剰余 x % y は 3

 になります。

------------------------------------------------------------
------------------------------------------------------------

int x = 22; int y = -5;
のときの

商  x / y
剰余 x % y


について考えてみます。


22 ÷ (-5) を、次の@,A の2通りのやり方で計算してみます。

@
 符号を除いて絶対値で計算すると 22 ÷ 5 = 4.4
 商は 4.4以下の最大の整数だから 4
 結果は負なので、これに負の符号を付けて 商は -4
 余りは
   (元の数) − 商 × (割る数)
 を計算して
   22 − (-4) × (-5) = 2

 このように考えると
   商  x / y は -4
   剰余 x % y は 2

 になります。

A
 符号を付けたままで計算すると 22 ÷ (-5) = (-4.4)
 商は -4.4以下の最大の整数だから -5
 余りは
   (元の数) − 商 × (割る数)
 を計算して
   22 − (-5) × (-5) = -3

 このように考えると
   商  x / y は -5
   剰余 x % y は -3

 になります。

------------------------------------------------------------
------------------------------------------------------------


   (元の数) − 商 × (割る数) = 剰余
を変形すれば
   (元の数) = 商 × (割る数) + 剰余
つまり
   x = ( x / y ) * y + x % y
は当りまえですね (^^)
 

新版 明解C 入門編 (明解シリーズ)

新品価格
¥2,916から
(2017/8/30 21:02時点)











--

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


検索
<< 2017年09月 >>
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
プロフィール
こうすけさんの画像
こうすけ

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


×

この広告は30日以上新しい記事の更新がないブログに表示されております。