Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ С\С++ _ qt ведет себя странно

Автор: voipp 12.10.2010, 23:46

слот вызывается после нажатия на кнопку.

void MainWindow::ymethod(){
Xtop=1;
Ttop=ui->doubleSpinBox_3->value();
Xstep=ui->doubleSpinBox_2->value();
Tstep=ui->doubleSpinBox->value();
Xnumb=1+(Xtop- 0.0)/Xstep;
Tnumb=1+(Ttop- 0.0)/Tstep;
Ynet.setSize(Tnumb,Xnumb);//v nachale tablica zapolnena nulyami
unsigned h=Ynet.getHeight(),w=Ynet.getWidth();

[expand]
/*
все проблемы исчезают, если закоментировать цикл ниже
*/
[/expand]

for(unsigned j=1;j<h;j++)
    for(unsigned i=1;i<(w-1);i++)
        Ynet[i][j]=Ynet[i-1][j-1]*Tstep/pow(Xstep,2)+Ynet[i][j-1]*(1-2*Tstep/pow(Xstep,2))+Ynet[i+1][j-1]*Tstep/pow(Xstep,2);


}


Что самое удивительно - это то, что я нажимаю на кнопку 2 раза и программа виснет, включаю ее заново и она виснет уже после первого нажатия.А бывало и такое, что она висла после четырех нажатий.Может проблема в сложных вычислениях? Хотя у меня проц мощный.

Автор: Алексей1153 13.10.2010, 7:13

что за дурацкие названия переменных - j,i,h,w ?
Ну а в остальном: нужно всегда проверять, не выходишь ли за границу массива и деление на 0 (первое ты вроде сделал)

и оптимизировать по скорости можно упростить можно

double  Ts1=Tstep/pow(Xstep,2); //а тут на Xstep ноль проверял ???
double  Ts2=1-2*Ts1;

for(unsigned j=1; j<h; j++)
{
    for(unsigned i=1;i<(w-1);i++)
   {

        Ynet[i][j]=
                (Ynet[i-1][j-1]+Ynet[i+1][j-1])*Ts1
                +Ynet[i][j-1]*Ts2;
   }
}

Автор: Iron Bug 13.10.2010, 8:31

...........
Ynet.setSize(Tnumb,Xnumb);//v nachale tablica zapolnena nulyami

unsigned h=Ynet.getHeight(),w=Ynet.getWidth();

...........
for(unsigned j=1;j<h;j++)
    for(unsigned i=1;i<(w-1);i++)
        Ynet[i][j]=.....


у тебя Ynet какого размера выделен? индексы i, j меняются от 1 до h и w-1, а они всегда больше, чем Tnumb,Xnumb.
скорее всего ты просто вылетаешь за пределы массива.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)