implementacja metody NWD w JAVIE

2011-09-25 01:25
0

Witam.
Mam zadanie, z którym walczę już jakiś czas i nie mogę dać rady:(
Otóż:
muszę zaimplementować metodę NWD (największy wspólny dzielnik) polegającą na rozkładzie liczby na czynniki pierwsze w JAVIE.

Mam już ogólne pojęcie jak powinien wyglądać kod, lecz nie potrafię tego przekuć na konkretne zapisy. Wujek google nic nie pomaga.

Moja koncepcja ogólnie wygląda tak:
Mam trzy liczby - a, b i c.
Dzielę liczbę a przez c (modulo)
jeśli się dzieli bez reszty - dzielę b przez c (modulo)
jeśli się dzieli bez reszty - zapisuję c do tablicy
jeśli się nie dzieli - do liczby c dodaję 1
i robię tak dopóki c stanie się równe a lub c stanie się równe b.
Potem wyciągam z tablicy największą liczbę (która będzie ostatnią zapisaną) i ona będzie tym największym wspólnym dzielnikiem.

public class zadanko {

    int nwd (int a, int b) {
        int c;
        while (a == c | a == b) {
            if (a % c == 0) {
                if (b % c == 0) {
                    zapisuję c do tablicy; }
                else
                    c++; }
            else
                c++;}

        segreguję tablicę
        wyciągam jej największy element

                }

}

Niestety można powiedzieć, że jestem "niepełnosprawna programistycznie" i nie wiem jak stworzyć tablicę i jak zapisywać do niej moje liczby c.
Do tego eclipse wywala mi błąd, że moja liczba b powinna być typu boolean.

Proszę o pomoc - w którym miejscu powinna znaleźć się komenda na utworzenie tablicy, jak do niej zapisywać i proszę o wytknięcie mi wszystkich błędów.

Pozostało 580 znaków

2011-09-25 03:07
0

Uwagi javowe:

  1. tablica powinna być zadeklarowana gdzieś przed pętlą, a jak zapisywać, to są podstawy języka ;] http://www.google.pl/?q=java+array+tutorial
  2. c powinno mieć jakąś wartość przed wejściem do pętli, bo tam już tę wartość odczytujesz
  3. lub zapisujemy za pomocą ||, a nie | (http://download.oracle.com/ja[...]a/nutsandbolts/operators.html)
  4. ze swoich dwóch if'ów możesz zrobić jednego
  5. w javie deklarując tablcę musisz znać jej długość, implementując Twoją koncepcję lepiej użyć Vector'a, bo owej długości nie znasz

Uwagi algorytmiczne:

  1. w Twoim kodzie nie zmieniasz wartości a, b i c w przypadku true-true, co spowoduje, że algorytm się zapętli po znalezieniu pierwszego wspólnego dzielnika (przeanalizuj)
  2. wydaje mi się, że robisz coś zupełnie innego, niż powinnaś :p przyjęłaś koncepcję znajdowania wszystkich dzielników po kolei i wyboru największego z nich, tymczasem masz skorzystać z podziału na czynniki pierwsze i z tych czynników pierwszych coś zrobić - mam nadzieję, że wiesz co :p poza tym możesz to poprawić na co najmniej dwa sposoby:
    a) robiąc odpowiednie modyfikacje w swoim algorytmie
    b) robiąc metodę, która rozkłada liczbę na czynniki pierwsze i wykorzystać ją później dwa razy dla a i b
  3. [jeżeli wybierzesz wersję 7.a), to] nie ma potrzeby pamiętać wszystkich wspólnych dzielników w tablicy/wektorze, wystarczy, że zapamiętasz ich iloczyn
  4. w Twoim kodzie c przyjmuje wszystkie kolejne wartości, a nie tylko wartości, które są liczbami pierwszymi, ale w tym przypadku (po poprawieniu 7.) nie powinno to psuć działania algorytmu

wprowadź poprawki i wrzuć kod

Pozostało 580 znaków

2011-09-25 08:00
bo
0

Zajrzyj też tu NWD metodą "poprzez rozkład na czynniki pierwsze"

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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