🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.javascript
6 messages
6 total messages Started by Czesiu Mon, 23 Nov 2009 18:23
Algorytm Euklidesa
#49533
Author: Czesiu
Date: Mon, 23 Nov 2009 18:23
15 lines
1556 bytes
 function NWD(m,n){
  for (; ;){
	r = m % n
	 if(r = 0){
	  document.write("NWD = " +n);
	  break;
	 }else{
	  m = n;
	  n = r;
	 }
	}
 }
Chciałbym się dowiedzieć co powoduje ,że ten skrypt się zapętla!
Jeżeli ktoś wie jak poprawnie napisać ten skrypt to prosiłbym o kod!
Z góry dziękuję
Re: Algorytm Euklidesa
#49534
Author: fronco
Date: Mon, 23 Nov 2009 21:38
13 lines
1093 bytes
> ... jak poprawnie napisać ten skrypt ...

function NWD(m,n){
	while (n != m){
		if(m > n){
			m = m - n;
		}
		else{
			n = n - m;
		}
	}
	document.write("NWD = " +m);
}
Re: Algorytm Euklidesa
#49535
Author: fronco
Date: Tue, 24 Nov 2009 10:41
29 lines
1431 bytes
Czesiu pisze:
>  function NWD(m,n){
>   for (; ;){
> 	r = m % n
> 	 if(r = 0){
> 	  document.write("NWD = " +n);
> 	  break;
> 	 }else{
> 	  m = n;
> 	  n = r;
> 	 }
> 	}
>  }
> Chciałbym się dowiedzieć co powoduje ,że ten skrypt się zapętla!
> Jeżeli ktoś wie jak poprawnie napisać ten skrypt to prosiłbym o kod!
> Z góry dziękuję

albo

function NWD(m,n){
	while (n != 0){
		r = m % n;
		m = n;
		n = r;
	}
	document.write("NWD = " +m);
}

brakuje warunku (n!=0) i sie zapętla
Re: Algorytm Euklidesa
#49537
Author: Vax
Date: Tue, 24 Nov 2009 12:23
40 lines
1950 bytes
Czesiu pisze:
>  function NWD(m,n){
>   for (; ;){
> 	r = m % n
> 	 if(r = 0){
> 	  document.write("NWD = " +n);
> 	  break;
> 	 }else{
> 	  m = n;
> 	  n = r;
> 	 }
> 	}
>  }
> Chciałbym się dowiedzieć co powoduje ,że ten skrypt się zapętla!
> Jeżeli ktoś wie jak poprawnie napisać ten skrypt to prosiłbym o kod!
> Z góry dziękuję

masz if(r=0) zamiast if(r==0)
PRZYPISANIE zamiast WARUNKU

I generalnie, to syf zrobiłeś.
1. Do pętli bezwarunkowych (z wyrwaniem się ze środka), to są
lepsze konstrukcje niż for(;;).
2. Gdzie się pchasz z outputem w logikę? Won z document.write,
użyj return (zważywszy na fakt, że pętla jest zadaniem funkcji,
załatwiłbyś problem break, choć są lepsze rozwiązania)
3. Gdzie lokalizacja r? To nie PHP więc wpływasz na zmienną
spoza funkcji.

jak już bardzo chcesz niebanalnie to np. coś takiego:
function NWD(m,n,r){
	for(r=n;n=r;r=m%n,m=n);return m
}
albo sprytną rekurencją.

a potem np. alert(NWD(15,6))


v.
PS. co mnie podkusiło, żeby po tylu latach tu zajrzeć... fuj.
Re: Algorytm Euklidesa
#49536
Author: Vax
Date: Tue, 24 Nov 2009 12:30
12 lines
1279 bytes
fronco pisze:

> brakuje warunku (n!=0) i sie zapętla

nie brakuje, bo jest r==0, a dokładniej miał być, gdyż brakuje
jednego '='. Częsta pomyłka.

Zapętla się, gdyż każde przypisanie w warunku automatycznie jest jego
wartością, zatem przypisanie 0 lub dowolnego logicznego ekwiwalentu
false czyni wyrażenie fałszem. Ten if(r=0) nigdy nie zaskoczy.

v.
Re: Algorytm Euklidesa
#49538
Author: Peter May
Date: Tue, 24 Nov 2009 12:39
8 lines
1146 bytes
Vax pisze:
[...]
> PS. co mnie podkusiło, żeby po tylu latach tu zajrzeć... fuj.

Ciekawość? ;-)

-- 
Peter
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads