1 / 1 / 3
Регистрация: 29.11.2010
Сообщений: 23
1

Ошибка в динамической переменной и массиве

29.11.2010, 17:32. Показов 589. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Написал код выбора ведущего элемента матрицы по столбцу(нахождение мах элемента и перестановка строк). Вот код(на лишние переменные не обращайте внимания):

long double **A= new long double*[razm],**U= new long double*[razm],**L= new long double*[razm],*Y= new long double[razm],*X= new long double[razm],*B= new long double[razm];
long double *max;
long double *P,summ ;
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 max=A[i,i];
        for (ii = 0; ii < n; ii++) {
          if (A[ii,i]>max) {
              max=A[ii,i];
              str=ii;
          }
        }
        
        for (ii = 0; ii < n; ii++) {
 
           P=A[ii,str];
          A[ii,str]=A[ii,i];
          A[ii,i]=P;
        }
Компилится код нормально, но вот при выполнении программы ошибка. результат выдается NAN. Если вместо динамики использую обычные массивы и переменные, то всё четко работает. В чем ошибка???
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.11.2010, 17:32
Ответы с готовыми решениями:

Ошибка с выделением динамической памяти
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; class Vector { private: int...

Ошибка при обращении к динамической глобальной переменной
использую в файле Unit1(Form1) 2 переменные, которые обьявляю как глобальные в начале файла:...

Удаление динамической переменной
дайте пример создания и удаления динамической переменной класса (например массива char) или...

Присваивание переменной в динамической таблице
&lt;? error_reporting(E_ALL); ?&gt; &lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot;...

3
4 / 4 / 1
Регистрация: 03.06.2010
Сообщений: 55
30.11.2010, 11:09 2
C++
1
2
3
4
5
double**a=new double*[razm];
for(int i=0;i<razm;i++)
{
  *(a+i)=new double [razm];
}
По-моему так (квадратная матрица)
0
1 / 1 / 3
Регистрация: 29.11.2010
Сообщений: 23
30.11.2010, 13:09  [ТС] 3
Неа, все равно в ответе одни NAN.


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
int n,i,j,k,ii,str,razm;
 
long  double **A= new long  double*[razm],**U= new long  double*[razm],**L= new long  double*[razm],*Y= new long  double[razm],*X= new long  double[razm],*B= new long  double[razm];
float duration;
long double *max;
long double *P,summ ;
 //double A1[10][10]; B[10],U[10][10],L[10][10];
razm=2500;
 
n= (int)(numericUpDown1->Value);
 
  for (i = 0;( i <n) ; i++) {
  *(A+i)=new long double [n];
      L[i] = new long  double[n];
      U[i+1] = new long  double[n];
    L[i][0]= Convert::ToSingle(this->dataGridView1->Rows[i]->Cells[0]->Value);
    for (j = 0; (j < n); j++) {
 
    A[i][j]=Convert::ToSingle(this->dataGridView1->Rows[i]->Cells[j]->Value);
     U[i+1][j]=0;
     L[i][j+1]=0;
    if (i==0) {
        U[j] = new long  double[n];
       U[0][j]=A[0][j];
    }
     }
  }
  B = new long  double[n];
    for (i = 0; i < n; i++) {
       B[i]=Convert::ToSingle(this->dataGridView1->Rows[i]->Cells[n]->Value);
    }
 
 
 
    for (i = 0; i < n; i++) {
 
         max=A[i,i];                                       //начало кода, где подозреваю ошибку
        for (ii = 0; ii < n; ii++) {
          if (A[ii,i]>max) {
              max=A[ii,i];
              str=ii;
          }
        }
        
        for (ii = 0; ii < n; ii++) {
 
           P=A[ii,str];
          A[ii,str]=A[ii,i];
          A[ii,i]=P;   
        }                                    //конец кода, где подозреваю ошибку
Дальше программа считает, выполняет разные операции с матрицей А и если убрать этот фрагмент кода из программы:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
max=A[i,i];
        for (ii = 0; ii < n; ii++) {
          if (A[ii,i]>max) {
              max=A[ii,i];
              str=ii;
          }
        }
        
        for (ii = 0; ii < n; ii++) {
 
           P=A[ii,str];
          A[ii,str]=A[ii,i];
          A[ii,i]=P;
        }
То все работает отлично. Проблема в этом куске кода! Может дело в работе с динамической переменной(Р) всётаки ???
0
4 / 4 / 1
Регистрация: 03.06.2010
Сообщений: 55
01.12.2010, 11:00 4
Двумерный массив инициализируется циклом. Закрой цикл (12, 15). После этого можно работать с массивом A[][], L[][], U[][]. Еще в 15 строчке непонятно, почему i+1. Возможно, так задумано, я не вникал. Обязательно погугли динамические двумерные массивы в с++.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.12.2010, 11:00
Помогаю со студенческими работами здесь

Создание динамической переменной в цикле
Вобщем ситуация такая, мне надо создать динамическую переменную в цикле к примеру: for($z=0;...

Как проверить успешность создания динамической переменной?
ПОдскажите пожалуйста как модно проверять успешность создания новой двумерной динамической...

Присвоение значения динамической переменной из программно-созданного расписания
Добрый день! При создании расписания программно (через функцию), пытаюсь присвоить значение...

Утечка памяти при создании динамической переменной класса
Никак не могу исправить проблему утечки памяти при создании динамической переменной класса class...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru