Thread View: pl.comp.lang.javascript
6 messages
6 total messages
Started by Czesiu
Mon, 23 Nov 2009 18:23
Algorytm Euklidesa
Author: Czesiu
Date: Mon, 23 Nov 2009 18:23
Date: Mon, 23 Nov 2009 18:23
15 lines
1556 bytes
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
Author: fronco
Date: Mon, 23 Nov 2009 21:38
Date: Mon, 23 Nov 2009 21:38
13 lines
1093 bytes
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
Author: fronco
Date: Tue, 24 Nov 2009 10:41
Date: Tue, 24 Nov 2009 10:41
29 lines
1431 bytes
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
Author: Vax
Date: Tue, 24 Nov 2009 12:23
Date: Tue, 24 Nov 2009 12:23
40 lines
1950 bytes
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
Author: Vax
Date: Tue, 24 Nov 2009 12:30
Date: Tue, 24 Nov 2009 12:30
12 lines
1279 bytes
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
Author: Peter May
Date: Tue, 24 Nov 2009 12:39
Date: Tue, 24 Nov 2009 12:39
8 lines
1146 bytes
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