Member 13155738 Ответов: 3

Я получаю мусорное значение в дополнение к двум матричным объектам.


#include<iostream.h>
#include<conio.h>
class matrix
{
	public:
	int a[3][3];
	void getdata()
	{
		for(int i=1;i<=3;i++)
		{
			for(int j=1;j<=3;j++)
			{
				cout<<"Enter numbers for ["<<i<<"]["<<j<<"]";
				cin>>a[i][j];
			}
		}
	}
	void putdata()
	{
		for(int i=1;i<=3;i++)
		{
			for(int j=1;j<=3;j++)
			{
				cout<<a[i][j];
			}
		cout<<endl;
		}
	}
	friend void add(matrix,matrix);
};
void add(matrix m1,matrix m2)
{     //  matrix temp;
	int a,i,j;
	for(i=1;i<=3;i++)
	{      a[3][3]=0;
		for(j=1;j<=3;j++)
		{
		    //	temp.a[i][j]=x.a[i][j]+y.a[i][j];
			cout<<m1.a[i][j]+m2.a[i][j];
		}
		cout<<endl;
	}
    //   return temp;
}
int main()
{
	clrscr();
	matrix m1,m2,m3;
	m1.getdata();
	m2.getdata();
	add(m1,m2);
	m3.putdata();
	getch();
	return 0;
}


Что я уже пробовал:

я перепробовал все варианты и перепробовал в основном весь сайт для ответа.

3 Ответов

Рейтинг:
24

Jochen Arndt

С помощью C / C++ индексы массива основаны на нуле. У вас есть массив a[3][3] Таким образом, допустимые индексы находятся в диапазоне от 0 до 2.

Измените все ваши циклы, чтобы использовать эти индексы:

for (int i = 0; i < 3; i++)
{
    for (int j = 0; j < 3; j++)
    {
        /* ... */
    }
}


Рейтинг:
2

CPallini

В дополнение к Йохен совет, я думаю, что лучшей формулировкой матричного сложения было бы

matrix addMatrix(const matrix & m1, const matrix & m2)
{
  matrix r;
  for (int i=0; i<3; ++i)
   for(j=0; j<3; ++j)
    r.a[i][j] = m1.a[i][j] + m2.a[i][j];
  return r;
}


Другой вариант был бы + перегрузка оператора, см. перегрузка оператора - cppreference.com[^].


Рейтинг:
2

Patrice T

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.