Wpis z mikrobloga

Zadanie numer 3.

Napisz program, który znajdzie najmniejszy wspólny podzielnik dwóch liczb A i B

Jeśli chcesz być na bieżąco, obserwuj tag #zadaniabartosza, a miło będzie, jak zaobserwujesz też mnie.
#cpp #java #php
  • 26
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@xrbartek: @yelen: No zasadniczo ma rację. Większość takich zadań algorytmicznych w prawie każdym języku wygląda wręcz identycznie. Nigdy nie lubiłem zadań algo. jako metody nauki języka, bardziej postrzegania programistycznego problemów.
  • Odpowiedz
Powinno chyba być w pytaniu największy wspólny dzielnik.
Uwaga podaję odpowiedź dla języka JAVA :)

return org.apache.commons.math3.util.ArithmeticUtils.gcd(a,b)
  • Odpowiedz
@xrbartek: Jeżeli masz jakieś przykłady input/output tych funkcji, które są do napisania to podaj, to bym je sobie wrzucał w testy, sprawdzając, czy funkcja dobrze liczy, bo nie wiem, czy za każdym razem będę w stanie sobie coś takiego wymyśleć ;-)
  • Odpowiedz
@piot-rabi: Twoje rozwiązanie zdaje się być niepoprawne z dwóch powodów:
1) nie może nie istnieć wspólny dzielnik (każda liczba dzieli się przez 1). Dla dwóch liczb pierwszych najmniejszy wspólny dzielnik to -1.
2) skoro miał być najmniejszy to dla 17 i 34 jest to -17, a nie 17

Dodatkowo jeśli już bardzo uparłeś się, że -1 nie może być dzielnikiem (choć nie wiem czemu) to kolejne dwie uwagi:
1) [grammar nazi] zamiast dontExists powinieneś
  • Odpowiedz
@moriturius:
Co do poprawności rozwiązania. To są zadania "ćwiczebne", więc owszem, można by się uprzeć, że odp. wynosi 1, lub "-1" i spawa zamknięta. Napisać metodę, która będzie robiła return -1 i po kłopocie ;-)

1) gramma nazi -> spoko, aktualnie doszkalam się z anglika, więc to jest w trakcie :)
2) code nazi -> wyjątki są bardzo wolne i rzucanie wyjątkami na lewo i prawo mocno spowalnia program. Wyjątek to powinien
  • Odpowiedz
Napisać metodę, która będzie robiła return -1 i po kłopocie ;-)


@piot-rabi: No nie :) -1 jest poprawną odpowiedzią tylko dla dwóch liczb, które nie mają żadnego innego dzielnika wspólnego (np. 3 i 5). W przypadku gdy mamy np. 2 i 4 to najmniejszym dzielnikiem jest -2. Tak na serio to znalezienie najmniejszego wspólnego dzielnika to to samo co znalezienie największego i wzięcie liczby przeciwnej (dopisanie minusa).

Co do typów optional
  • Odpowiedz
@moriturius: Przeczytałem tego posta i wychodzi, że tam jest typ nullable połączony z linq. Jako, że o linq to jakieś 7-8 lat temu prowadziłem prezentację jeszcze na studiach, a w Javie do standardu weszło to dopiero w tym albo zeszłym roku (wprawdzie wcześniej dostępne było jako google guava, która była zrzynką LINQ), to się zastanawiam, czy jest sens się rozpisywać o "porządnych językach" ( ͡° ͜ʖ ͡°
  • Odpowiedz
@piot-rabi: Jeśli odniosłeś wrażenie, że miałem na myśli Javę pisząc o porządnych językach to przepraszam - nie wyraziłem się dostatecznie jasno ;)

To co tam jest wykorzystane i co weszło do Javy to elementy programowania funkcyjnego i raczej nie ma wielkiego związku z LINQ :) Jeśli dobrze rozumiem czym jest LINQ to jest tu jedna zasadnicza różnica. W LINQ mamy zbiór danych i możemy na nim operować tak jak SQLem
  • Odpowiedz