0 / 0 / 0
Регистрация: 20.03.2010
Сообщений: 39
1

разреженная матрица

22.03.2011, 19:46. Показов 1873. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите, пожалуйста, с задачей:Дана разряженная матрицы общего вида. Осуществить циклический сдвиг в матрице каждого столбца на n разрядов.
У меня есть программа, где сдвиг каждой строки на n разрядов.
Если можно, переделайте, пожалуйста, на сдвиг каждого столбца на n разрядов.
Для строк вот программа:
#include "iostream"
#include "conio.h"

using namespace std;

struct mas
{
int A;
int LJ;
mas *next;
};


int create(mas*, int*, int, int);
void print(mas*, int*, int, int);
int func(mas*, int*, int, int, int);

int main()
{
int m,n,num,*LI,k;
mas *X;

cout<<"Enter number of rows and columns: ";
cin>>m>>n;
X=new mas;
LI=new int[m+1];
num=create(X,LI,m,n);
cout<<"\nYour matrix:\n";
print(X,LI,m,n);
cout<<"\nnum="<<num;
cout<<"\nEnter length of cycle: ";
cin>>k;
num=func(X,LI,m,n,k);
cout<<"\nYour matrix after cyclic shift:\n";
print(X,LI,m,n);
getch();
return 0;
}

int create(mas *X, int *LI, int m, int n)//функция создания матрицы
{
int i,j,num,k,f;
mas *z=X,*p,*q;
num=0;
z->A=0;
p=z;
q=z;
cout<<"Enter your matrix:\n";
for (i=0;i<m;i++)
{
f=0;
for (j=0;j<n;j++)
{
cin>>k;
if (k!=0)
{
if (f==0)
{
LI[i]=num;
f=1;
}


if(!z->A) //если вводится самый первый элемент
{
z->A=k;
z->LJ=j;
z->next=0;
num++;
}
else
{
z->next=new mas;
z=z->next;
z->A=k;
z->LJ=j;
z->next=0;
num++;
}
}
}

}
cout<<"\n";
while (p!=0)
{
cout<<p->A<<" "; //вывод ненулевых элементов
p=p->next;
}
cout<<"\n";
while (q!=0)
{
cout<<q->LJ<<" "; //вывод индекса j каждого ненулевого элемента
q=q->next;
}
cout<<"\n";
LI[m]=num;
for (i=0;i<=m;i++)
cout<<LI[i]<<" "; //вывод LI(местоположения 1 ненул. эл—та в каждой строке)
return num;
}

void print(mas *X,int *LI, int m, int n) //функция вывода матрицы
{
mas *p;
p=X;
int i,j,k,f;
for (i=0; i<m; i++)
{
f=LI[i+1]-LI[i]; // число ненулевых элементов в строке
k=0;
for (j=0; j<n; j++)
if ((p->LJ==j)&&(k<f))
{
cout<<p->A<<" ";
if(p->next) p=p->next;
k++;
}
else cout<<"0 ";
cout<<"\n";
}
}





int func(mas *X, int *LI, int m, int n, int k)//функция, осуществляющая циклический сдвиг каждой строки на n элементов
{
mas *p, *tmp, *tmp1, *tmp2, *q; //p-для вычисления индексов перед сортировкой,tmp2-указатель на начало каждой строки, q-для сортировки
int i,j,f, r,t1,t2;
p=X;
q=X;
tmp2=X;
tmp=X;
tmp1=X;
for (i=0; i<LI[m]; i++) //цикл по всем ненулевым элементам
{
if ((p->LJ+k)<n) p->LJ=p->LJ+k; //меняем значения LJ на новые
else p->LJ=p->LJ+k-n;
p=p->next;
}

for (i=0;i<m;i++)
{
f=LI[i+1]-LI[i]; //число ненулевых элементов в строке
for(j=0; j<=f-1; j++)
{ q=tmp2; //ссылаем q на первую позицию в строке
for (r=0; r<=f-2-j;r++)
if (q->LJ>q->next->LJ)
{
t1=q->LJ;
t2=q->A;
q->LJ=q->next->LJ;
q->A=q->next->A;
q->next->LJ=t1;
q->next->A=t2;
q=q->next;
}
else q=q->next;
}
for (j=0; j<f; j++) //передвигаем tmp2 на следующую строку
if(tmp2->next) tmp2=tmp2->next;
}

cout<<"\n";
for (i=0; i<LI[m]; i++)
{
cout<<tmp->A<<" "; //вывод нового массива А ненулевых элементов
tmp=tmp->next;
}
cout<<"\n";
for (i=0; i<LI[m]; i++)
{
cout<<tmp1->LJ<<" "; //вывод нового массива LJ индексов ненул.эл.
tmp1=tmp1->next;
}

return LI[m]; //возвращаем количество элементов
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.03.2011, 19:46
Ответы с готовыми решениями:

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

Разреженная матрица
Добрый день. Есть квадратная матрица, после считывания представляется в разреженном строчном...

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

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

0
22.03.2011, 19:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.03.2011, 19:46
Помогаю со студенческими работами здесь

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

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

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

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


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

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

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