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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
voidkor
0 / 0 / 0
Регистрация: 20.09.2012
Сообщений: 6
#1

Работа с матрицами. Ошибочка - C++

20.09.2012, 20:53. Просмотров 339. Ответов 4
Метки нет (Все метки)

class matrix{
private: double **Matrix;
int Rows, Cells;
public: matrix(int N, int M): Rows(N), Cells(M){}
friend ostream& operator<< (ostream& stream, matrix& obj);
friend istream& operator>> (istream& stream, matrix& obj);
void input();
~matrix(){}
};

void matrix::input(){
cin.width(5);
cout.width(5);
double tmp;
for (int i = 0; i < Rows; i++){
for (int j = 0; j < Cells; j++){
cin >> Matrix[i][j];
cout << " ";
}
cout << endl;
}
}

Функция input должна заполнять ячейки матрицы. Ввод с клавиатуры. При запуске и попытке ввода, выдает ошибку доступа. Менял уровень доступа к матрице на публичный, не помогает.

Необработанное исключение по адресу 0x00944CCF в ConsoleApplication1.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x00000000.

P.S. Не вставил сюда остальные методы и куски программы потому что они работают и не нужны для решения проблемы. Ошибка конкретно в строке: cin >> Matrix[i][j];
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.09.2012, 20:53     Работа с матрицами. Ошибочка
Посмотрите здесь:

Работа с текстовой информацией, одномерными массивами и матрицами. C++
работа с матрицами в файлах C++
Работа с файлами и матрицами C++
C++ Работа с матрицами - завал(с++)
C++ Матрицы. Работа с матрицами
Работа с матрицами: умножение, сумма элементов C++
Работа с матрицами (нужно упростить функцию main) C++
C++ Работа с квадратными матрицами
C++ Работа с матрицами
C++ Работа с матрицами
C++ Работа с двухмерными матрицами
Двумерные массивы(работа с матрицами) C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
1427 / 764 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
20.09.2012, 21:02     Работа с матрицами. Ошибочка #2
Покажите конструктор или лутче весь класс в зборе.
voidkor
0 / 0 / 0
Регистрация: 20.09.2012
Сообщений: 6
20.09.2012, 21:17  [ТС]     Работа с матрицами. Ошибочка #3
#include "stdafx.h"
#include <iostream>

using namespace std;

class matrix{
private: double **Matrix;
int Rows, Cells;
public: matrix(int N, int M): Rows(N), Cells(M){}
friend ostream& operator<< (ostream& stream, matrix& obj);
friend istream& operator>> (istream& stream, matrix& obj);
void input();
~matrix(){}
};

istream& operator>> (istream& stream, matrix& obj){
for (int i = 0; i < obj.Rows; i++){
*obj.Matrix = new double[i];
for (int j = 0; j < obj.Cells; j++){
obj.Matrix[i] = new double[j];
stream >> obj.Matrix[i][j];
cout << " ";
}
cout << endl;
}
return stream;
}

ostream& operator<< (ostream& stream, matrix& obj){
stream.width(5);
for (int i = 0; i < obj.Rows; i++){
for (int j = 0; j < obj.Cells; j++){
stream << obj.Matrix[i][j] << " ";
}
stream << endl;
}
return stream;
}

int main()
{
int N,M;
cout << "Pls, enter size first matrix (NxM): " << endl << "N: ";
cin >> N;
cout << "M: ";
cin >> M;
matrix first(N,M);
cin >> first;
return 0;
}

P.S. again: Я дурак))) Весь код нужен чтобы ошибку найти, в перегрузке походу накосячил)
DiffEreD
1427 / 764 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
20.09.2012, 22:01     Работа с матрицами. Ошибочка #4
Что увидел, то исправил. Протестируйте сами. Вот
код
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
class matrix
{ 
    double **Matrix;
    int Rows, Cells;
public:
    matrix(int N, int M);
    //matrix(int N, int M): Rows(N), Cells(M) {}
    friend ostream& operator<< (ostream& stream, const matrix& obj);
    friend istream& operator>> (istream& stream, matrix& obj);
    //void input();
    ~matrix();
};
 
matrix::matrix(int N, int M): Rows(N), Cells(M)
{
    Matrix = new double* [N];
        for (int i = 0; i < N; i++)
            Matrix[i] = new double [M];
};
 
istream& operator>> (istream& stream, matrix& obj){
    for (int i = 0; i<obj.Rows; i++)
        for (int j = 0; j<obj.Cells; j++)
        {
            cout<<"Matrix["<<i<<"]["<<j<<"]: ";
            stream >> obj.Matrix[i][j];
        }
        cout << endl;
    return stream;
}
 
ostream& operator<< (ostream& stream, const matrix& obj){
    for (int i = 0; i < obj.Rows; i++){
        for (int j = 0; j < obj.Cells; j++){
            stream << obj.Matrix[i][j] << " ";
        }
        stream << endl;
    }
    return stream;
}
 
matrix::~matrix()
{
    for (int i = 0; i< Rows; i++)
        delete [] Matrix[i];
    delete [] Matrix;
}
 
int main()
{
    int N,M;
    cout << "Pls, enter size first matrix (NxM): " << endl << "N: ";
    cin >> N;
    cout << "M: ";
    cin >> M;
    matrix first(N,M);
    cin >> first;
    cout << "Result:\n" << first << endl;
    system("pause");
    return 0;
}
voidkor
0 / 0 / 0
Регистрация: 20.09.2012
Сообщений: 6
20.09.2012, 23:33  [ТС]     Работа с матрицами. Ошибочка #5
Спасибо большое за помощь)
Разобрался почти во всем, кроме того что сейчас ниже, а именно:
1) Перегрузка оператора >> не приносит должных результатов - с клавиатуры ничего ввести невозможно, программа сама вываливает числа.
2) Что значит оператор delete, я понимаю, но не понимаю смысла в этих квадратных скобках перед Matrix.
3) Как отформатировать потоковый вывод, к примеру, что бы вываливал на экран не: -6.25343e+0067, а нормальное число с точкой. И как отформатировать число знаков после запятой - мне больше двух не нужно.

Цитата Сообщение от yuron_477 Посмотреть сообщение
Что увидел, то исправил. Протестируйте сами. Вот
код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class 
 
istream& operator>> (istream& stream, matrix& obj){
    for (int i = 0; i<obj.Rows; i++)
        for (int j = 0; j<obj.Cells; j++)
        {
            cout<<"Matrix["<<i<<"]["<<j<<"]: ";
            stream >> obj.Matrix[i][j];
        }
        cout << endl;
    return stream;
}
 
matrix::~matrix()
{
    for (int i = 0; i< Rows; i++)
        delete [] Matrix[i];
    delete [] Matrix;
}
Yandex
Объявления
20.09.2012, 23:33     Работа с матрицами. Ошибочка
Ответ Создать тему
Опции темы

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