Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Obliczenie parametru przy pomocy instrukcji 'if' i jego wykorzystanie

Ostatnio zmodyfikowano 2015-12-06 21:12
Autor Wiadomość
maciek7566
Temat założony przez niniejszego użytkownika
Obliczenie parametru przy pomocy instrukcji 'if' i jego wykorzystanie
» 2015-12-06 14:50:39
Witam. Mam na imię Maciek i w zasadzie dopiero od kilku tygodni mam styczność z językiem c++. Podczas pisania prostego programu do obliczeń kilku parametrów natrafiłem na pewien problem.
Otóż aby obliczyć parametr 'deltah9' potrzebujemy wartosc parametru 'lambda'. Wartość 'lambda' oblicza się 3 różnymi wzorami w zależności od wartości parametru Re. Tak wiec skonstruowałem instrukcje warunkowa 'if' z 3 możliwościami i dla każdej pieknie wpisalem wzór który liczy mi wartość lambda (w zaleznosci od Re). Problem jest jednak taki, iż aby przejść dalej i policzyć 'deltah9' potrzebna mi jest wartość obliczonego lambda. Nie mogę jej jednak wykorzystać ponieważ zmienna 'lambda' dostępna jest tylko w obrębie instrukcji warunkowej 'if'. Czy jest jakaś metoda aby pobrać tę wartość z odpowiedniej instrukcji i żeby ona była dostępna również poza blokiem instrukcji warunkowej?

Wklejam tutaj fragment kodu o którym mówie:

C/C++
//wspolczynnik lambda dla 9 1/2

if( Re9 > 100000 )
{
   
   
    //lambda kw - 9 cali
    float k = 0.00135;
    float dk =(( 3.17 * dwew9 ) / k ); //3,17d / k
    double logarytm =( log10( dk ) ); //sam logarytm
    double potega = pow( logarytm, - 2 ); // logarytm do -2
    float lambdakw9 =( 2 * potega ); // lambda kw dla 9
   
   
    //kreterium rose'a - 9 cali
    double pierwiastek9 = sqrt( lambdakw9 ); //pierwastek z lambdakw
    float kr9 =( Re9 * k * pierwiastek9 / dwew9 ); //kryterium rouse'a
   
   
    if( kr9 > 200 )
    {
        double re9do237 = pow( Re9, 0.237 );
        float lambda9 =( 0.0032 +( 0.221 / re9do237 ) );
       
        //delta h
       
       
       
    }
   
    else
    {
        float lambda9 = lambdakw9;
       
        //delta h
       
    }
   
   
}

else
{
    if( Re9 > 2320 )
    {
        double potegowanie = pow( Re9, 0.25 );
        float lambda9 =( 0.364 / potegowanie );
       
        std::cout << "lamdda 9 Re>2320 wynosi: " << lambda9 << std::endl;
        lambda9 = lambda92;
       
        //delta h
       
       
    }
   
    if( Re9 < 2320 )
    {
        float lambda9 =( 64 / Re9 );
        std::cout << "lambda 9 Re<2320 wynosi: " << lambda9 << std::endl;
       
        //delta h
       
    }
   
   
}

//delta h

float deltah9 =(( Vsr9 * Vsr9 * dlugosc9 * lambda92 ) /( 2 * dwew9 * g ) );
std::cout << "delta h dla 9 wynosi :" << deltah9 << std::endl;
P-141493
pepe450
» 2015-12-06 15:16:30
Jeśli chodzi o tą zmienną lambda9.
To utwórz ją przed instrukcją if czyli:
będziesz miał w ten sposób dostęp do zmiennej lambda9 w całym mainie od miejsca pojawiania się float lamba9.
C/C++
float lambda9;
if( kr9 > 200 )
{
    double re9do237 = pow( Re9, 0.237 );
    lambda9 =( 0.0032 +( 0.221 / re9do237 ) );
   
    //delta h
   
   
   
}

else
{
    lambda9 = lambdakw9;
   
    //delta h
   
}


}

else
{
if( Re9 > 2320 )
{
    double potegowanie = pow( Re9, 0.25 );
    lambda9 =( 0.364 / potegowanie );
   
    std::cout << "lamdda 9 Re>2320 wynosi: " << lambda9 << std::endl;
    lambda9 = lambda92;
   
    //delta h
   
   
}

if( Re9 < 2320 )
{
    lambda9 =( 64 / Re9 );
    std::cout << "lambda 9 Re<2320 wynosi: " << lambda9 << std::endl;
   
    //delta h
   
}


}[ cpp ]
P-141495
maciek7566
Temat założony przez niniejszego użytkownika
» 2015-12-06 15:26:47
No tak ale o ile dobrze rozumiem to to co mi się przelicza w blokach 'if' to i tak w tym bloku zostanie, a do obliczeń 'deltah9' zostanie przyjęta niewłaściwa wartość.
P-141496
pepe450
» 2015-12-06 17:06:00
Zmienne stworzone w bloku if są dostępne tylko w bloku.
Jeśli deklarujesz przed blokiem wartość będzie prawidłowa i dostępna poza blok.
Skoro Twoja lambda zależy od tylko od Re znaczy że dla jednego wywołania programu tylko jeden if się wykona (ten który spełnia warunek Re).
P-141504
maciek7566
Temat założony przez niniejszego użytkownika
» 2015-12-06 20:32:19
czyli musiałbym dodac: 'float lambda9' jeszcze przed pierwszym blokiem z if czyli tutaj:

C/C++
float lambda9;
if( Re9 > 100000 )
{

a to niestety nie pomaga ponieważ program nie wylicza prawidłowo... innego błędu w kodzie raczej nie ma bo jeżeli przed blokiem 'if' dam 'float lambda9=1' to jest ok.
P-141544
carlosmay
» 2015-12-06 21:04:43
C/C++
float lambda9;
if( Re9 > 100000 )
{
    //...
    lambda9 = //.. jakies wyliczenia
    // z opisu problemu wynika, że tutaj tez dajesz
    // float lambda9 = // to jest zakrywania zmiennych
}
P-141546
maciek7566
Temat założony przez niniejszego użytkownika
» 2015-12-06 21:12:42
Ok, teraz już rozumiem, niepotrzebnie w bloku instrukcji dawałem 'float lambda9=' zamiast 'lambda9='. Bardzo dziękuje za pomoc.
P-141547
« 1 »
  Strona 1 z 1