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

Умножение двух матриц на С++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 117, средняя оценка - 4.74
machines
0 / 0 / 0
Регистрация: 16.05.2011
Сообщений: 23
16.05.2011, 01:02     Умножение двух матриц на С++ #1
Всем доброе время суток!
с днём Математиков ВАС, коллеги)

Мне надо реализовать умножение 2 матриц размерности NxM1, M1xN соответственно. (реализовать при помощи стека).

Программу я написал, но не могу найти причину, почему она у меня зацикливается?

Не могли бы помочь?
Вложения
Тип файла: txt Programma.txt (3.4 Кб, 353 просмотров)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
machines
0 / 0 / 0
Регистрация: 16.05.2011
Сообщений: 23
17.05.2011, 21:23  [ТС]     Умножение двух матриц на С++ #2
Ребята, помогите уж пожалуйста! Кто как сможет!!!! Срок поджимают!
ValeryLaptev
Эксперт C++
1004 / 783 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
18.05.2011, 00:41     Умножение двух матриц на С++ #3
1/ Текст надо выкладывать непосредственно.
2. Умножение матриц при помощи стека - вызывает БОЛЬШИЕ сомнения... Хотя бы в учебнике читал про умножение матриц?
dampir_sanek
149 / 147 / 21
Регистрация: 09.02.2010
Сообщений: 407
18.05.2011, 07:42     Умножение двух матриц на С++ #4
machines,

C
1
2
3
4
5
6
7
8
9
10
11
12
13
// инициализация матрицы
for (int i = 0; i < N; ++i) 
   for (int j = 0; j < N; ++j){
    A[i][j] = 0.0f;
    B[i][j] = 1.0f;         
    }
// перемножение матриц
for (i = 0; i < N; ++i) for (j = 0; j < N; ++j) {
    sum = 0; 
    for (k = 0; k < N; ++k)         
    sum += A[i][k] * B[k][j];       
    C[i][j] = sum;
    }
machines
0 / 0 / 0
Регистрация: 16.05.2011
Сообщений: 23
18.05.2011, 17:34  [ТС]     Умножение двух матриц на С++ #5
задание так и звучит: реализовать умножение матриц при помощи стека, тк матрицу можно представить как вектор.
При помощи массивов я его уже делал!
проблема возникает при реализации с помощью стека.
Первый получившийся элемент правильный. Но когда я засовываю эту подпрограмму (для вычисления одного элемент) в цикл, чтобы вычислить все элементы, то у меня возникают проблемы!
ValeryLaptev
Эксперт C++
1004 / 783 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
18.05.2011, 17:54     Умножение двух матриц на С++ #6
При помощи вектора - это совсем другое дело!
Я так понял, что матрицу надо объявить с помощью векторов.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// -- объявление типов --
typedef vector<float> row;
typedef vector<row> matrix;
matrix A,B,C;
// инициализация матриц
row Row(M);
for (int i = 0; i < N; ++i) 
{  
   for (int j = 0; j < M; ++j)
   {
        Row[j] = rand()%100;
   }
   A.push_back(Row);
}
Аналогично заполняешь матрицу В. А умножение - не отличается.
machines
0 / 0 / 0
Регистрация: 16.05.2011
Сообщений: 23
18.05.2011, 18:12  [ТС]     Умножение двух матриц на С++ #7
немного не до понимание вышло.
пусть заданы 2 матрицы размерности NxM1 и M1xM.
Далее мы создаём стэк длиною (NxM1+M1xM). Далее ставим один указатель на начало 1-ой матрицы, а 2 указатель на начало 2-ой матрицы. => производим умножение матриц.

всё правильно, стэк!

массив не использовать.
ValeryLaptev
Эксперт C++
1004 / 783 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
18.05.2011, 18:27     Умножение двух матриц на С++ #8
Похоже, что ты не знаешь, что такое стек.
Стек - это динамическая структура данных, в которой доступ только к вершине. Какие указатели?!
Только операции push() - положить в стек, и pop() - удалить из стека.
machines
0 / 0 / 0
Регистрация: 16.05.2011
Сообщений: 23
18.05.2011, 19:02  [ТС]     Умножение двух матриц на С++ #9
стэк-это набор элементов, в котором каждый элемент имеет ссылку на следующий после него элемент+ первым пришёл, последним ушёл. Нам так объясняли!
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
18.05.2011, 20:19     Умножение двух матриц на С++ #10
Ссылки на элементы не из этой оперы - это связные списки. Стек - структура данных без произвольного доступа, подчиняющаяся принципу LIFO - последним пришёл - первым ушёл. Как он будет реализован, в виде списка, массива или ещё как - это уже зависит от желания разработчика.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2011, 20:47     Умножение двух матриц на С++
Еще ссылки по теме:

Умножение двух матриц C++
C++ Умножение двух матриц
Вычисление степени матрицы, вычисления произведения двух матриц, вычисление суммы двух матриц C++

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

Или воспользуйтесь поиском по форуму:
ValeryLaptev
Эксперт C++
1004 / 783 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
18.05.2011, 20:47     Умножение двух матриц на С++ #11
Цитата Сообщение от machines Посмотреть сообщение
стэк-это набор элементов, в котором каждый элемент имеет ссылку на следующий после него элемент+ первым пришёл, последним ушёл. Нам так объясняли!
То, что ты написал - это СПИСОК. Список может быть использован для РЕАЛИЗАЦИИ стека.
Либо ты не понял, либо препод несет пургу...
Yandex
Объявления
18.05.2011, 20:47     Умножение двух матриц на С++
Ответ Создать тему
Опции темы

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