С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

реализация класса "симметричная матрица целых чисел"... - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ решить уравнение в зависимости от введенного Х (if else) http://www.cyberforum.ru/cpp-beginners/thread253483.html
требуется помощь в решении задачи. дано три уравнения и в зависимости от введенного Х нужно решить определенное уравнение. но программа работает не так как надо, все время выводит результат из...
C++ Структурированные файлы Как сделать,чтобы во всех полях которые у меня объявлены как int в самих функциях при вводе букв она у меня обратно возвращала в меню и программа не подвисала,и я мог заново один из пунктов меню.... http://www.cyberforum.ru/cpp-beginners/thread253476.html
C++ Динамика
При вводе студента появляется одновременно фамилия и число. Как сделать так чтобы поэтапно появлялось ? #include <iostream> #include <conio.h> #include <string.h> #include <stdio.h> #include...
Строка C++
Есть набор слов и любая текстовая строка. Нужно взять из текстовой строки слова, входящие в данный набор и вывести на экран, применяя strtok, strcmp. На 15 и 20 строчке как сделать? #include...
C++ Обработка массивов http://www.cyberforum.ru/cpp-beginners/thread253465.html
Всем доброго времени суток. Помогите, пожалуйста, с задачей. Задан целочисленный массив X из 20 элементов, среди которых есть повторяющиеся. Записать в массив Y по одному элементу их каждой группы...
C++ Содержит ли последовательность хотя бы два соседних числа с одинаковыми знаками? Вводится последовательность ненулевых чисел, 0 — конец последовательности. Определить содержит ли последовательность хотя бы два соседних числа с одинаковыми знаками.Произведение двух чисел с... подробнее

Показать сообщение отдельно
gudzon
0 / 0 / 0
Регистрация: 07.03.2011
Сообщений: 7

реализация класса "симметричная матрица целых чисел"... - C++

07.03.2011, 18:51. Просмотров 941. Ответов 4
Метки (Все метки)

Условие вообще такое:

[I]Определите пользовательский тип “симметричная матрица целых чисел” для обработки квадратных матриц, в которых A[i][j] == A[j] для всех допустимых элементов матрицы. Хранить в объекте только верхний треугольник матрицы. Класс должен содержать:
• конструкторы и деструктор;
• конструктор копирования;
• “get” и “set” методы для элементов матрицы;
• “get” метод для размера матрицы;
• операторы сложения и умножения матриц;
• оператор присваивания;
• оператор сравнения ==;
• оператор << для вывода матрицы в указанный поток в обычном виде,
• оператор >> для извлечения матрицы из потока


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

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
//matrix.cpp
#include "Matrix.h"
smat::smat(int N, int x){
    n = N;
    int **mat = new int *[N];
    for (int i = 0; i < N; i++){
        mat[i] = new int [N];
        for (int j = 0; j < N; j++)
            mat[i][j] = x;
    }
}
smat::~smat(){
    for (int i = 0; i < n; i++)
        delete mat[i];
    delete [] mat;
}
int smat::get_element(int str, int stb) const{
    if (str < 0 || str > n || stb < 0 || stb > n) throw smat::BadMatrix();
    return mat[str][stb];
}
void smat::set_element(int str, int stb, int x){
    if (str < 0 || str > n || stb < 0 || stb > n) throw smat::BadMatrix();
    mat[str][stb] = x;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//matrix.h
#pragma once
#include <iostream>
using namespace std;
class smat{
    int n, **mat; //n - размер матрицы
public:
    class BadMatrix {};
    smat(int N = 5, int x = 0);
    smat(const smat &M);
    ~smat();
    int get_element(int str, int stb) const;
    void set_element(int str, int stb, int x);
    int get_size() const;
    smat operator + (const smat& M) const;
    smat operator * (const smat& M) const;
    smat& operator = (const smat& M);
    bool operator == (const smat& M) const;
    friend ostream& operator << (ostream& out, const smat& M);
    friend istream& operator >> (istream& in, smat& M);
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
//main.cpp
#include "Matrix.h"
int main(){
    setlocale(LC_ALL, "Rus");
    try{
        smat a;
    }
    catch(...){
        cout << "Ошибка!!\n";
    }
    system("PAUSE");
}
Помогите разобраться по какой причине появляется ошибка доступа к памяти при прохождении деструктора...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.