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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Определить, принадлежит ли точка заданной области и вывести ответ. http://www.cyberforum.ru/cpp-beginners/thread262088.html
......
C++ Работа с символьными данными Помогите плз!!!!! ваще идей нет((((( Вывести на печать список слов, имеющих приставку (несколько букв), задаваемую с терминала. http://www.cyberforum.ru/cpp-beginners/thread262082.html
C++ Динамичный массив на C++
Заменить наименьшие элементы в массиве на среднее арифметическое его значений. Создать функции для вычисления среднего арифметического элементов массива и определения его минимума. __________________________________________________ В программе обязательно применение динамического массива и функций как calloc malloc free или как аналог new delete. В качестве компилятора использую Visual Studio...
C++ дамп, маскирование, функции
//dump for a short integer #include <iostream> short int dva(short int number) { using namespace std; bool flag(false); if (number) {
C++ Ошибка 6 error C2664: strtok: невозможно преобразовать параметр 1 из "const char *" в "char *" http://www.cyberforum.ru/cpp-beginners/thread262061.html
string s = "555 44 55 66";//размер строки заранее неизвестен char* p = strtok(s.c_str(), ' '); не нравится такое компилятору. пишет Ошибка 6 error C2664: strtok: невозможно преобразовать параметр 1 из "const char *" в "char *"
C++ Робота со строками В файле ведомость группы, в каждой строке фамилия напротив 5 полей с результатами экзаменов и 5 полей с зачетами. Разроботать класс(в моем случае хоть функцию) для отчиления, если более 2х хвостов Ребят помогите пожалуйста. очень нужно Все что получилось пока это загружать список группы из файла и то не всегда грузит(( Заранее благодарен подробнее

Показать сообщение отдельно
sveta11115
0 / 0 / 0
Регистрация: 20.03.2010
Сообщений: 39
22.03.2011, 19:46     разреженная матрица
Помогите, пожалуйста, с задачей:Дана разряженная матрицы общего вида. Осуществить циклический сдвиг в матрице каждого столбца на 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]; //возвращаем количество элементов
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru