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

広告

posted by fanblog

2018年01月17日

《その241》 問題演習 p.307演習8-6,演習8-7



新版明解C++中級編 p.307 演習8-6
 次のプログラムの例外ハンドラを、const exception& 型を受け取るように改変したプログラムを作成せよ。


// 整数 0 〜 99以下の加算

#include <iostream>
#include <exception>
using namespace std;

int add(int v1, int v2) {
// v1, v2 が 0 〜 99 でなければ out_of_rangeエラー

if ((v1 < 0 || v1 > 99) && (v2 >=0 && v2 <=99))
throw out_of_range("v1の値が不正。");

if ((v2 < 0 || v2 > 99) && (v1 >= 0 && v1 <= 99))
throw out_of_range("v2の値が不正。");

if ((v1 < 0 || v1 > 99) && (v2 < 0 || v2 > 99))
throw out_of_range("v1, v2の値が不正。");

return v1 + v2;
}

int main() {
int x, y;

cout << "xの値(0〜99):";
cin >> x;

cout << "yの値(0〜99):";
cin >> y;

try {
cout << "加算した値は" << add(x, y) << "です。\n";
}
catch (const logic_error& e) {
cout << "論理エラー発生:" << e.what() << '\n';
}
}



// 解答
#include <iostream>
#include <exception>
using namespace std;

int add(int v1, int v2) {
if ((v1 < 0 || v1 > 99) && (v2 >=0 && v2 <=99))
throw out_of_range("v1の値が不正。");

if ((v2 < 0 || v2 > 99) && (v1 >= 0 && v1 <= 99))
throw out_of_range("v2の値が不正。");

if ((v1 < 0 || v1 > 99) && (v2 < 0 || v2 > 99))
throw out_of_range("v1, v2の値が不正。");

return v1 + v2;
}

int main() {
int x, y;

cout << "xの値(0〜99):";
cin >> x;

cout << "yの値(0〜99):";
cin >> y;

try {
cout << "加算した値は" << add(x, y) << "です。\n";
}
catch (const exception& e) {
cout << "論理エラー発生:" << e.what() << '\n';
}
}

f08_0091.png

f08_0092.png

f08_0093.png

f08_0094.png





新版明解C++中級編 p.307 演習8-7
 次のプログラムの二つの例外ハンドラを、const exception& 型を受け取るもの一つのみに改変したプログラムを作成せよ。


// 整数 0 〜 99以下の加算
// 結果も 0 〜 99でなければならない。

#include <iostream>
#include <exception>
using namespace std;

int add(int v1, int v2) {
// v1, v2 が 0 〜 99 でなければ out_of_rangeエラー

if ((v1 < 0 || v1 > 99) && (v2 >= 0 && v2 <= 99))
throw out_of_range("v1の値が不正。");

if ((v2 < 0 || v2 > 99) && (v1 >= 0 && v1 <= 99))
throw out_of_range("v2の値が不正。");

if ((v1 < 0 || v1 > 99) && (v2 < 0 || v2 > 99))
throw out_of_range("v1, v2の値が不正。");

// v1 + v2 が 0 〜 99 でなければ overflow_errorエラー
int sum = v1 + v2;
if (sum < 0 || sum > 99)
throw overflow_error("オーバフロー。");

return v1 + v2;
}

int main() {
int x, y;

cout << "xの値(0〜99):";
cin >> x;

cout << "yの値(0〜99):";
cin >> y;

try {
cout << "加算した値は" << add(x, y) << "です。\n";
}
catch (const logic_error& e) {
cerr << "論理エラー発生:" << e.what() << '\n';
}
catch (const runtime_error& e) {
cerr << "実行時エラー発生:" << e.what() << '\n';
}
}



// 解答
#include <iostream>
#include <exception>
using namespace std;

int add(int v1, int v2) {
if ((v1 < 0 || v1 > 99) && (v2 >= 0 && v2 <= 99))
throw out_of_range("論理エラー発生:v1の値が不正。");

if ((v2 < 0 || v2 > 99) && (v1 >= 0 && v1 <= 99))
throw out_of_range("論理エラー発生:v2の値が不正。");

if ((v1 < 0 || v1 > 99) && (v2 < 0 || v2 > 99))
throw out_of_range("論理エラー発生:v1, v2の値が不正。");

int sum = v1 + v2;
if (sum < 0 || sum > 99)
throw overflow_error("実行時エラー発生:オーバフロー。");

return v1 + v2;
}

int main() {
int x, y;

cout << "xの値(0〜99):";
cin >> x;

cout << "yの値(0〜99):";
cin >> y;

try {
cout << "加算した値は" << add(x, y) << "です。\n";
}
catch (const exception& e) {
cerr << e.what() << '\n';
}
}

f08_0095.png

f08_0096.png



この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/7209192
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック

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

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

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

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

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


検索
<< 2018年08月 >>
      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 31  
プロフィール
こうすけさんの画像
こうすけ

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

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

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

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

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


×

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