Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pętla for...mały problem
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
slawek_master
mam pytanko odnosnie

Kod
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-2">
<meta>
<title></title>


<script LANGUAGE="JavaScript">
<!--

function potega()
  {
   var wynik = 2;
   l = parseInt(document.forms["matma"].podstawa.value);
   w = parseInt(document.forms["matma"].wykladnik.value);
   for (i = 2; i <= w; i++)
    {
     wynik *= l;
    }
   window.alert("Wynik to: " + wynik);
  }


//-->
</SCRIPT>


<BODY>

<FORM name="matma">
<INPUT TYPE="text" VALUE=2 SIZE=2 name="podstawa"> do potęgi
<INPUT TYPE="text" VALUE=3 SIZE=2 name="wykladnik">
<INPUT TYPE="button" VALUE="Oblicz" onClick="potega()">
</FORM>
</body>
</html>


nie wiem na jakiej zasadzie dziala



Kod
...
  {
     wynik *= l;
    }
...



i ogolnie mozecie caly script opisac dla pewnosci:) z gory dzieki za wszelka pomoc
ikioloak
Poczytaj o operatorach arytmeczynych w js: http://www.w3schools.com/js/js_operators.asp
i w ogole przydaloby ci sie poczytac cos o javascripcie skoro nie rozumiesz podanego przez ciebie kodu.
ArturS
Kod
function potega()
{
  var wynik = 2;
  l = parseInt(document.forms["matma"].podstawa.value);  //l (czyt. małe L, a nie jeden) przyjmuje wartość z podanego formularza
  w = parseInt(document.forms["matma"].wykladnik.value);    //w przyjmuje wartość z podanego formularza
  for (i = 2; i <= w; i++)      //pętla zaczyna się od i=2 bo jeśli podniesiemy do pot. pierwszej to poco mnożyć?
   {        // i kręci się aż nie będzie większe od zmiennej "w" (wykładnik potęgi)
    wynik *= l;      // wynik = wynik * l (czyt. małe "L" a nie 1 (jeden)
   }
  window.alert("Wynik to: " + wynik); //komunikat z wynikiem
}


Przyjmijmy więc, że podstawa to 2, czyli l (małe L) = 2, a wykładnik potęgi to 3 czyli w=3
więc pętla będzie wyglądała tak
Kod
  for (i = 2; i <= 3; i++)

czyli w pierwszym przejściu
Kod

wynik *= 2    //czyli wynik = 2 * 2 = 4
  i = i+1 = 3

drugie przejście
Kod
wynik *= 2   //czyli wynik = 4 * 2 = 8
i = i+1 = 4

trzeciego przejścia już nie będzie bo i<=3, a i=4, czyli FALSE

tyle guitar.gif

Podejżewam, że niezrozumienie kodu wynikło z pomyłki małej litery L z jedynką, co i mnie na początku zmyliło (czasami przemnażam coś przez 1 żeby JS nie dodawał liczb do siebie jak znaków w stringu, ale jak liczby).


Jeszcze pozwoliłem sobie przeedytować odpowiedź. winksmiley.jpg

W takiej funkcji jak powyższa można bez problemu wykorzystać rekurencję, co będzie wyglądało następująco:
Kod
function potega(liczba, do_potegi) {
  return ((do_potegi == 0)? 1:(liczba * potega (liczba, do_potegi - 1)));
}


i w tym wypadku jej wywołanie znaleźć by się mogło wewnątrz funkcji alert:
Kod
<INPUT TYPE="button" VALUE="Oblicz" onClick="window.alert('Wynik to: '+ potega(parseInt(document.forms['matma'].podstawa.value), parseInt(document.forms['matma'].wykladnik.value)))">


smile.gif



prosze używać bbcode
poprawiam
(to juz drugie upomnienie z mej strony w tej kwestii...)
---
nospor
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.