Как разложить в условные операторы if-else (или другие)
От: semike Россия isthis.narod.ru
Дата: 11.06.03 09:31
Оценка:
hi, all
процедура изменения шага выглядит следующим образом (хотя практически идентичны):

1. если новая предполагаемая длина шага h увеличивается менее, чем в 1.1, то шаг не меняем.
2. шаг не меняем в течении k+1 шагов после последнего изменения, если только используемое значение шага обеспечивает точность eMax.
3. если после k+1 шагов увеличение шага невозможно, то дальнейшая проверка возможности увеличения шага откладывается до 10 шагов.

double a;// параметр изменения шага 
int CounterSuccess=0;//счетчик удачных вычислений  
  
while (.......) // основной цикл вычислений 
{ 
  
ReCalculation: 
  
x=x+h; 
  
if (FlagReCalculation==true) 
{ 
......................... 
        FlagReCalculation=false; 
} 
........................................ 
    // блок управления шагом и порядком 
 
    if (eT>eMax) {// с текущим шагом h точность eMax не достигнута 
                 Comput_a(); //вычисляю a, которое должно быть меньше 1 
                 x=x-h; // возвращаюсь в предыдушую точку   
                 h=h*a;   //уменьшаю шаг, будет ли достаточным такое уменьшение, чтобы    
                             //   на следующей итерации удовлетворялось уравнение (eT<=eMax) еще  нужно проверить 
                 CounterSuccess=0; //счетчик удачных вычислений обнуляю 
                 FlagReCalculation=true;    
                 goto ReCalculation; // иду вверх и все пересчитываю с новым h (меньшим шагом) 
    } 
    else { // с текущим шагом h точность eMax достигнута 
          if  (CounterSuccess>kCurrent+1) { 
                  Comput_a(); //вычисляю a, которое должно быть больше 1 
                        if (a>1.1) { 
                                   h=h*a;             //увеличиваю шаг 
                                   ChangeOrder();     // если нужно, то меняю порядок метода 
                                   CounterSuccess=0;  //т.к. шаг поменял 
                               } 
                        else CounterSuccess=CounterSuccess-10-1;// откладываем проверку на 10 шагов, и еще вычитаем 1, т.к. 3 строки ниже увеличиваю счетчик 
            } 
    } 
        CounterSuccess++;//счетчик удачных вычислений                                                        <------------ 
....................... 
} // while


вот что набросал, но как — то не укладывается в голове третье условие в процедуре изменения шага и моя проверка

else CounterSuccess=CounterSuccess-10-1;//
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.