Algorytm Euklidesa

0

Witam.
Napisałem algorytm Euklidesa w pętli for. Niby on działa, ale jak uzyskać końcowy wynik, np. dla liczb 72 i 48 "NWD dla liczb 72 i 48 to 24"? Mogę używać właściwie tylko tego, co jest w kodzie, pętle, instrukcje warunkowe. Bez żadnych metod czy osobnych funkcji (wiem, tak by było łatwiej, ale takie polecenie). Problem jest w zakresie wartości zmiennych. Jak to napisać?

public class Main16 {

    public static void main(String[] args) {
        int x, y, gdc;
        x = 72;
        y = 48;

        for (int i = 1; y != 0; ) {
            i = x % y;
            if (i != 0) {
                x = y;
                y = i;
            } else {
                System.out.println("GDC to: " + y);     //chciałbym "GDC dla liczb 72 i 48 to 24"
            }

        }
    }

}
3

Odpalałeś swój kod w ogóle? Twój warunek stopu zajdzie tylko w szczególnych przypadkach (EDIT: chyba nawet nigdy nie zajdzie, w takiej formie jak to napisałeś ;) ). Nie powinieneś robić tego forem. Użyj pętli while. Coś takiego:

public class TestString {

    public static int NWD(int numberA, int numberB) {
        int temp;
        while (numberB != 0) {
            temp = numberA % numberB;
            numberA = numberB;
            numberB = temp;
        }
        return numberA;
    }

    public static void main(String[] args) {

        System.out.println("result: " + NWD(72, 48));
        System.out.println("result: " + NWD(1989, 867));

    }
}
2

Zanim zaczniesz jakiekolwiek obliczenia, przypisz wejściowe parametry do jakichś zmiennych lokalnych - inaczej utracisz informację o tym, jakie liczby weszły na początku ;)

0

Teraz zauważyłem, że wkleiłem złą wersję mojego kodu, przepraszam. Wiem, że ta też nie jest najlepsza, ale o tą mi chodziło.

public class Main16 {

    public static void main(String[] args) {
        int x, y;
        x = 72;
        y = 48;

        for (int i = 1; y != 0; ) {
            i = x % y;
            if (i != 0) {
                x = y;
                y = i;
                continue;
            } else {
                System.out.println("GDC to: " + y);
                break;
            }

        }
    }

}

Dzięki za Twoją wersję, ale nie o to mi chodziło. Tak jak napisałem w głównym poście, program powinien być cały w mainie, bez innej funkcji. Chodziło mi też o to, żeby na końcu wypisać obie liczby i ich NWD. W mojej wersji jest to niemożliwe, bo zmienne zmieniają swoją wartość w pętli. Da się tego jakoś uniknąć bez tworzenia dodatkowej funkcji?
Tutaj wersja z while:

public class Main16 {

    public static void main(String[] args) {
        int x, y, temp;
        x = 72;
        y = 48;

        while (y != 0) {
            temp = x % y;
            x = y;
            y = temp;
            }
        System.out.println("GDC to: " + x);

    }
}
0

Przecież już dostałeś informację ,że musisz sobie je skopiować.

int xCopy=x;

I wtedy masz dostępną niezmienioną wartość.

1
Lich555 napisał(a):

Dzięki za Twoją wersję, ale nie o to mi chodziło. Tak jak napisałem w głównym poście, program powinien być cały w mainie, bez innej funkcji. Chodziło mi też o to, żeby na końcu wypisać > obie liczby i ich NWD. W mojej wersji jest to niemożliwe, bo zmienne zmieniają swoją wartość w pętli. Da się tego jakoś uniknąć bez tworzenia dodatkowej funkcji?

Przepraszam, że nie wykonałem polecenia w 100% poprawnie. Specjalnie napisałem tak jak napisałem, abyś chociaż trochę się wysilił i wybrał z mojej odpowiedzi to co najważniejsze, czyli fragment z pętlą while. Dlaczego? Bo Twoja wersja była daleka od właściwego rozwiązania.

Widzę, że jakoś sobie poradziłeś, gratuluję.
Teraz przeczytaj odpowiedzi @Pinek oraz @Botek i będziesz miał rozwiązanie na resztę problemów.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0