Help! (не пойму, в чем ошибка - переменная обнуляется сама!)

barbara1

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

danilov

Может, b = 2.0 * a / c
Правда на a это не может повлиять

barbara1

Неа. Это выражение - сильное упрощение того, что в проге на самом деле, но там все переменные типа double.

tamusyav

double a,b,c;
a=1.0;
(Может ли это быть связано с тем, что a - элемент массива?)
Так элемент или не элемент? Приведи конкретный код.

barbara1

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
}
.....

Alexander08

ужос!магия!

Maurog

надо использовать временный вектор.
у тебя тройной цикл и два индекса у массива. соответственно индексы повторяются.

tamusyav

+1
Кстати, какой смысл использовать два указателя на один и тот же массив? Не говоря уже о том, что массив valarray-ев - солидная подстава.

SPARTAK3959

Нормальные люди пишут перед циклом по j
double coeff=a[i][k]/a[k][k];

Не говоря уже о том, что вместо a[j][k] должно быть a[k][j].

tamusyav

А смысл? Оптимизатор это сам вытащит.

Maurog

да кстати проблема, описанная в первом посте просто жесть.
тут нужны были бы мега-телепатические возможности.

SPARTAK3959

Каким образом он это сам вытащит, если при этом вытаскивании программа из неправильной становится правильной (если деления на нуль не произойдет по дороге)?

Andbar

А смысл? Оптимизатор это сам вытащит.
это повод не думать?

pitrik2

у тебя a и aa это одно и тоже
ты меняешь aa, значит a тоже меняется

aleks058

Это повод думать о другом.

danilov

При j = k a[i][j] = a[i][k] обнуляется. Цикл надо сделать от k + 1

barbara1

Всем спасибо! Видимо, действительно дело в том, что aa==a. Проблема решена введением еще одной переменной

barbara1

Ну так массив aa и был введен как временный, только оказалось, что это точная копия массива a (что поделаешь - я не профи в программировании )
Оставить комментарий
Имя или ник:
Комментарий: