lost90 Temat założony przez niniejszego użytkownika |
Znikająca wartość zmiennej xnew. » 2014-03-28 21:15:56 Witam! Mam taki problem z programem: W funkcji obliczaniewpsolrzednych obliczana jest wartość zmiennej xnew. Przy warunkach, które testowo wprowadziłem wychodzi -1.56, jednak zaraz za funkcją (dosłownie w następnej linijce) kiedy każę wypisać wartość xnew wyskakuje wartość 0. Błąd pewnie jest (jak zawsze) prozaiczny i prosty do naprawienia, ale ja go nie widzę! Z góry dziękuję za wszelką pomoc! #include <iostream> #include <cmath> using namespace std;
char tablicax[ 3 ] = { 'x', 'X', 'N' }; char tablicay[ 3 ] = { 'y', 'X', 'Y' }; char tablicaz[ 3 ] = { 'z', 'Y', 'N' };
double f1_mnoznik[ 7 ] = { 2, 2, 1, - 2, - 2, - 2, 3 }; char f1_zmienna[ 8 ] = { 'x', 'y', 'z', 'X', 'Y', 'x', ' ', 'K' }; double f1_wykladnik[ 7 ] = { 2, 2, 2, 1, 1, 1, 0 }; double f1_mnoznik1[ 7 ]; char f1_zmienna1[ 8 ]; double f1_wykladnik1[ 7 ];
double f2_mnoznik[ 5 ] = { 3, 4, - 12, 12, - 24 }; char f2_zmienna[ 6 ] = { 'x', 'x', 'x', 'y', 'y', 'K' }; double f2_wykladnik[ 5 ] = { 4, 3, 2, 2, 1 }; double f2_mnoznik1[ 5 ]; char f2_zmienna1[ 6 ]; double f2_wykladnik1[ 5 ];
int i, rozmiar, kontrolkaX, kontrolkaY, kontrolkaZ; double xold, xnew, wartoscpochodnej, c, e;
double obliczaniewpsolrzednych( double tablica1[], char tablica2[], double tablica3[], int rozmiar, char tablica4[], double wspolrzedna, double wspolrzednanowa, double stala, double wartoscpochodnej ) { wartoscpochodnej = 0; for( i = 0; i < rozmiar; i++ ) { if( tablica2[ i ] == tablica4[ 0 ] ) { wartoscpochodnej += tablica1[ i ] * pow( wspolrzedna, tablica3[ i ] ); } else if( tablica2[ i ] == 'n' ) { wartoscpochodnej += tablica1[ i ]; } } std::cout << "xnew przed obliczeniem = " << wspolrzednanowa << endl; wspolrzednanowa = wspolrzedna - stala * wartoscpochodnej; std::cout << "xnew po obliczeniu = " << wspolrzednanowa << endl; }
double pochodna( double tablica1[], char tablica2[], double tablica3[], double tablica11[], char tablica21[], double tablica31[], int rozmiar, char tablica4[] ) { for( i = 0; i < rozmiar; i++ ) { tablica11[ i ] = tablica1[ i ]; tablica21[ i ] = tablica2[ i ]; tablica31[ i ] = tablica3[ i ]; if( tablica4[ 2 ] == 'N' ) { if( tablica21[ i ] == tablica4[ 1 ] || tablica21[ i ] == tablica4[ 0 ] ) { tablica21[ i ] = tablica4[ 0 ]; } else { tablica21[ i ] = 'n'; } } else { if( tablica21[ i ] == tablica4[ 1 ] || tablica21[ i ] == tablica4[ 2 ] ) { tablica21[ i ] = tablica4[ 0 ]; } } } for( i = 0; i < rozmiar; i++ ) { if( tablica21[ i ] == tablica4[ 0 ] ) { tablica11[ i ] *=( tablica31[ i ] ); tablica31[ i ] +=- 1; if( tablica31[ i ] == 0 ) { tablica21[ i ] = 'n'; } } else { tablica11[ i ] = 0; tablica31[ i ] = 0; } } }
double sprawdzanieminimum( double e, double wspolrzedna, double wspolrzednanowa, double kontrolka ) { std::cout << "abs(xnew) = " << abs( wspolrzednanowa ) << endl; std::cout << "abs(xold) = " << abs( wspolrzedna ) << endl; std::cout << e << endl; std::cout << "różnica = " <<( abs( wspolrzednanowa ) - abs( wspolrzedna ) ) << endl; if(( abs( wspolrzednanowa ) - abs( wspolrzedna ) ) < e ) { kontrolka = 1; } } int main() { pochodna( f2_mnoznik, f2_zmienna, f2_wykladnik, f2_mnoznik1, f2_zmienna1, f2_wykladnik1, 5, tablicax ); c = 0.01; e = 0.01; kontrolkaX = 0; xold = - 3; std::cout << "xold = " << xold << endl; obliczaniewpsolrzednych( f2_mnoznik1, f2_zmienna1, f2_wykladnik1, 5, tablicax, xold, xnew, c, wartoscpochodnej ); std::cout << "xnew po funkcji = " << xnew << endl; sprawdzanieminimum( e, xold, xnew, kontrolkaX ); return 0; }
|