2016-02-25 3 views
2

Первоначально у меня было 3 уравнения: Pu, Pm & Pd. Все прошло отлично. Как только я ввел оператор if с изменениями в 3 уравнениях, в зависимости от итерации цикла, я получаю ошибку времени выполнения. Любая помощь будет оценена по достоинству.if statement runtime error

Приветствия заранее.

#include <cmath> 
#include <iostream> 
#include <vector> 
#include <iomanip> 


int Rounding(double x) 
{ 
    int Integer = (int)x; 
    double Decimal = x - Integer; 

    if (Decimal > 0.49) 
    { 
     return (Integer + 1); 
    } 
    else 
    { 
     return Integer; 
    } 
} 

int main() 
{ 
double a = 0.1; 
double sigma = 0.01; 
int delta_t = 1; 
double M = -a * delta_t; 
double V = sigma * sigma * delta_t; 
double delta_r = sqrt(3 * V); 
int count; 

double PuValue; 
double PmValue; 
double PdValue; 

int j_max; 
int j_min; 

j_max = Rounding(-0.184/M); 
j_min = -j_max; 

std::vector<std::vector<double>> Pu((20), std::vector<double>(20)); 
std::vector<std::vector<double>> Pm((20), std::vector<double>(20)); 
std::vector<std::vector<double>> Pd((20), std::vector<double>(20)); 

std::cout << std::setprecision(10); 
for (int i = 0; i <= 2; i++) 
    { 
     count = 0; 
     for (int j = i; j >= -i; j--) 
      { 
       count = count + 1; 
       if (j = j_max) // Exhibit 1C 
       { 
        PuValue = 7.0/6.0 + (j * j * M * M + 3 * j * M)/2.0; 
        PmValue = -1.0/3.0 - j * j * M * M - 2 * j * M; 
        PdValue = 1.0/6.0 + (j * j * M * M + j * M)/2.0; 
       } 
       else if (j = j_min) // Exhibit 1B 
       { 
        PuValue = 1.0/6.0 + (j * j * M * M - j * M)/2.0; 
        PmValue = -1.0/3.0 - j * j * M * M + 2 * j * M; 
        PdValue = 7.0/6.0 + (j * j * M * M - 3 * j * M)/2.0; 
       } 
       else 
       { 
        PuValue = 1.0/6.0 + (j * j * M * M + j * M)/2.0; 
        PmValue = 2.0/3.0 - j * j * M * M; 
        PdValue = 1.0/6.0 + (j * j * M * M - j * M)/2.0; 
       } 
       Pu[count][i] = PuValue; 
       Pm[count][i] = PmValue; 
       Pd[count][i] = PdValue; 

       std::cout << Pu[count][i] << ", "; 
      } 
     std::cout << std::endl; 
    } 
return 0; 
} 

ответ

2

Вы назначая вместо проверки равны: j_max к j в ваших если заявления.

if (j = j_max) 
// ^

else if (j = j_min) 
//  ^


Изменение if (j = j_max) к if (j == j_max),
И else if (j = j_min) к else if (j == j_min).

+0

Вы удивительный Андреас. ура – Fitzy

0

Исправьте следующую if проверки условий и все другие экземпляры if проверки

if(j=j_max) 

with 

if (j == j_max) 

вы проверяете на равенство не назначая.

Ваш код собирался в бесконечный цикл.