Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2017, 12:26   #1
Sabiks
 
Регистрация: 07.11.2017
Сообщений: 4
Вопрос Перемножение произвольных матриц (Visual studio 2013 c++). Нужна помощь

Здравствуйте!
Хотел написать программу, которая перемножала бы матрицы произвольных размеров, не получилось
Вот, собственно, сам код:

Код:
#include <iostream>
#include <iomanip>

using namespace std;

int mult(int**matrix1,int x,int y,int**matrix2,int x1,int y1,int**matrix3,int x2, int y2)
{
	for (int i = 0; i < x; i++)
	{
		for (int j = 0; j < y1; j++)
		{
			int k = x-1;
			matrix3[i][j] = (matrix1[i][1])*(matrix2[1][j]);
			while (k > 0)
			{
				matrix3[i][j] += (matrix1[i][j + 1])*(matrix2[i + 1][j]);
				k -= 1;
			}
		}
	}
	for (int i = 0; i < x; i++)
	{
		cout << endl;
		for (int j = 0; j < y1; j++) cout << setw(3) << matrix3[i][j] << " ";
	}
	return 0;
}

int main()
{
	setlocale(LC_ALL, "rus");
	int x, y,x1,y1,x2,y2;

	cout << "Введите количество строк и столбцов первой матрицы через пробел" << endl;
	cin >> x >> y;

	int **matrix1 = new int*[x];
	for (int i = 0; i < x; i++) matrix1[i] = new int[y];
	for (int i = 0; i < x; i++)
	{
		for (int j = 0; j < y; j++)
		{
			cout << "Введите значение элемента " << i + 1 << "." << j + 1 << " первой матрицы" << endl;
			cin >> matrix1[i][j];
		}
	}




	cout << "Введите количество строк и столбцов второй матрицы через пробел" << endl;
	cin >> x1 >> y1;
	int **matrix2 = new int*[x1];
	for (int i = 0; i < x1; i++) matrix2[i] = new int[y1];
	for (int i = 0; i < x1; i++)
	{
		for (int j = 0; j < y1; j++)
		{
			cout << "Введите значение элемента " << i+1 <<"."<< j+1 <<" второй матрицы"<< endl;
			cin >> matrix2[i][j];
		}
	}


	x2 = x;
	y2 = y1;
	int **matrix3 = new int*[x2];
	for (int i = 0; i < x2; i++) matrix3[i] = new int[y2];


	if (x = y1)
	{
		mult(matrix1,x,y,matrix2,x1,y1,matrix3,x2,y2);
	}
	else
	{
		cout << "Данные матрицы перемножить нельзя" << endl;
	}
	for (int i = 0; i < x; i++) delete matrix1[i];
	delete[] matrix1;
	for (int i = 0; i < x1; i++) delete matrix2[i];
	delete[] matrix2;
	for (int i = 0; i < x2; i++) delete matrix3[i];
	delete[] matrix3;
	system("pause");
	return 0;
}

Как только дело доходит до исполнения функции выводится ошибка:
Необработанное исключение по адресу 0x00B35DD7 в Умножение матриц.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFDFDFDFD.
Я подозреваю что как-то не очень правильно описал параметры функции. Что я сделал не правильно?
Sabiks вне форума Ответить с цитированием
Старый 07.11.2017, 12:37   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

1. матрицы произвольных размеров умножать нельзя математически
2. = - присвоение, == - сравнение. Исправьте иф.
3. вы в функции бегает с ограничениями правильными только для половины одной или другой матрицы.
p51x вне форума Ответить с цитированием
Старый 07.11.2017, 15:50   #3
Sabiks
 
Регистрация: 07.11.2017
Сообщений: 4
Хорошо

Спасибо! Всё исправил, теперь умножает корректно и без программных ошибок.
Sabiks вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Visual studio 2013 MarineKing Фриланс 0 28.05.2015 16:26
Помощь в написании программы в Visual Studio 2013 (не за спасибо!) alfparcour Фриланс 8 17.02.2015 21:27
C++ visual studio 2013 mystafa23 Общие вопросы C/C++ 3 20.10.2014 07:16
Интерфейс приложений в стиле Office 2013, Visual Studio 2012/2013, Adobe CC nnmserg WPF, UWP, WinRT, XAML 2 12.09.2014 12:41
Нужна помощь! Проблема с visual studio STill_ace Visual C++ 2 25.07.2009 21:44