Obliczenie parametru przy pomocy instrukcji 'if' i jego wykorzystanie
Ostatnio zmodyfikowano 2015-12-06 21:12
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:
if( Re9 > 100000 ) { float k = 0.00135; float dk =(( 3.17 * dwew9 ) / k ); double logarytm =( log10( dk ) ); double potega = pow( logarytm, - 2 ); float lambdakw9 =( 2 * potega ); double pierwiastek9 = sqrt( lambdakw9 ); float kr9 =( Re9 * k * pierwiastek9 / dwew9 ); if( kr9 > 200 ) { double re9do237 = pow( Re9, 0.237 ); float lambda9 =( 0.0032 +( 0.221 / re9do237 ) ); } else { float lambda9 = lambdakw9; } }
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; } if( Re9 < 2320 ) { float lambda9 =( 64 / Re9 ); std::cout << "lambda 9 Re<2320 wynosi: " << lambda9 << std::endl; } }
float deltah9 =(( Vsr9 * Vsr9 * dlugosc9 * lambda92 ) /( 2 * dwew9 * g ) ); std::cout << "delta h dla 9 wynosi :" << deltah9 << std::endl;
|
|
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. float lambda9; if( kr9 > 200 ) { double re9do237 = pow( Re9, 0.237 ); lambda9 =( 0.0032 +( 0.221 / re9do237 ) ); }
else { lambda9 = lambdakw9; }
}
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; }
if( Re9 < 2320 ) { lambda9 =( 64 / Re9 ); std::cout << "lambda 9 Re<2320 wynosi: " << lambda9 << std::endl; }
}[ cpp ] |
|
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ść. |
|
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). |
|
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: 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. |
|
carlosmay |
» 2015-12-06 21:04:43 float lambda9; if( Re9 > 100000 ) { lambda9 = } |
|
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. |
|
« 1 » |