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';
}
}
新版明解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';
}
}
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/7209192
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック