Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Najwększy wspólny dzielnik, NWD w pętli while
Jozjasz
post
Post #1





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 11.09.2009

Ostrzeżenie: (0%)
-----


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ź

Ten post edytował Jozjasz 17.09.2009, 01:53:11
Go to the top of the page
+Quote Post
Berg
post
Post #2





Grupa: Zarejestrowani
Postów: 180
Pomógł: 37
Dołączył: 1.05.2008
Skąd: Białystok

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/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.

Ten post edytował Berg 17.09.2009, 02:20:31
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.09.2025 - 02:12