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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.76
MasoD
6 / 6 / 1
Регистрация: 03.10.2010
Сообщений: 44
#1

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

17.10.2011, 19:34. Просмотров 2761. Ответов 5
Метки нет (Все метки)

Добрый вечер.
Из-за белезни, пролежал 2 недели дома, поэтому пропустил лекции по этой теме, а лабу надо сдавать.
Так вот, задача:

Разреженная матрица А(nxm) хранится в разреженном строчном формате. Смоделировать операцию вывода разреженной матрицы на экран в двух формах:
-в виде полной матрицы;
-для каждой строки печатается ее номер, а затем ненулевые элементы этой строки и за каждым из них в скобках соответствующий столбцовый индекс.

Может кто-нидь поможет? Заранее спасибо.

Вот задача друга, но я все равно не смог разобраться, но надо так же с AN, JA, JI.

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
//Разреженная матрица А(nxm) хранится в разреженном строчном формате. Смоделировать операцию 
//перестановки двух столбцов матрицы с получением результата в том же формате.
 
#include <iostream>
using namespace std;
 int main()
{
    int i,j,AN[16],JA[16],IA[4],k,t,p,st1,st2,x=0,BA[16],TA[16],a,b;
    int mas[4][4];
         cout<<"BBedite Matrichu"<<endl;
    for (i=0;i<=3;i++) 
    {
        for (j=0;j<=3;j++) 
        cin>>mas[i][j];
        cout<<endl;
    }
    system("cls");
for (i=0;i<=3;i++) 
    {
        for (j=0;j<=3;j++) 
        cout<<mas[i][j]<<' ';
    cout<<endl; 
    }
k=0;
for (i=0;i<=3;i++) 
    {
        for (j=0;j<=3;j++){ 
BA[x]=j;
TA[x]=mas[i][j];
x++;
 
         if (mas[i][j]!=0)
        {AN[k]=mas[i][j];
JA[k]=j;
 
k++;}}
}
p=k;
t=1;
 
cout<<"AN=";
for (i=0;i<16;i++){
    if (AN[i]>0) {cout<<AN[i]<<' ';}
}
cout<<endl;
cout<<"JA=";
for (i=0;i<16;i++){
if (AN[i]>0)
{   cout<<JA[i]<<' ';}}
cout<<endl;
IA[0]=1;
for(i=0;i<16;i++){
if (JA[i]<=JA[i-1])
{IA[t]=i+1;
t++;
}}
cout<<"IA=";
for (p=0;p<=4;p++){
cout<<IA[p]<<' ';
}
cout<<endl;
cout<<"BBedite Nomer 1 stolbcha"<<endl;
cin>>st1;
cout<<"BBedite Nomer 2 stolbcha"<<endl;
cin>>st2;
a=st1;
for (i=0;i<16;i++){
    if (BA[i]==st1) {a=i;
}
    if (BA[i]==st2)
    {
        BA[i]=st1;b=TA[i]; TA[i]=TA[a];TA[a]=b;}
BA[a]=st2;
}
cout<<endl;
k=0;
for (i=0;i<=3;i++) 
    {
        for (j=0;j<=3;j++) 
        {mas[i][j]=TA[k];
        k++;}
        
    }
k=0;
for (i=0;i<=3;i++) {
 
    for (j=0;j<=3;j++){ 
            if (mas[i][j]!=0)
        {AN[k]=mas[i][j];
JA[k]=j;
k++;}}
}
cout<<"AN=";
for (i=0;i<16;i++){
    if (AN[i]>0) {cout<<AN[i]<<' ';}
}
cout<<endl;
cout<<"JA=";
for (i=0;i<16;i++){
if (AN[i]>0)
{   cout<<JA[i]<<' ';}}
cout<<endl;
IA[0]=1;
for(i=0;i<16;i++){
if (JA[i]<=JA[i-1])
{IA[t]=i+1;
t++;
}}
cout<<"IA=";
for (p=0;p<=4;p++){
cout<<IA[p]<<' ';
}
cout<<endl;
system("pause");
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2011, 19:34     Разреженная матрица
Посмотрите здесь:

Осуществить циклический сдвиг в матрице каждого столбца на n разрядов (разреженная матрица) - C++
помогите пожалуйста написать прогу) Дана разреженная матрицы общего вида (CSS или CSR). Осуществить циклический сдвиг в матрице каждого...

Разработать класс "Разреженная матрица" - C++
Разреженная матрица хранится в виде &lt;номер строки, номер столбца, значение&gt;. Если запрашивается значение, которое не хранится, возвращается...

Разреженная матрица - Delphi
Кто-нибудь работал с разреженными матрицами на delphi ? Подскажите, как задать такую матрицу...

Разреженная матрица - Turbo Pascal
Можете написать алгоритм перехода с разреженной матрицы в обычную?

Разреженная вещественная матрица - Pascal
Разреженная вещественная матрица записана по строкам в текстовом файле. Компонента файла - это запись, содержащая ненулевой элемент...

Умножение разреженная матрица - Python
У меня проблема в модуле в котором производится функцией dot умножение матрицы эта функция не поддерживает разреженные матрицы(так мне...

Разреженная матрица - исправить код - Pascal
помогите не работает не понимаю почему модуль Unit Uno; interface Type TList=^Lst; Lst=Record r,s:Integer;...

Сформировать СЛАУ , где А– разреженная матрица - Java SE
Ребят помогите, очень нужна лаба, а времени нет, как и навыков, а уже дедлайн Сформировать СЛАУ , где А– разреженная матрица. Для...

Разреженная матрица и векторы (списки списков) - Java SE
Нужна помощь, дали семестровые задания, мне попалось такое: Разреженные матрицы и вектора (списки списков) Поэлементное сложение и...

Если заданная матрица разреженная, найти сумму ее элементов - Turbo Pascal
Если заданная матрица случайным образом разрежённая(кол-во нулевых элементов в разрежённой матрице состовляет не менее 2/3 от общего кол-ва...

Матрица. Обратная матрица. - Алгебра
Что делать если последняя строка обратной матрицы получается нулевой? в чём ошибка?


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MasoD
6 / 6 / 1
Регистрация: 03.10.2010
Сообщений: 44
19.10.2011, 22:12  [ТС]     Разреженная матрица #2
Никто не глянет?
MasoD
6 / 6 / 1
Регистрация: 03.10.2010
Сообщений: 44
04.11.2011, 15:47  [ТС]     Разреженная матрица #3
Может хотя бы в общих чертах?
MasoD
6 / 6 / 1
Регистрация: 03.10.2010
Сообщений: 44
06.11.2011, 20:21  [ТС]     Разреженная матрица #4
Матрица переводится в строчный формат, а вот обратно беда - не знаю как прикрутить массив IA. Посмотрите пжлста.

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <iostream>
#include <locale>
#include <iomanip>
 
using std::cout;
using std::cin;
using std::endl;
using std::setw;
 
int main()
{
    setlocale(LC_ALL,"Russian");
    const unsigned short n = 4;
    const unsigned short m = 4;
    const unsigned short amt = n*m;
    short Matrix[n][m] = {{0}};
    short Array[amt] = {0};
    short AN[amt] = {0};
    short JA[amt] = {0};
    short IA[n + 1] = {0};
    short k = 0;
    short p = 0;
    short t = 0;
    short x = 0;
    short q = 0;    
 
    cout << endl
         << "Введите матрицу (" << n << "x" << m << "):"
         << endl
         << endl;
    for(short i = 0; i < n; i++)    
        for(short j = 0; j < m; j++)
            cin >> Matrix[i][j];
 
    for(short i = 0; i < n; i++)    
    {
        q = 0;
        for(short j = 0; j < m; j++)
        {           
            if (Matrix[i][j] != 0)
            {
                AN[k] = Matrix[i][j];
                JA[k] = j;
                if (q == 0)
                {
                    IA[t] = k;
                    for(short h = t; h < n; h++)
                        IA[h] = k;
                    t++;
                }
                q = 1;
                k++;
            }
        }   
    }
    cout << endl 
        << "AN = ";
    for(short i = 0; i < amt; i++)
        if (AN[i] > 0)
            cout << AN[i] << " ";
    cout << endl
        << "JA = ";
    for(short i = 0; i < amt; i++)
        if (AN[i] > 0)
            cout << JA[i] << " ";   
    IA[0] = 0;
    IA[n] = k;
    cout << endl
        << "IA = ";
    for(short i = 0; i < n + 1; i++)
        cout << IA[i] << " ";
 
 
    cout << endl
        << endl
        << "Нормальная форма: "
        << endl;
    for(short i = 0, j = 0, k = 0, t = 0, p = 0; i < amt; i++)  
    {   
//      t = IA[p];
        if (JA[t] == k)
        {
            cout << AN[j] << " ";
            j++;
            t++;
        }
        else
            cout << "0" << " ";
        k++;
        if (!((i + 1)%n))
        {
            cout << endl;
            k = 0;
//          p++;
        }
    }
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
07.11.2011, 07:27     Разреженная матрица #5
Цитата Сообщение от MasoD Посмотреть сообщение
Из-за белезни, пролежал 2 недели дома, поэтому пропустил лекции по этой теме, а лабу надо сдавать.
Ну хоть знаешь, что разреженным массивом называется массив, действительное количество элементов которого меньше их номинального количества? Сами же способы сжатия могут быть любыми. Можно юзить массив индексов, массив указателей, блочные представления, а если заполненность распределена достаточно регулярна, то и просто пересчёт индексов.
MasoD
6 / 6 / 1
Регистрация: 03.10.2010
Сообщений: 44
07.11.2011, 12:53  [ТС]     Разреженная матрица #6
taras atavin, спасибо. уже сделал.
Yandex
Объявления
07.11.2011, 12:53     Разреженная матрица
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru