Важная информация
Показано с 1 по 4 из 4

Тема: Нужна помощь. Программа сложения динамических матриц на с++.

  1. #1 Нужна помощь. Программа сложения динамических матриц на с++. 
    Новичок
    Регистрация
    14.11.2018
    Сообщений
    2
    Сказал(а) спасибо
    2
    Поблагодарили 0 раз(а) в 0 сообщениях
    Не получается найти ошибку. Программа пропускает ввод матриц после ввода кол-ва строк и колонок. Что делать?
    Не судите строго. Совсем недавно начал учить С++.


    Код :
    #include "pch.h"
    #include <iostream>
    using namespace std;
     
    class matrix
    {
    	double **a;
    	int n, m;
    public:
    	matrix() 
    	{
    		a = new double*[n];
    		for (int i = 0; i < n; i++)
    		{
    			a[i] = new double[m];
    		}
    	}
     
    	void vvod()// Ввод строк и колонок
    	{
    		cout << "Введите количество строк: " << endl;
    		cin >> n;
    		cout << endl;
    		cout << "Введите количество колонок: " << endl;
    		cin >> m;
    		cout << endl;
    	}
     
    	void mvvod()// Ввод матриц
    	{
    		for (int i = 0; i < n; i++)
    		{
    			for (int j = 0; j < m; j++)
    			{
    				cin >> a[i][j];
    			}
    		}
    		cout << endl;
    	}
     
    	matrix operator + (matrix x) // прегрузка для сложения
    	{
    		matrix c; // для удержания элемента
    		for (int i = 0; i < n; i++)
    		{
    			for (int j = 0; j < m; j++)
    			{
    				c.a[i][j] = 0;
    				c.a[i][j] += x.a[i][j];
    			}
    		}
    		return(c);
    	}
     
    	void conclusion()// Вывод ответа
    	{
    		for (int i = 0; i < n; i++)
    		{
    			for (int j = 0; j < m; j++)
    			{
    				cout << " " << a[i][j] << " ";
    			}
    		}
    		cout << endl;
    	}
     
    	~matrix()
    	{
    		for (int i = 0; i < n; i++)
    			delete[]a[i];
    		delete[]a;
    	}
     
    };
    	int main()
    	{
    		setlocale(LC_ALL, "Russian");
    		matrix a1, a2, a, b, c;
    		a1.vvod();									// Ввод строк и колонок											
    		cout << "Введите матрицу а: " << endl;
    		a.mvvod();	// Вводит матрицу а
    		cout << endl;
     
    		a2.vvod();									// Ввод строк и колонок
    		cout << "Введите матрицу b: " << endl;
    		b.mvvod();	// Вводит матрицу б
    		c = a + b;
     
    		c.conclusion();								// Вывод ответа
    	}
    Последний раз редактировалось Тимур Чикишев; 23.11.2018 в 04:21.
    Ответить с цитированием  
     

  2. #2  
    Профи Аватар для rrrFer
    Регистрация
    01.08.2013
    Сообщений
    561
    Сказал(а) спасибо
    34
    Поблагодарили 249 раз(а) в 164 сообщениях
    C++ Code:
    1. a1.vvod();
    2. cout << "Введите матрицу а: " << endl;
    3. a.mvvod(); // Вводит матрицу а
    4. cout << endl;


    Размеры матриц (n и m) были считаны для объекта a1. Ввод матрицы (циклы, использующие n и m) - для объекта a.
    a1 и a - разные объекты. В одном эти n и m хранят то, что вы ввели, а в другом (который вы используете дальше) - хранят мусор.
    [Ссылки могут видеть только зарегистрированные пользователи. ] // программирование на Prolog, Erlang, C++
    Ответить с цитированием  
     

  3. 3 пользователя(ей) сказали cпасибо:

    >Quiet Snow< (14.11.2018), Free Admin (14.11.2018), Тимур Чикишев (14.11.2018)

  4. #3  
    Новичок
    Регистрация
    14.11.2018
    Сообщений
    2
    Сказал(а) спасибо
    2
    Поблагодарили 0 раз(а) в 0 сообщениях
    Я всё никак не могу понять как правильно работать с динамической памятью. Помогите пожалуйста сделать!
    Код :
    #include "pch.h"
    #include <iostream>
     
    using namespace std;
     
    class matrix
    {
    	protected:
    	double **a;
    	int n, m;
    	unsigned int rows; unsigned int cols;
     
    	public:
    	matrix() { int c, g; };
    	matrix(unsigned int rows, unsigned int cols);
    	void set();
    	void print();
    	matrix operator + (const matrix x);
    	~matrix();
    };
     
    matrix::matrix(unsigned int rows, unsigned int cols)
    {
    	n = rows; m = cols;
    	a = new double*[n];
    	for (int i = 0; i < n; i++)
    		a[i] = new double[m];
    }
    matrix::~matrix() {};
     
     
    void matrix::set() // Заполение 
    {
    	for (int i = 0; i < n; i++)
    	{
    		for (int j = 0; j < m; j++)
    		{
    			cin >> a[i][j];
    		}
    	}
    	cout << endl;
    }
     
    void matrix::print() // Вывод 
    {
    	for (int i = 0; i < n; i++)
    	{
    		for (int j = 0; j < m; j++)
    		{
    			cout << " " << a[i][j] << " ";
    		}
    		cout << endl;
    	}
    }
     
    matrix matrix::operator + (const matrix x)
    {
    	matrix c(*this);
    	for (int i = 0; i < n; i++)
    	{
    		for (int j = 0; j < m; j++)
    		{
    			c.a[i][j] = x.a[i][j] + a[i][j];
    		}
    	}
    	return c;
    }
     
     
     
    int main()
    {
    	setlocale(LC_ALL, "Russian");
     
    	matrix a1(3, 3), a2(3, 3), c;
    	cout << "<ДЛЯ БИНАРНОЙ СУММЫ> " << endl;
    	cout << "Введите матрицу а: " << endl;
    	a1.set();
    	cout << "Введите матрицу b: " << endl;
    	a2.set();
    	cout << endl;
     
    	c = a1 + a2;
     
    	cout << "Сумма(бинарная): " << endl;
    	c.print();
    	cout << endl;
     
     
    	system("Pause");
    	return 0;
    }
    Ответить с цитированием  
     

  5. #4  
    Профи Аватар для rrrFer
    Регистрация
    01.08.2013
    Сообщений
    561
    Сказал(а) спасибо
    34
    Поблагодарили 249 раз(а) в 164 сообщениях
    Чуть поправил:
    C++ Code:
    1. #include <iostream>
    2. #include <fstream>
    3. using namespace std;
    4.  
    5. class matrix {
    6. protected:
    7.   double **a;
    8.   size_t n, m;
    9.  
    10. public:
    11.   matrix() : a(nullptr), n(0), m(0) { };
    12.   
    13.   void allocate(size_t rows, size_t cols);
    14.   void read(std::istream &ifst);
    15.   void write(std:<img src="http://iforum.pro/images/smilies/redface.png" border="0" alt="" title="Embarrassment" class="inlineimg" />stream &ofst);
    16.   
    17.   void check_allocated() const {
    18.     if (a == nullptr)
    19.       throw std::runtime_error("memory not allocated");
    20.   }
    21.   
    22.   size_t rows() const {
    23.     check_allocated();
    24.     return n;
    25.   }
    26.   
    27.   size_t cols() const {
    28.     check_allocated();
    29.     return m;
    30.   }
    31.   
    32.   void clear() {
    33.     for (size_t i = 0; i < n; i++)
    34.       delete[] a[i];
    35.     delete[] a;
    36.   }
    37.   
    38.   matrix operator +(const matrix& rhs);
    39.   ~matrix();
    40. };
    41.  
    42. matrix::~matrix() {
    43.   if (a == nullptr)
    44.     return;
    45.     
    46.   clear();
    47. };
    48.  
    49. void matrix::allocate(size_t rows, size_t cols) {
    50.   if (nullptr != a) {
    51.     clear();
    52.   }
    53.   
    54.   n = rows; m = cols;
    55.   a = new double*[n];
    56.   for (int i = 0; i < n; i++)
    57.     a[i] = new double[m];
    58. }
    59.  
    60. void matrix::read(std::istream &ifst) {
    61.   check_allocated();
    62.   for (int i = 0; i < n; i++) {
    63.     for (int j = 0; j < m; j++) {
    64.       ifst >> a[i][j];
    65.     }
    66.   }
    67. }
    68.  
    69. void matrix::write(std:<img src="http://iforum.pro/images/smilies/redface.png" border="0" alt="" title="Embarrassment" class="inlineimg" />stream &ofst) {
    70.   check_allocated();
    71.   for (int i = 0; i < n; i++) {
    72.     for (int j = 0; j < m; j++) {
    73.       ofst << " " << a[i][j] << " ";
    74.     }
    75.     ofst << endl;
    76.   }
    77. }
    78.  
    79. matrix matrix:<img src="http://iforum.pro/images/smilies/redface.png" border="0" alt="" title="Embarrassment" class="inlineimg" />perator +(const matrix& rhs) {
    80.   check_allocated();
    81.   rhs.check_allocated();
    82.   
    83.   if (n != rhs.rows() || m != rhs.cols())
    84.     throw std::runtime_error("matricies size must be equal");
    85.     
    86.   matrix c;
    87.   c.allocate(n, m);
    88.   
    89.   // тут считать сумму
    90.   
    91.   return c;
    92. }
    93.  
    94.  
    95.  
    96. int main()
    97. {
    98.   setlocale(LC_ALL, "Russian");
    99.  
    100.   matrix a1, a2, c;
    101.   a1.allocate(3, 3);
    102.   a2.allocate(3, 3);
    103.   
    104.   cout << "<ДЛЯ БИНАРНОЙ СУММЫ> " << endl;
    105.   cout << "Введите матрицу а: " << endl;
    106.   a1.read(std::cin);
    107.   cout << "Введите матрицу b: " << endl;
    108.   a2.read(std::cin);
    109.   cout << endl;
    110.  
    111.   c = a1 + a2;
    112.  
    113.   cout << "Сумма(бинарная): " << endl;
    114.   c.write(std::cout);
    115.   cout << endl;
    116.  
    117.   system("Pause");
    118. }


    Все, что касалось памяти теперь вроде бы работает.
    [Ссылки могут видеть только зарегистрированные пользователи. ] // программирование на Prolog, Erlang, C++
    Ответить с цитированием  
     

  6. 3 пользователя(ей) сказали cпасибо:

    >Quiet Snow< (23.11.2018), Free Admin (23.11.2018), Тимур Чикишев (23.11.2018)

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Нужна программа автокликер
    от Serp-01 в разделе Фриланс
    Ответов: 3
    Последнее сообщение: 14.11.2018, 20:03
  2. Нужна программа или скрипт, срочно!
    от Russel в разделе Фриланс
    Ответов: 0
    Последнее сообщение: 04.04.2018, 23:14
  3. Нужна программа
    от Роман1977 в разделе Фриланс
    Ответов: 0
    Последнее сообщение: 07.08.2016, 13:45
  4. Нужна программа с захватом видео.
    от Марина Викторовна в разделе Фриланс
    Ответов: 6
    Последнее сообщение: 24.07.2014, 21:28
  5. нужна программа для Mac OS
    от klimova в разделе Софт
    Ответов: 0
    Последнее сообщение: 21.05.2013, 18:35
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •