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

Треугольная матрица - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.61
Гагарин
0 / 0 / 0
Регистрация: 08.05.2010
Сообщений: 5
08.05.2010, 19:09     Треугольная матрица #1
Как реализовать треугольную матрицу одномерным массивом?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2010, 19:09     Треугольная матрица
Посмотрите здесь:

Правая треугольная Матрица!!!!Умножение матриц!!! C++
C++ Треугольная матрица (Borland v 3.1)
C++ Матрица
Матрица в С++ C++
C++ Треугольная матрица
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Hell Knight
 Аватар для Hell Knight
230 / 84 / 3
Регистрация: 11.03.2010
Сообщений: 290
08.05.2010, 19:40     Треугольная матрица #2
треугольная это типа этой что ли ?
Код
a11  a12 a13 ... a1n
0    a22 a23 ... a2n
0    0    a33 ... a3n
... ... ... ... ... ... 
0    0    0    ... ann
Гагарин
0 / 0 / 0
Регистрация: 08.05.2010
Сообщений: 5
08.05.2010, 19:42  [ТС]     Треугольная матрица #3
yep=)
Hell Knight
 Аватар для Hell Knight
230 / 84 / 3
Регистрация: 11.03.2010
Сообщений: 290
08.05.2010, 19:55     Треугольная матрица #4
ну как-то так...
C++
1
2
3
4
5
6
7
8
9
int k = 0;
for (int i = 0; i < N; i++)
{
    for (int j = i; j < N; j++)
    {
        b[k] = a[i][j];
        k++;
    }
}
Гагарин
0 / 0 / 0
Регистрация: 08.05.2010
Сообщений: 5
08.05.2010, 20:09  [ТС]     Треугольная матрица #5
У меня несколько вопросов:
1. Допустима ли эта строчка вообще
b[k] = a[i][j];
просто я не могу проверить, у мня нет вижака.
2. Зачем создавать сначала 2-мерный массив, а потом пихать его в 1-мерный? Это же куча времени и масса памяти уйдет, по моему логично что надо из файла, либо вручную их туда вбивать
И 3.(Наверное самый главный) Как в одномерном массиве различать строки матрицы?)
Hell Knight
 Аватар для Hell Knight
230 / 84 / 3
Регистрация: 11.03.2010
Сообщений: 290
08.05.2010, 21:58     Треугольная матрица #6
Цитата Сообщение от Гагарин Посмотреть сообщение
1. Допустима ли эта строчка вообще
b[k] = a[i][j];
просто я не могу проверить, у мня нет вижака.
допустима, если они будут одинаковго типа

Цитата Сообщение от Гагарин Посмотреть сообщение
2. Зачем создавать сначала 2-мерный массив, а потом пихать его в 1-мерный? Это же куча времени и масса памяти уйдет, по моему логично что надо из файла, либо вручную их туда вбивать
это как-бы способ представления такой...

Цитата Сообщение от Гагарин Посмотреть сообщение
3.(Наверное самый главный) Как в одномерном массиве различать строки матрицы?)
можно так:
C++
1
2
3
4
5
6
7
8
int i = 0;
int k = CURRENT;
int h = 0;
while(k>i)
{
    i += N - h;
    h++;
}
не тестировал... попробуй...
в итоге в h должно остаться строка в которой содержится k-ый элемент...
Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,692
08.05.2010, 22:22     Треугольная матрица #7
Мне кажется, удобнее записывать треугольную матрицу в одномерный массив по столбцам, тогда в алгоритме пересчета индексов размерность матрицы вообще фигурировать не будет. Т.е. сначала записать первый столбец из одного элемента, затем второй из двух элементов, и т.д.
Тогда формула соответствия индексов имеет вид:
k = i + j * (j + 1) /2; i <= j; (1)
где k – индекс одномерного массива (начиная с нуля);
i, j – координаты элемента матрицы (тоже начинаются с нуля);

Имея i и j получить k можно по формуле (1).
Зная k, координаты i и j можно получить следующим образом: в выражении j * (j + 1) /2 увеличиваем j до тех пор, пока оно не превысит k. Пусть это произошло при j == J.
Тогда j = J -1, i = k - j * (j + 1) /2;
genius5
 Аватар для genius5
114 / 36 / 2
Регистрация: 13.12.2009
Сообщений: 223
09.05.2010, 09:41     Треугольная матрица #8
в одномерном массиве a[i][j] выглядит так a[i*n+j]
n-размерность матрицы
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2010, 02:54     Треугольная матрица
Еще ссылки по теме:

Треугольная матрица (Файлы) C++
Матрица C++
C++ Матрица

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

Или воспользуйтесь поиском по форуму:
deff78
 Аватар для deff78
11 / 11 / 1
Регистрация: 09.12.2009
Сообщений: 56
31.05.2010, 02:54     Треугольная матрица #9
Пытался на нашем форуме найти готовую функцию, которая приводила бы квадратную матрицу к треугольному виду, но не нашёл. Это наиболее близкая к истине тема, так что если кому понадобится - вот функция по нахождению треугольной матрицы.
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
void treangle (double *B, int n)
{
double *A = new double[n*n];
for(int i=0;i<n*n;i++)
A[i]=B[i];
double k;
for(int x=0;x<n-1;x++)
for(int i=0+x;i<n-1;i++)
{
   k=A[(i+1)*n+x]/A[x*n+x];
   for(int j=x;j<n;j++)
      {
      A[(i+1)*n+j]=A[(i+1)*n+j]-A[x*n+j]*k;
      if (fabs(A[(i+1)*n+j])<0.001) A[(i+1)*n+j]=0;
      }
}
   cout<<"\n";
for(int i=0;i<n;i++)
{
   cout<<"\n";
   for(int j=0;j<n;j++)
   cout<<A[i*n+j]<<" ";
}
delete[] A;
return;
}
Yandex
Объявления
31.05.2010, 02:54     Треугольная матрица
Ответ Создать тему
Опции темы

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