Help! (не пойму, в чем ошибка - переменная обнуляется сама!)
Может, b = 2.0 * a / c
Правда на a это не может повлиять
Правда на a это не может повлиять
Неа. Это выражение - сильное упрощение того, что в проге на самом деле, но там все переменные типа double.
double a,b,c;
a=1.0;
(Может ли это быть связано с тем, что a - элемент массива?)Так элемент или не элемент? Приведи конкретный код.
valarray<double> Gauss(valarray<double>* A, valarray<double> B, int n)
{
valarray<double>* a=A;
valarray<double>* aa=a;
valarray<double> b(B);
valarray<double> x(0.0,n);
int i,j,k;
for(k=0;k<n-1;k++)
{
for(i=k+1;i<n;i++)
{
for(j=0;j<n;j++)
{ // здесь а[i][k]=1
aa[i][j]=a[i][j]-a[j][k]*a[i][k]/a[k][k]; // а уже здесь а[i][k]=0
}
.....
{
valarray<double>* a=A;
valarray<double>* aa=a;
valarray<double> b(B);
valarray<double> x(0.0,n);
int i,j,k;
for(k=0;k<n-1;k++)
{
for(i=k+1;i<n;i++)
{
for(j=0;j<n;j++)
{ // здесь а[i][k]=1
aa[i][j]=a[i][j]-a[j][k]*a[i][k]/a[k][k]; // а уже здесь а[i][k]=0
}
.....
ужос!магия!
надо использовать временный вектор.
у тебя тройной цикл и два индекса у массива. соответственно индексы повторяются.
у тебя тройной цикл и два индекса у массива. соответственно индексы повторяются.
+1
Кстати, какой смысл использовать два указателя на один и тот же массив? Не говоря уже о том, что массив valarray-ев - солидная подстава.
Кстати, какой смысл использовать два указателя на один и тот же массив? Не говоря уже о том, что массив valarray-ев - солидная подстава.
Нормальные люди пишут перед циклом по j
Не говоря уже о том, что вместо a[j][k] должно быть a[k][j].
double coeff=a[i][k]/a[k][k];
Не говоря уже о том, что вместо a[j][k] должно быть a[k][j].
А смысл? Оптимизатор это сам вытащит.
да кстати проблема, описанная в первом посте просто жесть.
тут нужны были бы мега-телепатические возможности.
тут нужны были бы мега-телепатические возможности.
Каким образом он это сам вытащит, если при этом вытаскивании программа из неправильной становится правильной (если деления на нуль не произойдет по дороге)?
А смысл? Оптимизатор это сам вытащит.это повод не думать?
у тебя a и aa это одно и тоже
ты меняешь aa, значит a тоже меняется
ты меняешь aa, значит a тоже меняется
Это повод думать о другом.
При j = k a[i][j] = a[i][k] обнуляется. Цикл надо сделать от k + 1
Всем спасибо! Видимо, действительно дело в том, что aa==a. Проблема решена введением еще одной переменной 

Ну так массив aa и был введен как временный, только оказалось, что это точная копия массива a
(что поделаешь - я не профи в программировании
)
(что поделаешь - я не профи в программировании
)Оставить комментарий
barbara1
Please, help!Может я, конечно, совсем тормоз, но проблема никак не хочет решаться. Если совсем упростить, то проблема следующая:
double a,b,c;
a=1.0;
/*далее некоторое действие, вроде */ b=2*a/c;
после этого a=0 !
Почему так получается?
(Может ли это быть связано с тем, что a - элемент массива?)
(программирую в C++ Visual)