crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Тема закрытаНачать новую тему
> qt ведет себя странно
voipp
  опции профиля:
сообщение 12.10.2010, 23:46
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 116
Регистрация: 20.10.2009
Из: Msk
Пользователь №: 1166

Спасибо сказали: 0 раз(а)




Репутация:   0  


слот вызывается после нажатия на кнопку.
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
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


что за дурацкие названия переменных - 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;
   }
}


Сообщение отредактировал Алексей1153 - 13.10.2010, 7:15
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 13.10.2010, 8:31
Сообщение #3


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


...........
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.
скорее всего ты просто вылетаешь за пределы массива.

Сообщение отредактировал Iron Bug - 13.10.2010, 8:32
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Тема закрытаНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.12.2024, 15:12