Funkcja wspólny dzielnik
Ostatnio zmodyfikowano 2017-05-26 21:50
wokub Temat założony przez niniejszego użytkownika |
Funkcja wspólny dzielnik » 2017-05-26 11:23:08 Siemka. Mam zadanie na najwiekszy wspolny dzielnik. No i wszystko jest już zrobione, ale gdy chce kompilowac i cyfry maja wspolny dzielnik wiekszy niz 0, program zamula i jakby liczyl i liczyl, i liczyl, ostatecznie nic nie wypisujac. Tutaj pytanie. To wina kompilatora (internetowe i mój zachowują się w ten sam sposób) czy kodu? Ponoc mam jakis subtelny błąd tutaj. #include <iostream> #include <cstdlib>
int nwd( int x, int y ) { if( x == 0 and y == 0 ) return - 1; x = std::abs( x ); y = std::abs( y ); while( x != 0 ) { if( x > y ) x -= y; else y -= x; } return x; }
int main() { int n, m; std::cout << "n ="; std::cin >> n; std::cout << "m ="; std::cin >> m; std::cout << "najwiekszy wspolny dzielnik liczb " << n << " i " << m << " wynosi " << nwd( n, m ) << "\n"; }
|
|
carlosmay |
» 2017-05-26 11:37:55 Ten warunek jest nieprawidłowy. Szukasz takiej liczby, gdzie obie podane liczby po obliczeniach będą takie same. |
|
wokub Temat założony przez niniejszego użytkownika |
» 2017-05-26 11:53:47 Aa faktycznie, po dodaniu warunku na y tj., ( x != 0 and y != 0 ) wszystko działa. Dzięki |
|
carlosmay |
» 2017-05-26 12:23:19 |
|
wokub Temat założony przez niniejszego użytkownika |
» 2017-05-26 16:31:10 Dziwne, bo u mnie działa jak mam #include <iostream> #include <cstdlib>
int nwd( int x, int y ) { if( x == 0 and y == 0 ) return - 1; x = std::abs( x ); y = std::abs( y ); while( x != 0 and y != 0 ) { if( x > y ) x -= y; else y -= x; } return x; }
int main() { int n, m; std::cout << "n ="; std::cin >> n; std::cout << "m ="; std::cin >> m; std::cout << "najwiekszy wspolny dzielnik liczb " << n << " i " << m << " wynosi " << nwd( n, m ) << "\n"; }
|
|
carlosmay |
» 2017-05-26 21:50:31 ( x != y ) robi o jedną pętlę mniej i jest czytelniej. |
|
« 1 » |