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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ обьясните функцию простым языком :) http://www.cyberforum.ru/cpp-beginners/thread253159.html
Обьясните плиз, почему в main() возможна такая d3 = 10.0 + d1; операция? Тоесть на первом месте стоит 10.0 потом обьект. Я понял что это делает друж-ная функция, но хотелось бы узнать как это она делает? Семантику можно? class Distance //Класс английских расстояний { private: int feet; float inches; public: Distance() //конструктор без...
C++ строки помогите пожалуйста с задачами: 1.после каждого заданного слова в сообщении поставить восклицательный знак. 2.дан текст, представляющий собой десятичную запись целого числа. вычислить сумму цифр этого числа. http://www.cyberforum.ru/cpp-beginners/thread253157.html
сортировка char по f C++
помогите плиз: Есть массив m на n содержавший слова нужно отсортировать содержание по символу F
Методом Ньютона решить линейное уравнение C++
Всем привет и хорошего настроения! Решаю вычмат. Методом Ньютона надо решить линейное уравненьице. Сам метод запроган. Хочу запрогать процесс нахождения начального приближения x0. Мои рассуждения: с помощью графика определяю границы промежутка, где сидят все корни уравнения. Далее иду с шагом step=0.1 от левого конца этого промежутка, пока не встречу такое х0, что f(x0)*fdx(x0)<=0, где fdx -...
C++ Нужно написать небольшую програмку на С++ http://www.cyberforum.ru/cpp-beginners/thread253124.html
Привет! Помогите написать прогрумму небольшую на С++. Мне очень нужно для ООП. Заранее спасибо =)
C++ Сложение двух строк Проблема: не могу получть результат. Что у меня не так? class base { private: char* str; int size; public: base( char *str1) { подробнее

Показать сообщение отдельно
Anatoly89
Сообщений: n/a
07.03.2011, 12:41     CSR метод хранения разреженных матриц
Нужна ваша помощь. Необходимо реализовать 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);
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 09:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru