Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 1
Регистрация: 18.12.2011
Сообщений: 48

ошибка в программе.

08.03.2012, 20:15. Показов 980. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Во время работы появляется ошибка.

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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <iostream>
#include <conio.h>
 
using namespace std;
 
template <class T>
class MYArray {
    private:
        T** arr; // положительные числа
        int row, cd;
    public:
        MYArray(int,int);
        ~ MYArray(void);
        int get_row() const; 
        int get_col() const;
        int set_Element(int,int,T);
        T get_Element(int,int) const;
        void show() const;
};
 
template <class T> MYArray<T>::MYArray(int N, int M)  // описание конструктора класса
{
    if(N<0 || M<0)
    {
        cout << "Неправильные размеры матрицы!!!\n";
        exit(1);
    }
    row = N;
    cd = M;
    arr = new T*[row];
    for(int i=0; i<row; i++)
        arr[i] = new T[cd];
}
 
template <class T> MYArray<T>::~MYArray() { delete []arr; } // описание деструктора класса
 
template <class T> int MYArray<T>::get_row() const { return row; }
 
template <class T> int MYArray<T>::get_col() const { return cd; }
 
template <class T> int MYArray<T>::set_Element(int i,int j,T value)
{
    if(value >= 0 && i < row && j < cd)
    {
        arr[i][j] = value;
        return 1;
    }
    return 0;
}
 
template <class T> T MYArray<T>::get_Element(int i,int j) const
{
    if(i<row && i>=0 && j<cd && j>=0)
    {
        return arr[i][j];
    }
    cout << "Неправильные значения индексов матрицы\n";
    return 0;   
}
 
template <class T> void MYArray<T>::show() const 
{
    for(int i=0; i<row; i++)
    {
        for(int j=0; j<cd; j++)
        {
            cout << get_Element(i,j) << "   ";
        }
        cout << endl;
    }
}
 
float Srednee(MYArray<int> obj)
{
    int s=0;
    float sr;
    for (int i=0; i<obj.get_row(); i++)
        for (int j=0; j<obj.get_col(); j++)
            s += obj.get_Element(i,j);
    int n = obj.get_row();
    int k = obj.get_col();
    sr = s/(n*k);
    return sr;
}
 
void main(void)
{
    setlocale(LC_ALL,"Russian");
    int N, M;
    cout << "Введите количество строк\t";
    cin >> N;
    cout << "Введите количество столбцов\t";
    cin >> M;
    MYArray<int> obj(N,M);
    for (int i=0; i<obj.get_row(); i++)
        for (int j=0; j<obj.get_col(); j++) 
        {
            cout << "[" << i << "][" << j << "]=";
            cin >> N;
            int res = obj.set_Element(i,j,N);
            // дописать проверку вызова функции переустановки значения в матрице
        }
    cout << "Среднее = " << Srednee(obj) << endl;
    cout << "Содержание матрицы:\n";
    obj.show();
    _getch();
}
Ошибка появилась после добавления функции Srednee(obj), без нее все работает замечательно.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.03.2012, 20:15
Ответы с готовыми решениями:

Ошибка в программе
&quot;Существует назначенный этой команде Command открытый DataReader, который требуется предварительно закрыть.&quot;

Ошибка в программе
#include&lt;iostream.h&gt; void main () { int a=1, b=2, c; c=sum(a,b); cout&lt;&lt;c; } int sum (int x, int y) {return...

Ошибка в программе
Здравствуйте! Написал программу по расчету рекуррентного метода наименьших квадратов, но возникает вот такая ошибка: ??? Index exceeds...

11
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
08.03.2012, 21:00
Нет копирующего конструктора. И деструктор неправильно сделан.
1
0 / 0 / 1
Регистрация: 18.12.2011
Сообщений: 48
08.03.2012, 21:21  [ТС]
Цитата Сообщение от soon Посмотреть сообщение
Нет копирующего конструктора. И деструктор неправильно сделан.
извините...а можно подробнее
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
08.03.2012, 21:24
Цитата Сообщение от soon Посмотреть сообщение
Нет копирующего конструктора.
В функцию Srednee передается копия объекта => нужен копирующий конструктор. Либо передавать по ссылке.

Цитата Сообщение от soon Посмотреть сообщение
И деструктор неправильно сделан.
Память выделяли через цикл, освобождать, соответсвенно, тоже нужно для каждой строки.
1
0 / 0 / 1
Регистрация: 18.12.2011
Сообщений: 48
08.03.2012, 22:37  [ТС]
Цитата Сообщение от soon Посмотреть сообщение
Память выделяли через цикл, освобождать, соответсвенно, тоже нужно для каждой строки.
C++
1
2
3
4
5
template <class T> MYArray<T>::~MYArray() // описание деструктора класса
{
    for(int i=0; i<row; i++)
        delete []arr[i]; 
}
вот так?

и мне не совсем понятно как передать по ссылке объект в функцию...
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
08.03.2012, 23:31
Цитата Сообщение от dellink Посмотреть сообщение
вот так?
Нет, пямять-то не только под строки выделена

Цитата Сообщение от dellink Посмотреть сообщение
и мне не совсем понятно как передать по ссылке объект в функцию...
C++
1
void func(int& a)
Ну и конструктор на всякий случай напишу, сами выберете, что по душе. Но по ссылке лучше
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Foo
{
    int _a;
 
public:
    Foo(): _a(3)
    {
        std::cout << "default constructor" << std::endl;
    }
 
    Foo(const Foo& f): _a(f._a)
    {
        std::cout << "copy constructor" << std::endl;
    }
};
1
0 / 0 / 1
Регистрация: 18.12.2011
Сообщений: 48
09.03.2012, 12:55  [ТС]
Цитата Сообщение от soon Посмотреть сообщение
Нет, пямять-то не только под строки выделена
Как я понимаю нужно повторить цикл аналогичный тому, который был в конструкторе?

И еще можно вопросик. Нужно добавить функцию проверки установки значения элемента матрицы, если введено отрицательное цисло выводить сообщение и производить повторный ввод элемента (под это функия Set_Element возвращает 0). Как лучше всего это сделать? При помощи do while, while или есть что-то получше? Спасибо за помощь.
0
 Аватар для soon
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
09.03.2012, 13:10
Цитата Сообщение от dellink Посмотреть сообщение
Как я понимаю нужно повторить цикл аналогичный тому, который был в конструкторе?
Да

Цитата Сообщение от dellink Посмотреть сообщение
И еще можно вопросик. Нужно добавить функцию проверки установки значения элемента матрицы, если введено отрицательное цисло выводить сообщение и производить повторный ввод элемента (под это функия Set_Element возвращает 0). Как лучше всего это сделать? При помощи do while, while или есть что-то получше? Спасибо за помощь.
Можно кинуть исключение. Можно просто вывести в std::cerr предупреждение.
1
0 / 0 / 1
Регистрация: 18.12.2011
Сообщений: 48
09.03.2012, 13:20  [ТС]
C++
1
2
3
4
5
template <class T> MYArray<T>::~MYArray() // описание деструктора класса
{
    for(int i=0; i<row; i++)
        delete []arr[i]; 
}
Я не совсем понимаю почему так не правильно...мы же удаляем сразу массив строки и все столбцы в нем разве не удалятся автоматически?

Добавлено через 2 минуты
Цитата Сообщение от soon Посмотреть сообщение
Можно кинуть исключение. Можно просто вывести в std::cerr предупреждение.
Только если сделать исключения у меня не будет вызова повтора ввода.
Сделал так:
C++
1
2
3
4
5
6
7
8
9
10
11
cout << "[" << i << "][" << j << "]=";
            cin >> N;
            int res = obj.set_Element(i,j,N);
            // дописать проверку вызова функции переустановки значения в матрице
            while(res==0)
            {
                cout << "Вводимые данные неверны" << endl;
                cout << "[" << i << "][" << j << "]=";
                cin >> N;
                res = obj.set_Element(i,j,N);
            }
правда не нравится мне то, что пришлось повторять часть кода, но по другому не знаю как сделать.
По заданию было так:
C++
1
2
3
cin >> N;
            int res = obj.set_Element(i,j,N);
            // дописать проверку вызова функции переустановки значения в матрице
0
601 / 569 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
09.03.2012, 13:25
Цитата Сообщение от dellink Посмотреть сообщение
arr = new T*[row]; for(int i=0; i<row; i++) arr[i] = new T[cd];
удалять также, а вы удаляете только столбцы, строки кто будет удалять?
добавьте delete [] arr;
1
0 / 0 / 1
Регистрация: 18.12.2011
Сообщений: 48
09.03.2012, 13:32  [ТС]
Цитата Сообщение от panicwassano Посмотреть сообщение
удалять также, а вы удаляете только столбцы, строки кто будет удалять?
добавьте delete [] arr;
C++
1
2
3
4
5
6
template <class T> MYArray<T>::~MYArray() // описание деструктора класса
{
    for(int i=0; i<row; i++)
        delete []arr[i]; 
    delete [] arr;
}
вот так?
0
601 / 569 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
09.03.2012, 15:46
именно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.03.2012, 15:46
Помогаю со студенческими работами здесь

Ошибка в программе.
подскажите, что не так?

Ошибка в программе
Помогите найти ошибку в программе. Выдает Wrong answer 23 тест using System; class Program { static...

Ошибка в программе
Здравствуйте! Решал одну задачу. И возникла проблема при выводе результата в файл. Не могу понять, что не так, не могу понять почему не...

ошибка в программе
Недавно начал изучать С ++ написал программу но она выдает ошибку пожалуйста посмотрите что я написал не правильно: / вычислить корень...

Ошибка в программе
В запущенной программе ввожу, к примеру, 2 теста и 3 вопроса. Она выводит два теста и в каждом весь список вопросов. как это можно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru