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

Funkcja wspólny dzielnik

Ostatnio zmodyfikowano 2017-05-26 21:50
Autor Wiadomość
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.

C/C++
#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";
}
P-161600
carlosmay
» 2017-05-26 11:37:55
while( x != 0 )
Ten warunek jest nieprawidłowy. Szukasz takiej liczby, gdzie obie podane liczby po obliczeniach będą takie same.
P-161601
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
P-161602
carlosmay
» 2017-05-26 12:23:19
Chyba nie zrozumiałem co to
( x != 0 and y != 0 )
 znaczy.
Największy wspólny dzielnik
P-161604
wokub
Temat założony przez niniejszego użytkownika
» 2017-05-26 16:31:10
Dziwne, bo u mnie działa jak mam
C/C++
#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";
}
P-161611
carlosmay
» 2017-05-26 21:50:31
( x != y )
 robi o jedną pętlę mniej i jest czytelniej.
P-161634
« 1 »
  Strona 1 z 1