Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/117: Рейтинг темы: голосов - 117, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 16.05.2011
Сообщений: 23
1

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

16.05.2011, 01:02. Показов 22721. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброе время суток!
с днём Математиков ВАС, коллеги)

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

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

Не могли бы помочь?
Вложения
Тип файла: txt Programma.txt (3.4 Кб, 386 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.05.2011, 01:02
Ответы с готовыми решениями:

Умножение двух матриц
Помогите пожалуйста

Умножение двух матриц
Посмотрите, рабоает ли программа, которая должна умножить две матрицы. Буду очень благодарен за...

Умножение двух матриц
Помогите написать перемножение двух матриц без создание третьей матрицы. Что-то написал, но не то...

Умножение двух матриц 1000х1000
Ребят помогите пожалуйста. Надо умножить две матрицы 1000*1000. Обьявил их как int а мне пишет что...

10
0 / 0 / 0
Регистрация: 16.05.2011
Сообщений: 23
17.05.2011, 21:23  [ТС] 2
Ребята, помогите уж пожалуйста! Кто как сможет!!!! Срок поджимают!
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
18.05.2011, 00:41 3
1/ Текст надо выкладывать непосредственно.
2. Умножение матриц при помощи стека - вызывает БОЛЬШИЕ сомнения... Хотя бы в учебнике читал про умножение матриц?
0
152 / 150 / 44
Регистрация: 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;
    }
0
0 / 0 / 0
Регистрация: 16.05.2011
Сообщений: 23
18.05.2011, 17:34  [ТС] 5
задание так и звучит: реализовать умножение матриц при помощи стека, тк матрицу можно представить как вектор.
При помощи массивов я его уже делал!
проблема возникает при реализации с помощью стека.
Первый получившийся элемент правильный. Но когда я засовываю эту подпрограмму (для вычисления одного элемент) в цикл, чтобы вычислить все элементы, то у меня возникают проблемы!
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
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);
}
Аналогично заполняешь матрицу В. А умножение - не отличается.
0
0 / 0 / 0
Регистрация: 16.05.2011
Сообщений: 23
18.05.2011, 18:12  [ТС] 7
немного не до понимание вышло.
пусть заданы 2 матрицы размерности NxM1 и M1xM.
Далее мы создаём стэк длиною (NxM1+M1xM). Далее ставим один указатель на начало 1-ой матрицы, а 2 указатель на начало 2-ой матрицы. => производим умножение матриц.

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

массив не использовать.
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
18.05.2011, 18:27 8
Похоже, что ты не знаешь, что такое стек.
Стек - это динамическая структура данных, в которой доступ только к вершине. Какие указатели?!
Только операции push() - положить в стек, и pop() - удалить из стека.
0
0 / 0 / 0
Регистрация: 16.05.2011
Сообщений: 23
18.05.2011, 19:02  [ТС] 9
стэк-это набор элементов, в котором каждый элемент имеет ссылку на следующий после него элемент+ первым пришёл, последним ушёл. Нам так объясняли!
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
18.05.2011, 20:19 10
Ссылки на элементы не из этой оперы - это связные списки. Стек - структура данных без произвольного доступа, подчиняющаяся принципу LIFO - последним пришёл - первым ушёл. Как он будет реализован, в виде списка, массива или ещё как - это уже зависит от желания разработчика.
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
18.05.2011, 20:47 11
Цитата Сообщение от machines Посмотреть сообщение
стэк-это набор элементов, в котором каждый элемент имеет ссылку на следующий после него элемент+ первым пришёл, последним ушёл. Нам так объясняли!
То, что ты написал - это СПИСОК. Список может быть использован для РЕАЛИЗАЦИИ стека.
Либо ты не понял, либо препод несет пургу...
0
18.05.2011, 20:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.05.2011, 20:47
Помогаю со студенческими работами здесь

Исправить ошибку (умножение двух матриц)
#include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; void main() {...

Написать программу, которая выполняет умножение двух матриц
Написать программу, которая выполняет умножение двух матриц (матрицы не квадратные).

Умножение двух матриц, ответ записывается в третью матрицу
Реализовать алгоритм умножения двух матриц, заданных пользователем. Результат умножения...

Умножение треугольных матриц«Методы обработки разреженных матриц»
Нужно перемножить треугольные матрицы в обычном виде и в свёрнутом. С обычным проблем нет. Доступ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru