Skocz do zawartości

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

Matt91111

Znajdowanie największego wspólnego dzielnika

Rekomendowane odpowiedzi

Mam znaleźć największy wspólny dzielnik przy użyciu operatora modulo.

Naskrobałem coś takiego (konkretnie funkcja: "FindSharedDivUsingModulo($a, $b)"), tu nie wrzucam kodu bo i tak nie wyróżni tego co trzeba :E

https://pastebin.com/6C9rcR3p

 

Byłbym wdzięczny za sprawdzenie czy nie wkradł się tam jakiś błąd, w poprzedniej próbie implementacji niby działało, ale czasem pluło głupotami :E .

 

Ujemnych ani zmienno przecinkowych nie biorę pod uwagę.

 

Zestawy testowe:

//wywołania:
//porównawcze
FindSharedDiv(15, 5)
FindSharedDiv(40, 8)
FindSharedDiv(150, 25)
FindSharedDiv(30, 24)
FindSharedDiv(125, 3)
FindSharedDiv(7, 49)
FindSharedDiv(6, 36)
FindSharedDiv(30, 36)
FindSharedDiv(45, 40)
FindSharedDiv(45, 255)
FindSharedDiv(250, 825)
//moje
FindSharedDivUsingModulo(15, 5)
FindSharedDivUsingModulo(40, 8)
FindSharedDivUsingModulo(150, 25)
FindSharedDivUsingModulo(30, 24)
FindSharedDivUsingModulo(125, 3)
FindSharedDivUsingModulo(7, 49)
FindSharedDivUsingModulo(6, 36)
FindSharedDivUsingModulo(30, 36)
FindSharedDivUsingModulo(45, 40)
FindSharedDivUsingModulo(45, 255)
FindSharedDivUsingModulo(250, 825)

//wyniki:
$a == 5 //'FindSharedDiv (15, 5) result.'
--------------------------------------------------------------
$a == 8 //'FindSharedDiv (40, 8) result.'
--------------------------------------------------------------
$a == 25 //'FindSharedDiv (150, 25) result.'
--------------------------------------------------------------
$a == 6 //'FindSharedDiv (30, 24) result.'
--------------------------------------------------------------
$a == 1 //'FindSharedDiv (125, 3) result.'
--------------------------------------------------------------
$a == 7 //'FindSharedDiv (7, 49) result.'
--------------------------------------------------------------
$a == 6 //'FindSharedDiv (6, 36) result.'
--------------------------------------------------------------
$a == 6 //'FindSharedDiv (30, 36) result.'
--------------------------------------------------------------
$a == 5 //'FindSharedDiv (45, 40) result.'
--------------------------------------------------------------
$a == 15 //'FindSharedDiv (45, 255) result.'
--------------------------------------------------------------
$a == 25 //'FindSharedDiv (250, 825) result.'
--------------------------------------------------------------
$divider == 5 //'FindSharedDivUsingModulo (15, 5) result.'
--------------------------------------------------------------
$divider == 8 //'FindSharedDivUsingModulo (40, 8) result.'
--------------------------------------------------------------
$divider == 25 //'FindSharedDivUsingModulo (150, 25) result.'
--------------------------------------------------------------
$divider == 6 //'FindSharedDivUsingModulo (30, 24) result.'
--------------------------------------------------------------
$divider == 1 //'FindSharedDivUsingModulo (125, 3) result.'
--------------------------------------------------------------
$divider == 7 //'FindSharedDivUsingModulo (7, 49) result.'
--------------------------------------------------------------
$divider == 6 //'FindSharedDivUsingModulo (6, 36) result.'
--------------------------------------------------------------
$divider == 6 //'FindSharedDivUsingModulo (30, 36) result.'
--------------------------------------------------------------
$divider == 5 //'FindSharedDivUsingModulo (45, 40) result.'
--------------------------------------------------------------
$divider == 15 //'FindSharedDivUsingModulo (45, 255) result.'
--------------------------------------------------------------
$divider == 75 //'FindSharedDivUsingModulo (250, 825) result.'
--------------------------------------------------------------

 

Muszę prześledzić czemu dla FindSharedDiv(250, 825) wynik jest 25 :D

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ależ 250 dość słabo się dzieli przez 75.

Czyli jednak działa błędnie :E

 

Chyba mnie zbyt zaufanie do funkcji poniosło :E

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie wiem czy się rozumiemy.

 

Dostajesz chyba "reszty z dzielenia" w tej części poniżej, z tym że ta reszta nie może być równa zeru.

 

75 zapewne powstało jako 825-(3*250).

 

Edit: ale chyba jednak to zła idea, bo dla pary 45, 255 byłoby wtedy 30 albo "-15". Może ta funkcja zwraca moduł mniejszej reszty? Jak są możliwe dwie "reszty" (jedna dodatnia i jedna ujemna) to zwraca mniejszy moduł, przy czym nie może to być zero? Wtedy by to grało.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Sprawdź:

do; do while
       $ModResult = Mod($dividend, $divider)

       if($ModResult == 0) then ExitLoop; aka "break"
       $dividend = $divider
       $divider = $ModResult

   Until $divider == 1

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...