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

Хранение разреженной структурно-симметричной матрицы - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Перемещение элементов односвязного списка http://www.cyberforum.ru/cpp-beginners/thread821218.html
#include <stdio.h> #include <conio.h> void main() { struct node { int inf; node*next; }; printf ("Vvedite chislo elementov");
C++ методы класса Доброго времени суток! Заранее извиняюсь за тупку. Чем отличаются вызовы c.printMe(); c.printMe; Первый понятно, реализовал метод, выводит на экран объект. А второй что за зверь? http://www.cyberforum.ru/cpp-beginners/thread821214.html
C++ Чтение строки из файла и запись (GUI)
Здравствуйте. Собственно находил исходы я на эту тему только для консолек, работаю в визуалке, и когда переделываю код под WinForms то получаются косяки которые я к сожалению исправить не могу. Дак вот. Где найти инфу именно по C++/CLI. Или хотя бы переделать. Что требуется: 1) Прочитать файл 2) Найти нужную строку или по названию 3) Заменить найденные данные Всё это в GUI.
Блок-Схема. Вывести список и число слов, длинна которых меньше 5 символов C++
помогите пожалуйста составить блок-схему к программе Программа: из слов строки, разделенных пробелом, создается однонаправленный список/стек, вывести этот список и вывести число слов, длинна которых меньше 5 символов #include "stdafx.h" #include <stdio.h> #include <conio.h> #include <string.h> #include <locale.h>
C++ Вывести массив и распечатать адреса http://www.cyberforum.ru/cpp-beginners/thread821193.html
Написал код для задачи, но программа немного не так работает. Не получается правильно построить массив, распечатать адреса и произведение. Помогите пожалуйста! Дана динамическая целочисленная матрица. Построить динамический одномерный массив, каждый элемент которого равен сумме элементов одной строки исходной матрицы. Освободить память от матрицы, найти произведение элементов одномерного...
C++ Подскажите пожалуйста У меня проблема такая, когда пробую создать консольное приложение(с++) в visual studio, то выскакивает пустое окошко с кнопками готово, и отмена. дальше ни чего не происходит, жать кнопки бесполезно можно только закрыть окно. у меня проблема такая, когда пробую создать консольное приложение(с++) в visual studio, то выскакивает пустое окошко с кнопками готово, и отмена. дальше ни чего не... подробнее

Показать сообщение отдельно
TonyPetro
1 / 1 / 0
Регистрация: 22.11.2011
Сообщений: 9
28.03.2013, 16:55     Хранение разреженной структурно-симметричной матрицы
Здравствуйте. Пытаюсь разобраться вот с этим заданием:

Дана разреженная структурно симметричная матрица. Найти матрицу, обратную к ней.

Написал алгоритм хранения этой матрицы с помощью пять массивов как предложено было преподавателем (см. фотото)
Еще сделал функцию получения значения матрицы от i,j.
Помогите разобраться как сделать обратную матрицу. Все операции нужно производить только над запакованными матрицвми.

Код:
Кликните здесь для просмотра всего текста
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
#include "stdafx.h"
#include <iostream>
using namespace std;
 
struct ssmatrix //Структура хранения матрицы
{
    int N;
    int NZ;
    int *AD;
    int *AU;
    int *AL;
    int *LJ;
    int *LI;
};
 
void initializeMatrix(int N, int NZ, ssmatrix &mtx) //Функция инициализации матрицы
{
    mtx.N=N;
    mtx.NZ=NZ;
    mtx.AD=new int [N];
    mtx.AU=new int [NZ];
    mtx.AL=new int [NZ];
    mtx.LJ=new int [NZ];
    mtx.LI=new int [N];
}
 
void fillingMatrix(int N, int NZ, ssmatrix &mtx) //Функция заполнения массивов структуры матрицы
{
    int i, j, c=0, el, i1=0, b=-1;
 
    cout<<"Введите элементы диагонали";
    for(i=0;i<N;i++) cin>>mtx.AD[i];
    cout<<"Введите элементы матрицы:";
    while(c!=NZ)
    {
        cout<<"Координаты i,j = "; cin>>i>>j;
        cout<<"["<<i<<"]["<<j<<"] = "; cin>>el; mtx.AU[i1]=el; mtx.LJ[i1]=j;
        if(b<i)
        {
            mtx.LI[i]=i1;
            b=i;
        }
 
        cout<<"["<<j<<"]["<<i<<"] = "; cin>>el; mtx.AL[i1]=el;
 
        //cout<<"Продолжить? 0-выйти"; cin>>c;
        c++;
        i1++;
    }
    mtx.LI[N-1]=i1;
 
    for(i=N-1;i>=0;i--)
    {
        if(mtx.LI[i]<0) mtx.LI[i]=mtx.LI[i+1];
    }
}
 
int procedureMatrix(int i, int j, ssmatrix &mtx) //Поиск элемента матрицы
{
    int AA=0, N1, N2, k;
    N1= mtx.LI[i];
    N2= mtx.LI[i+1];
    
    if(i==j) return mtx.AD[i];
    if(i<j) 
    {
        N1= mtx.LI[i];
        N2= mtx.LI[i+1];
        for(k=N1;k<N2;k++) if(mtx.LJ[k]==j) {AA=mtx.AU[k];break;}
    }
    if(i>j)
    {
        N1= mtx.LI[j];
        N2= mtx.LI[j+1];
        for(k=N1;k<N2;k++) if(mtx.LJ[k]==i) {AA=mtx.AL[k];break;}
    }
    return AA;
}
 
void printMatrix(int N, ssmatrix &mtx) //Вывод матрицы на экран
{
    for (int i=0;i<N;i++)
    {
        for ( int j=0;j<N;j++) cout<<procedureMatrix(i,j,mtx)<<" ";
        cout<<endl;
    }
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"RUSSIAN"); //Включаем русский язык в консоли
 
    struct ssmatrix mtx;
    struct ssmatrix invmtx;
    int N,NZ,i,j;
 
    cout<<"Размерность матрицы: "; cin>>N;
    cout<<"Кол-во ненулевых элементов верхнего или нижнего треугольника: "; cin>>NZ;
 
    initializeMatrix(N, NZ, mtx); //Инициализируем матрицу mtx
    initializeMatrix(N, NZ, invmtx); //Инициализируем матрицу invmtx
    fillingMatrix(N, NZ, mtx);
    
    //-------- Выводим массивы для проверки
    cout<<endl<<"AD "; for(i=0;i<N;i++) cout<<mtx.AD[i]<<" ";
    cout<<endl<<"AU "; for(i=0;i<NZ;i++) cout<<mtx.AU[i]<<" ";
    cout<<endl<<"AL "; for(i=0;i<NZ;i++) cout<<mtx.AL[i]<<" ";
    cout<<endl<<"LJ "; for(i=0;i<NZ;i++) cout<<mtx.LJ[i]<<" ";
    cout<<endl<<"LI "; for(i=0;i<N;i++) cout<<mtx.LI[i]<<" ";
    //--------
    cout<<endl;
 
    printMatrix(N,mtx);
 
    return 0;
}


Фото:

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru