Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Najwększy wspólny dzielnik
Forum PHP.pl > Forum > Przedszkole
Jozjasz
Witam forumowiczów

Od dłuższego czasu głowię się nad skryptem z książki(słabo jest tam wyjaśniony), który działa, ale nie rozumiem dlaczego działa. Wygląda on tak:

  1. <?
  2. $a=32;
  3. $b=12;
  4. print ("Największy wspólny dzielnik liczby $a i $b to: ");
  5. while ($a != $b) //operator różności - true jesli $a i $b są różne
  6. {
  7. if ($a<$b)
  8. {
  9. $pom=$a; $a=$b; $b=$pom;
  10. }
  11. $a=$a-$b;
  12. }
  13. print ($a);
  14. ?>


Analizując drogę skryptu, to działa on tak: dopóki $a i $b są różne, to $a=$a-$b, ale w związku z instrukcją "if" - jesli $a jest mniejsze od $b to $a staje się równe $b (nie rozumiem po co tutaj zmienna pomocnicza $pom). Ale $a jest mniejsze od $b już w momencie gdy $a=8. Ponieważ działanie $a=$a-$b działa tak:

32-12=32
20-12=20
8-12=8

Zatem nie rozumiem dlaczego $a ma być kiedykolwiek równe 4... (nie widzę tego momentu)Czy ktoś mógłby mi jasno i szczegółowo wyjaśnić skąd ta 4, (która jest faktycznie NWD dla tych liczb) i gdzie zrobiłem błąd w mojej analizie tego skryptu ?

dzięki za odpowiedź
Berg
Pierwsze przejście pętli:

$a = 32;
$b = 12;

Warunek $a < $b nie jest spełniony

Po odejmowaniu $a = 20; $b= 12;


Drugie przejście pętli:

$a = 20;
$b = 12;


Warunek $a < $b nie jest spełniony

Po odejmowaniu $a = 8; $b= 12;

Trzecie przejście pętli:

$a = 8;
$b = 12;

Warunek $a < $b jest spełniony, następuje odwrócenie liczb $a = 12, $b = 8

Po odejmowaniu $a = 4, $b = 8

Czwarte przejście pętli:

$a = 4;
$b = 8;

Warunek $a < $b jest spełniony, następuje odwrócenie liczb $a = 8, $b =4


Po odejmowaniu $a = 4, $b = 4

Zakończenie pętli smile.gif

Cytat(Jozjasz @ 17.09.2009, 02:52:08 ) *
ale w związku z instrukcją "if" - jesli $a jest mniejsze od $b to $a staje się równe $b (nie rozumiem po co tutaj zmienna pomocnicza $pom).


Ten $pom ma na celu pomoc w odwróceniu liczb, gdyby zrobić to tylko tak
  1. $a = $b; $b = $a

to $a otrzyma wartość $b ale $b otrzyma znów swoją wartość zamiast wartości $a (ponieważ $a została wcześniej zmieniona). Do tego przydaje się zmienna $pom która czasowo przechowuje wartość $a aby mogła ona potem zostać prawidłowo zapisana do $b.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.