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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.96
Anatoly89
Сообщений: n/a
#1

CSR метод хранения разреженных матриц - C++

07.03.2011, 12:41. Просмотров 3214. Ответов 0
Метки нет (Все метки)

Нужна ваша помощь. Необходимо реализовать CSR метод хранения симметричных разреженных матриц
Матрица считывается из файла matr, который выглядит следующим образом
7
9.0 0.0 0.0 3.0 1.0 0.0 1.0
0.0 11.0 2.0 1.0 0.0 0.0 2.0
0.0 2.0 10.0 2.0 0.0 0.0 0.0
3.0 1.0 2.0 9.0 1.0 0.0 0.0
1.0 0.0 0.0 1.0 12.0 0.0 1.0
0.0 0.0 0.0 0.0 0.0 8.0 0.0
1.0 2.0 0.0 0.0 1.0 0.0 8.0
где в 1ой строке указан размер матрицы
В результате должны получиться следующие 3 массива
AN: 9.0 3.0 1.0 1.0 11.0 2.0 1.0 2.0 10.0 2.0 9.0 1.0 12.0 1.0 8.0 8.0
JA: 0.0 3.0 4.0 6.0 1.0 2.0 3.0 6.0 2.0 3.0 3.0 4.0 4.0 6.0 5.0 6.0
IA: 0.0 4.0 8.0 10.0 12.0 14.0 15.0 16.0
Т.к матрица симметрична, то всю матрицу не нужно хранить, нужно только верхнюю треугольную построчно с диагональными элементами
Подскажите в чем ошибка
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
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int main(int argc, char **argv)
 
{int a;
int N=0;
int i,j,col=0;
float JA[100];
float A[100][100];
 
FILE *file_f1=fopen("matr.txt", "rt");if (!file_f1) {cout << "No file"<<"\n";}
//файл чтения
fscanf(file_f1,"%d",&N); 
cout<<N<<"\n"<< endl;
   for(int i=0;i<N;i++)
    { for(int j=i;j<N;j++)
      {
       fscanf(file_f1,"%f",&A[i][j]);
       if (A[i][j]!=0)
       {    JA[j]=j;
            cout<<"JA    "<<JA[j]<<"\n"<< endl;
            col+=1;
       }
         
       cout<<"A    "<<A[i][j]<<"\n"<< endl;
       }
    }
   cout<<"col  "<<col<<"\n"<< endl;
 
    cin >> a;
    fclose(file_f1);
 
    cout << "Done..." << endl;
 
}
выводимая матрица A - это AN.
И как сформировать массив IA(номер, с которого в AN начинается новая строка?
Заранее спасибо

Добавлено через 17 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 for(int i=0;i<N;i++)
    { for(int j=0;j<N;j++)
      {
       fscanf(file_f1,"%f",&A[i][j]);
       if ((A[i][j]!=0) && (i<=j))
       {    JA[j]=j;
            cout<<"JA    "<<JA[j]<<"\n"<< endl;
            col+=1;
            cout<<"AN   "<<A[i][j]<<"\n"<< endl;
       }
         
       
       }
    }
Подредактировал чуть-чуть))). массивы AN и JA ищутся правильно. Осталось с IA разобраться

Добавлено через 15 часов 55 минут
Может кому-то пригодиться. Окончательный рабочий вариант
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
int main(int argc, char **argv)
 
{int a;
int N=0;
int i,j,col=0,num=0;
float JA[100],IA[100];
float A[100][100];
 
FILE *file_f1=fopen("matr.txt", "rt");if (!file_f1) {cout << "No file"<<"\n";}
//файл чтения
fscanf(file_f1,"%d",&N); 
//cout<<N<<"\n"<< endl;
   for(int i=0;i<N;i++)
    { for(int j=0;j<N;j++)
      {
       fscanf(file_f1,"%f",&A[i][j]);
       if ((A[i][j]!=0) && (i<=j))
       {    JA[j]=j;
           //cout<<"JA    "<<JA[j]<<"\n"<< endl;
            col+=1;
           //cout<<"AN   "<<A[i][j]<<"\n"<< endl;
       } 
      }
   IA[0]=0;
   IA[i+1]=col;
   
    }
//for(int i=0;i<N+1;i++)  cout<<"IA    "<<IA[i]<<"\n"<< endl;  
//cout<<"col  "<<col<<"\n"<< endl;
 
cin >> a;
fclose(file_f1);
 
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.03.2011, 12:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос CSR метод хранения разреженных матриц (C++):

Сложение разреженных матриц в схеме CSR / CRS / Метод разряженных строк / Схема Чанга и Густавсона - C++
Здравствуйте, нужна ваша помощь! Стоит задача &quot;свернуть&quot; две разреженные матрицы в CRS схему (названий у нее много, в заголовке...

Умножение треугольных матриц«Методы обработки разреженных матриц» - C++
Нужно перемножить треугольные матрицы в обычном виде и в свёрнутом. С обычным проблем нет. Доступ к элементам свёрнутой матрицы...

Разработать класс для хранения этой строки и метод-индексатор - C++
в какую ветку задать данные вопрос, не поняла..решила что сюда. задача по предмету объектно-ориентированное программирование. Пусть...

Перегрузка оператора () для разреженной матрицы в CSR-формате - C++
Доброй ночи! Я пишу класс разреженных матриц, которые хранятся в CSR-формате. Допустим, есть матрица А. Для доступа к ее значениям на...

Реализуйте класс для хранения ФИО и номера телефона человека, класс для хранения даты рождения человека, а также класс для хранения ФИО и почтового ад - C++
Реализуйте класс для хранения ФИО и номера телефона человека, класс для хранения даты рождения человека, а также класс для хранения ФИО и...

СЛАУ. Метод обратной матрицы, метод Гаусса, метод Крамера, метод Зейделя - C++
Помогите ребят. Не могу построить алгоритмы для этих методов Язык C++

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2011, 12:41
Привет! Вот еще темы с ответами:

Транспонирование матриц. Произведение транспонированных матриц - C++
Найти матрицу С: C=ATBTB; A=\begin{bmatrix}1\\ 1\\ 1\end{bmatrix} B=\begin{bmatrix}1 &amp; 2 &amp; 0 \\ 0 &amp; 1 &amp; 2\end{bmatrix} ...

Разработать способ экономного хранения в памяти разреженных матриц - C++ Builder
Помогите плз зделать Задание 1 Разработать способ экономного хранения в памяти разреженных матриц (таблиц). Разработать процедуры и...

Разработать способ экономического хранения в памяти разреженных матриц - Turbo Pascal
задание Разработать способ экономического хранения в памяти разреженных матриц. Разработать процедуры и функции для обеспечения доступа...

Определители разреженных матриц - Алгебра
Здравствуйте! Помогите посчитать определители следующих матриц: 1) \begin{vmatrix}1 &amp; 2 &amp; 0 &amp; ... &amp; 0\\ 1 &amp; 3 &amp; 2 &amp; ... &amp; 0\\ 0 &amp; 1 &amp; 3 &amp;...


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

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

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