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

Разреженные матрицы - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.87
Navigator45
0 / 0 / 0
Регистрация: 28.03.2011
Сообщений: 11
25.04.2011, 22:40     Разреженные матрицы #1
Добрый день, уважаемые пользователи.

Задание по "Разреженным матрицам" через динамический список.
Собственно сам список:

C++
1
2
3
4
struct Spisok {
     int data,n,m;  // конкретные строка и столбец, в которой храниться данное число data
     Spisok* next;
};
Сложение матриц:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Matrix Matrix::operator+(Matrix M1)const {
Matrix result;
int k;
Spisok *cur, *work, *next=result.sp->next, *first=result.sp;
if ((*this).Size(M1)){                                //Проверка на совпадение размеров матриц для сложения
 for (int i=0;i<n;i++)
  for (int j=0;j<m;j++){
   int x=0;
   x=(*this).GetData(i,j)+M1.GetData(i,j);      // GetData функция, которая возвращает значение i-й строки j-го столбца матрицы
               if (x!=0){              // Записываем только НЕ нулевые элементы, т.к. матрица разреженная
           if(k==0){           //фиксируем первый элемент
             first->data=x;
             first->m=j;
             first->n=i;
                 next=NULL;
             cur=first;
             k++;}
           else
                   {work=new Spisok;       //сохраняем целостность указателя на первый элемент
             work->data=x;          // Цепляем последующие функцией Insert(что цепляем, куда) 
             work->m=j;             
             work->n=i;
                    Insert (work, cur);
                    cur=work;}}}
}
 else return 0;
return result;
}
Проблема: не работает, после вывода результата функцией Print выдаёт билеберду

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void main(){
 Matrix M(2,2), M1(2,2), K(1,2), K1(2,1);
 M.Init();            // инициализация значениями
 M1.Init();
 K1.Init();
 M.Print();            //Вывод матрицы
 M1.Print();
 K.Print();
 K1.Print();
 K=M+M1;
K.Print();
 cout<<"this is the end";
 cin>>a;
}
Добавлено через 49 минут
Прошу прощения, забыл показать данные класса

C++
1
2
3
4
5
6
7
8
class Matrix
{
 private:
    int n,m;     //размерность матрицы [n,m]
    Spisok* sp;
.....
.....
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2011, 22:40     Разреженные матрицы
Посмотрите здесь:

Алгоритм обработки матрицы: Нахождение максимального элемента матрицы и его номера. C++
Разреженные матрицы C++
Зеркально отразить элементы матрицы относительно горизонтальной оси симметрии матрицы C++
Матрицы. Программа, которая удаляет столбец матрицы, содержащий максимальный ее элемент C++
Разреженные матрицы C++
C++ Разреженные матрицы
C++ Вычесть из элементов первого столбца матрицы значение максимального элемента матрицы
C++ Найти количество элементов матрицы, которые совпадают с элементами другой матрицы

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-comrade-
355 / 356 / 42
Регистрация: 11.06.2010
Сообщений: 703
26.04.2011, 10:57     Разреженные матрицы #2
Navigator45, разве вы здесь правильно перегружаете оператор?
C++
1
Matrix Matrix::operator+(Matrix M1)const
Navigator45
0 / 0 / 0
Регистрация: 28.03.2011
Сообщений: 11
26.04.2011, 21:56  [ТС]     Разреженные матрицы #3
Цитата Сообщение от -comrade- Посмотреть сообщение
Navigator45, разве вы здесь правильно перегружаете оператор?
C++
1
Matrix Matrix::operator+(Matrix M1)const
В смысле?
Yandex
Объявления
26.04.2011, 21:56     Разреженные матрицы
Ответ Создать тему
Опции темы

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