Форум программистов, компьютерный форум CyberForum.ru

Напишите программу, которая контролирует индексы, выходящие за пределы массива и генерирует исключения. - C++

Восстановить пароль Регистрация
 
Владислаучык
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 291
15.02.2014, 21:41     Напишите программу, которая контролирует индексы, выходящие за пределы массива и генерирует исключения. #1
Реализовать базовый класс исключений и многоуровневую иерархию производных классов с использованием наследования, таких как выход индекса за пределы массива, неправильный аргумент у функции, переполнение сверху, переполнение снизу, ошибка диапазона, ошибка выделения памяти и др. №2 Промоделировать ситуацию, в которой будет важна последовательность вызова обработчиков в иерархии исключений.

Вот именно моё задание: Напишите программу, которая контролирует индексы, выходящие за пределы массива и генерирует исключения. В сообщение об ошибке должна входить информация о значении индекса, приведшего к сбою.

Вот код, пока без иерархии классов хочу разобратся, можно впринципе и динамический массив сделать.
C++
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
#include <iostream>
#include <string>
#include <locale.h>
#include <exception>
using namespace std;
 
 
 
int main()
{
    setlocale(LC_ALL,"Russia");
    int m[3];
    int a;
    cin>>a;
    try
    {
        //cin>>a;
        m[a]=30/a;
        //cout<<m[a];
        //cout<<"alala";
    }
    catch(int [])
    {
        cout<<m[a];
    }
    system("pause");
}
Вопросы: Почему тут катч не работает, с throw тоже не перехватывается, и ещё подскажите плз, функцию возвращающую индекс элемента, есть ли она, и как вообще вывести индекс приведший к сбою
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.02.2014, 21:41     Напишите программу, которая контролирует индексы, выходящие за пределы массива и генерирует исключения.
Посмотрите здесь:

Составьте программу, которая выводит индексы тех элементов массива (состоящего из В целых чисел), значение которых больше заданного числа А C++
C++ Выход за пределы массива, обработка исключения
Даны два массива. Напишите программу, которая находит такую последовательность элементов максимальной длины, которая содержится и в первом, и во вт C++
Напишите программу, которая позволяет пользователю ввести число, а затем генерирует таблицу размером 20 строк на 10 столбцов C++
Напишите программу, которая увеличивает элементы массива с четными индексами на «1» C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
15.02.2014, 21:49     Напишите программу, которая контролирует индексы, выходящие за пределы массива и генерирует исключения. #2
Цитата Сообщение от Владислаучык Посмотреть сообщение
Вопросы: Почему тут катч не работает, с throw тоже не перехватывается, и ещё подскажите плз, функцию возвращающую индекс элемента, есть ли она, и как вообще вывести индекс приведший к сбою
С.Прата Язык программирования С++ - там в теме исключений есть как раз [].
Начнём с того, что у вас исключения не вызывается, точнее вызывается что-то типа index_error - производный объект от базового expection.
вот здесь, надо вызывать как раз объект, по которому генерируется исключение
C++
1
 [quote="Владислаучык;5786180"]catch(int [])[/quote]
т.е. к примеру catch(index_error &obj)
в теле обработки исключения, надо описать его т.е. к примеру выглядеть это будет так:
C++
1
2
3
4
5
catch(index_error &obj) // передаем объект типа index_error по ссылке
{
cout<<"Error! The index of array is not range!";
// тут можно завершить программу exit'ом или продолжить, что угодно
}
само прерывание тоже надо генерировать, т.е. к примеру есть функция getArray - которая возвращает i элемент, тогда
C++
1
2
3
4
5
6
int  getArray(int* m, int i)
{
if (i<0 || i> a)  // a - предел массива
    throw index_error;
return m[i];
}
я настоятельно рекомендую заглянуть в Прата т.к. там это точно есть, я же могу что-то сказать не так ибо сам не так давно только читал про исключения

кстати вы по идее можете перехватывать исключения базовым expecition
stikkas
 Аватар для stikkas
19 / 19 / 6
Регистрация: 26.01.2014
Сообщений: 56
15.02.2014, 21:55     Напишите программу, которая контролирует индексы, выходящие за пределы массива и генерирует исключения. #3
Вообще-то стандартные массивы не выбрасывают исключений при неправильном индексе. Они его не проверяют.
Индекс проверяет метод at класса vector. Данные по неправильному индексу просто записываются в область памяти определяемую как arr + index, могут перезатереть важные данные и нарушить выполнение программы. В данном случае программа маленькая и ничего не происходит (заметного). Нужно либо писать свой класс хранения данных, либо использовать vector, либо array (для стандарта с++11)
Владислаучык
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 291
15.02.2014, 22:51  [ТС]     Напишите программу, которая контролирует индексы, выходящие за пределы массива и генерирует исключения. #4
Цитата Сообщение от stikkas Посмотреть сообщение
Вообще-то стандартные массивы не выбрасывают исключений при неправильном индексе. Они его не проверяют.
Индекс проверяет метод at класса vector. Данные по неправильному индексу просто записываются в область памяти определяемую как arr + index, могут перезатереть важные данные и нарушить выполнение программы. В данном случае программа маленькая и ничего не происходит (заметного). Нужно либо писать свой класс хранения данных, либо использовать vector, либо array (для стандарта с++11)
вектор и аррау точно не надо(не проходили ещё ), ну тут по условию надо иерархию классов создать, я просто пока разобратся решил всё в маине сделать, не получилось (
stikkas
 Аватар для stikkas
19 / 19 / 6
Регистрация: 26.01.2014
Сообщений: 56
16.02.2014, 09:34     Напишите программу, которая контролирует индексы, выходящие за пределы массива и генерирует исключения. #5
Цитата Сообщение от Владислаучык Посмотреть сообщение
Вот именно моё задание: Напишите программу, которая контролирует индексы, выходящие за пределы массива и генерирует исключения. В сообщение об ошибке должна входить информация о значении индекса, приведшего к сбою.
C++
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <string>
using std::string;
using std::cin;
using std::cout;
using std::cerr;
using std::endl;
 
class OutRangeError {
public:
    OutRangeError(int idx) : index(idx) {}
    virtual ~OutRangeError(){}
    virtual string what() const {
        return "Error index";
    }
    int getIndex() const {return index;}
private:
    int index;
};
 
class LowBoundError : public OutRangeError {
public:
    LowBoundError(int idx) : OutRangeError(idx){}
    string what() const {
        return "Index is less than lower bound";
    }
};
 
class UpBoundError : public OutRangeError {
public:
    UpBoundError(int idx) : OutRangeError(idx){}
    string what() const {
        return "Index is less than upper bound";
    }
};
 
int main() {
    int arr[] = {1, 2, 10, 4, 5, 6, 7, 9, 10};
    cout << "Gimme index: ";
    int idx;
    cin >> idx;
    try {
        if (idx < 0)
            throw LowBoundError(idx);
        else if (idx >= sizeof(arr) / sizeof(int))
            throw  UpBoundError(idx);
        cout << "You number is " << arr[idx] << endl;
    } catch (const OutRangeError &err) {
       cerr << err.what() << "; index = " << err.getIndex() << endl;
       return 1;
    }
 
    return 0;
}
Как-то так.
Yandex
Объявления
16.02.2014, 09:34     Напишите программу, которая контролирует индексы, выходящие за пределы массива и генерирует исключения.
Ответ Создать тему
Опции темы

Текущее время: 04:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru