Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

17.10.2011, 19:34. Просмотров 2955. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2011, 19:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разреженная матрица (C++):

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

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

дана квадратичная матрица z[n][n]. составить программу, которая если матрица симметричная(транспонированная матрица равна исходной), сделает ее не сим - C++
помогите пожалуйста. условие: дана квадратичная матрица z. составить программу, которая если матрица симметричная(транспонированная...

Дана матрица целых чисел, из n строк и n столбцов (n < = 100).Определить является ли матрица нулевой (состоит из одних нулей) - C++
#include &lt;iostream.h&gt; #include &lt;iomanip.h&gt; #include&lt;conio.h&gt; void main() { int mas; int N; int max_element; int...

Дана матрица целых чисел, из n строк и n столбцов (n < = 100).Определить является ли матрица нулевой (состоит из одних нулей) - C++
#include &lt;iostream.h&gt; #include &lt;iomanip.h&gt; #include &lt;stdlib.h&gt; int main(int argc, char* argv) { srand(time(NULL)); int mas; ...

Даны квадратная матрица A порядка n и вектор с n элементами. Получить вектор: (A=E)b, где E единичная матрица порядка n - C++
Даны квадратная матрица A порядка n и вектор с n элементами. Получить вектор: (A=E)b, где E-единичная матрица порядка n. Помогите...

5
MasoD
7 / 7 / 1
Регистрация: 03.10.2010
Сообщений: 44
19.10.2011, 22:12  [ТС] #2
Никто не глянет?
0
MasoD
7 / 7 / 1
Регистрация: 03.10.2010
Сообщений: 44
04.11.2011, 15:47  [ТС] #3
Может хотя бы в общих чертах?
0
MasoD
7 / 7 / 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++;
        }
    }
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
07.11.2011, 07:27 #5
Цитата Сообщение от MasoD Посмотреть сообщение
Из-за белезни, пролежал 2 недели дома, поэтому пропустил лекции по этой теме, а лабу надо сдавать.
Ну хоть знаешь, что разреженным массивом называется массив, действительное количество элементов которого меньше их номинального количества? Сами же способы сжатия могут быть любыми. Можно юзить массив индексов, массив указателей, блочные представления, а если заполненность распределена достаточно регулярна, то и просто пересчёт индексов.
0
MasoD
7 / 7 / 1
Регистрация: 03.10.2010
Сообщений: 44
07.11.2011, 12:53  [ТС] #6
taras atavin, спасибо. уже сделал.
0
07.11.2011, 12:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2011, 12:53
Привет! Вот еще темы с ответами:

Определить базовый класс "Матрица" и класс-потомок "Треугольная матрица" - C++
Нужно определить класс &quot;матрица&quot; с возможностью динамического выделения и освобождения памяти, наполнения матрицы, сохранения и чтения из...

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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