Добрый вечер. Есть самый простой кусок кода
int k = 0;
for (double x = -2; x <= 2; x += 0.2)
{
try
{
mas_a[k] = sqrt(pow(x, 2) - 1);
k++;
}
catch (EDivByZero &e) //ловим деление на 0
{
mas_a[k] = 0;
cout << "Деление на ноль целых чисел" << endl;
k++;
}
catch (EZeroDivide &e)
{
mas_a[k] = 0;
cout << "Деление на ноль вещественных чисел" << endl;
k++;
}
cout << "[" << k << "]=>" << mas_a[k] << " | ";
}
Нужно в диапазоне [-2,2] с шагом 0.2 заполнить массив по функции sqrt(pow(x, 2) - 1). И вылавливать исключения деления на 0. Написал, но ругается на EZeroDivide и EDivByZero. Что не так?
Никаких исключений EDivByZero
и EZeroDivide
нет. Это С++, а не delphi. Более того, деление на 0 никакого исключения в С++ не производит (для встроенных типов). Это в С++ не то, за что отвечают исключения, а ошибка, за которую должен отвечать программист, чтобы такого не допускать.
Предлагаю использовать в таком случае что-то такое:
#include <iostream>
#include <stdexcept>
using namespace std;
int main(){
try{
int i = 0; //для проверки
if(!i) throw invalid_argument("division by zero");
else cout<<(double)1/i<<endl;
}
catch(invalid_argument& oop){
cout<<oop.what()<<endl;
}
return 0;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Доброго времени суток, как задать 10 млн чисел после запятой в массиве?
Есть демо интернет-магазин на wordpress+woocommerce (на хостинге поддержка php 56) и его полная итоговая копия