Помощь с C++ с использованием кода псевдокода (переполнение / недополнение)

Я едва учился на 4-й неделе C++ в школе и искал ориентир в правильном направлении.

 #include "std_lib_facilities_3.h"

class BadArea{};

int area(int length, int width){
    if(length <= 0 || width <=0) throw BadArea();
    return length * width;
}

double mysqrt(double x){
    if(x < 0.0) error("mysqrt");
    return 1.0; //dummy value for now, need to write code later
}

int main(){
    try{
        char length = 0;
        char width = 0;
        cout << "Enter length and width seperated by a space\n";
        cin >> length;
        cin >> width;
        vector<double> v(10);
        v[9] = 7.5;
        cout << area(7, -10) << '\n';
        cout << mysqrt(-2.0) << '\n';
        return 0;
    }
    catch(BadArea){
        cerr << "Exception: Bad area\n";
    }
    catch(exception& e){
        cerr << "ExceptionZ: " << e.what() << '\n';
    }
    catch(...){
        cerr << "Exception occurred\n";
    }
}

И это то, что задание просит нас;

   //Check for overflow in the area function
      result = length * width
      if result is negative or result/length <> width, throw an exception
  //Use 3 iterations of the Newton-Raphson method for mysqrt
      if x is 0, result is 0 so return it
      if x is 1, result is 1 so return it
      otherwise,
         result = (x^4 + 28x^3 + 70x^2 + 28x + 1)/(8*(1 + x)*(1 + 6x + x^2))

Измените main, чтобы иметь бесконечный цикл вокруг части try / catch; в блоке try задайте длину и ширину; если cin не удается, вернитесь, в противном случае выведите область и напечатайте mysqrt этой области. Назовите вашу программу hw3pr2.cpp. (Вспомните, что cin потерпит неудачу, если вы введете что-то, что не является должным образом отформатированным int, например, слово "конец".)

Я понимаю, как читать код, но у меня возникают трудности с его запуском, и я как-то путаюсь с "scope", пока он компилируется правильно, но продолжает давать мне Range Error: 10. значит ли это, что я использую область класса не так?

Может ли кто-нибудь, пожалуйста, указать мне в правильном направлении? Спасибо!

1 ответ

Вы объявляете вектор из 10 элементов и пытаетесь получить доступ к 11-му элементу с помощью v[10],

[EDIT] Как уже указывали другие, std::vector не выполняет проверку границ по умолчанию, но если "std_lib_facilities_3.h" похож на это, то он определяет свой собственный векторный класс с проверкой диапазона.

[EDIT2] Итак, вы обновили свой код, так что длина и ширина должны быть больше 0, иначе будет выдано исключение BadArea, но вы всегда вызываете area(7, -10), так что вы всегда получите исключение. Я думаю, что вы хотите передать длину и ширину функции площади: cout << area(length, width) << '\n';

Другие вопросы по тегам