[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 556.   JavaScript: esempi di programmazione

Questo capitolo raccoglie solo alcuni esempi di programmazione, in parte già descritti in altri capitoli. Lo scopo di questi esempi è solo didattico e riguarda aspetti generali, senza descrivere i problemi tipici per i quali viene usato normalmente il linguaggio JavaScript.

Questi esempi possono servire per chi intende studiare o insegnare l'uso di algoritmi comuni, usando per comodità o per necessità il linguaggio JavaScript.

Gli esempi vengono mostrati incorporati in file HTML. Si ricorda che tali file HTML non sono validi formalmente, a causa delle esigenze derivanti dall'utilizzo di JavaScript.

Si tenga in considerazione il fatto che in condizioni normali non si ha la disponibilità di un analizzatore sintattico del linguaggio JavaScript, pertanto la ricerca di errori banali di sintassi diventa problematica, dal momento che il navigatore comune si limita a non eseguire il programma che gli risulta non essere corretto. Anche per questa ragione non vengono mostrati esempi di una certa complessità.

556.1   Somma tra due numeri positivi

Il problema della somma tra due numeri positivi, attraverso l'incremento unitario, è descritto nella sezione 531.2.1.

Una copia di questo file dovrebbe essere disponibile presso <allegati/a2/js-somma.html>.

<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HTML//EN">
<HTML LANG="it">
<HEAD>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html">
    <TITLE>Somma tra due numeri interi</TITLE>
    <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
    <!--
        function somma (x, y)
        {
            var i;
            var z = x;
            //
            for (i = 1; i <= y; i++)
              {
                z++;
              }
            return z;
        }
        //
        function esegui () {
            var x = parseInt (document.modulo.x.value);
            var y = parseInt (document.modulo.y.value);
            var z;
            var risultato = "";
            z = somma (x, y);
            //
            risultato = risultato
                      + x
                      + "+"
                      + y
                      + "="
                      + z;
            alert (risultato);
        }
    //-->
    </SCRIPT>
</HEAD>
<BODY>
<H1>Somma tra due numeri interi</H1>

<FORM NAME="modulo" METHOD="get" ACTION="">
<P>
    x = <INPUT TYPE="TEXT" SIZE="30" NAME="x"><BR>
    y = <INPUT TYPE="TEXT" SIZE="30" NAME="y">
</P>
<P>
    <INPUT TYPE="button" VALUE="esegui" onClick="esegui()">
</P>
</FORM>

</BODY>
</HTML>

In alternativa si può tradurre il ciclo for in un ciclo while:

function somma (x, y)
{
    var z = x;
    var i = 1;
    //
    while (i <= y)
      {
        z++;
        i++;
      }
    return z;
}

556.2   Moltiplicazione di due numeri positivi attraverso la somma

Il problema della moltiplicazione tra due numeri positivi, attraverso la somma, è descritto nella sezione 531.2.2.

Una copia di questo file dovrebbe essere disponibile presso <allegati/a2/js-moltiplicazione.html>.

<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HTML//EN">
<HTML LANG="it">
<HEAD>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html">
    <TITLE>Moltiplicazione tra due numeri interi e positivi</TITLE>
    <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
    <!--
        function moltiplica (x, y)
        {
            var i;
            var z = 0;
            //
            for (i = 1; i <= y; i++)
              {
                z = z + x;
              }
            return z;
        }
        //
        function esegui ()
        {
            var x = parseInt (document.modulo.x.value);
            var y = parseInt (document.modulo.y.value);
            var z;
            var risultato = "";
            z = moltiplica (x, y);
            //
            risultato = risultato
                      + x
                      + "*"
                      + y
                      + "="
                      + z;
            alert (risultato);
        }
    //-->
    </SCRIPT>
</HEAD>
<BODY>
<H1>Moltiplicazione tra due numeri interi e positivi</H1>

<FORM NAME="modulo" METHOD="get" ACTION="">
<P>
    x = <INPUT TYPE="TEXT" SIZE="30" NAME="x"><BR>
    y = <INPUT TYPE="TEXT" SIZE="30" NAME="y">
</P>
<P>
    <INPUT TYPE="button" VALUE="esegui" onClick="esegui()">
</P>
</FORM>

</BODY>
</HTML>

In alternativa si può tradurre il ciclo for in un ciclo while:

function moltiplica (x, y)
{
    var z = 0;
    var i = 1;
    //
    while (i <= y)
      {
        z = z + x;
        i++;
      }
    return z;
}

556.3   Divisione intera tra due numeri positivi

Il problema della divisione tra due numeri positivi, attraverso la sottrazione, è descritto nella sezione 531.2.3.

Una copia di questo file dovrebbe essere disponibile presso <allegati/a2/js-divisione.html>.

<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HTML//EN">
<HTML LANG="it">
<HEAD>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html">
    <TITLE>Divisione intera tra due numeri interi e positivi</TITLE>
    <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
    <!--
        function dividi (x, y)
        {
            var z = 0;
            var i = x;
            //
            while (i >= y)
              {
                i = i - y;
                z++;
              }
            return z;
        }
        //
        function esegui ()
        {
            var x = parseInt (document.modulo.x.value);
            var y = parseInt (document.modulo.y.value);
            var z;
            var risultato = "";
            z = dividi (x, y);
            //
            risultato = risultato
                      + x
                      + "/"
                      + y
                      + "="
                      + z;
            alert (risultato);
        }
        //-->
        </SCRIPT>
</HEAD>
<BODY>
<H1>Divisione intera tra due numeri interi e positivi</H1>

<FORM NAME="modulo" METHOD="get" ACTION="">
<P>
    x = <INPUT TYPE="TEXT" SIZE="30" NAME="x"><BR>
    y = <INPUT TYPE="TEXT" SIZE="30" NAME="y">
</P>
<P>
    <INPUT TYPE="button" VALUE="esegui" onClick="esegui()">
</P>
</FORM>

</BODY>
</HTML>

556.4   Elevamento a potenza

Il problema dell'elevamento a potenza tra due numeri positivi, attraverso la moltiplicazione, è descritto nella sezione 531.2.4.

Una copia di questo file dovrebbe essere disponibile presso <allegati/a2/js-potenza.html>.

<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HTML//EN">
<HTML LANG="it">
<HEAD>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html">
    <TITLE>Elevamento a potenza di valori positivi interi</TITLE>
    <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
    <!--
        function exp (x, y)
        {
            var z = 1;
            var i;
            //
            for (i = 1; i <= y; i++)
              {
                z = z * x;
              }
            return z;
        }
        //
        function esegui ()
        {
            var x = parseInt (document.modulo.x.value);
            var y = parseInt (document.modulo.y.value);
            var z;
            var risultato = "";
            z = exp (x, y);
            //
            risultato = risultato
                      + x
                      + "^"
                      + y
                      + "="
                      + z;
            alert (risultato);
        }
        //-->
        </SCRIPT>
</HEAD>
<BODY>
<H1>Elevamento a potenza di valori positivi interi</H1>

<FORM NAME="modulo" METHOD="get" ACTION="">
<P>
    x = <INPUT TYPE="TEXT" SIZE="30" NAME="x"><BR>
    y = <INPUT TYPE="TEXT" SIZE="30" NAME="y">
</P>
<P>
    <INPUT TYPE="button" VALUE="esegui" onClick="esegui()">
</P>
</FORM>

</BODY>
</HTML>

In alternativa si può tradurre il ciclo for in un ciclo while:

function exp (x, y)
{
    var z = 1;
    var i = 1;
    //
    while (i <= y)
      {
        z = z * x;
        i++;
      }
    return z;
}

Infine, si può usare anche un algoritmo ricorsivo:

function exp (x, y)
{
    if (x == 0)
      {
        return 0;
      }
    else if (y == 0)
      {
        return 1;
      }
    else
      {
        return (x * exp (x, y-1));
      }
}

556.5   Radice quadrata

Il problema della radice quadrata è descritto nella sezione 531.2.5.

Una copia di questo file dovrebbe essere disponibile presso <allegati/a2/js-radice.html>.

<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HTML//EN">
<HTML LANG="it">
<HEAD>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html">
    <TITLE>Estrazione della parte intera della radice quadrata</TITLE>
    <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
    <!--
        function radice (x)
        {
            var z = 0;
            var t = 0;
            //
            while (true)
              {
                t = z * z;
                //
                if (t > x)
                  {
                    //
                    // È stato superato il valore massimo.
                    //
                    z--;
                    return z;
                  }
                z++;
              }
            //
            // Teoricamente, non dovrebbe mai arrivare qui.
            //
        }
        //
        function esegui ()
        {
            var x = parseInt (document.modulo.x.value);
            var z;
            var risultato = "";
            z = radice (x);
            //
            risultato = risultato
                      + "radq("
                      + x
                      + ")"
                      + "="
                      + z;
            alert (risultato);
        }
        //-->
        </SCRIPT>
</HEAD>
<BODY>
<H1>Estrazione della parte intera della radice quadrata</H1>

<FORM NAME="modulo" METHOD="get" ACTION="">
<P>
    x = <INPUT TYPE="TEXT" SIZE="30" NAME="x">
</P>
<P>
    <INPUT TYPE="button" VALUE="esegui" onClick="esegui()">
</P>
</FORM>

</BODY>
</HTML>

556.6   Fattoriale

Il problema del fattoriale è descritto nella sezione 531.2.6.

Una copia di questo file dovrebbe essere disponibile presso <allegati/a2/js-fattoriale.html>.

<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HTML//EN">
<HTML LANG="it">
<HEAD>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html">
    <TITLE>Calcola il fattoriale di un valore intero</TITLE>
    <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
    <!--
        function fattoriale (x)
        {
            var i = x - 1;
            //
            while (i > 0)
              {
                x = x * i;
                i--;
              }
            return x;
        }
        //
        function esegui ()
        {
            var x = parseInt (document.modulo.x.value);
            var z;
            var risultato = "";
            z = fattoriale (x);
            //
            risultato = risultato
                      + x
                      + "!"
                      + "="
                      + z;
            alert (risultato);
        }
        //-->
        </SCRIPT>
</HEAD>
<BODY>
<H1>Calcola il fattoriale di un valore intero</H1>

<FORM NAME="modulo" METHOD="get" ACTION="">
<P>
    x = <INPUT TYPE="TEXT" SIZE="30" NAME="x">
</P>
<P>
    <INPUT TYPE="button" VALUE="esegui" onClick="esegui()">
</P>
</FORM>

</BODY>
</HTML>

In alternativa, l'algoritmo si può tradurre in modo ricorsivo:

function fattoriale (x)
{
    if (x > 1)
      {
        return (x * fattoriale (x - 1));
      }
    else
      {
        return 1;
      }
    //
    // Teoricamente non dovrebbe arrivare qui.
    //
}

556.7   Massimo comune divisore

Il problema del massimo comune divisore, tra due numeri positivi, è descritto nella sezione 531.2.7.

Una copia di questo file dovrebbe essere disponibile presso <allegati/a2/js-mcd.html>.

<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HTML//EN">
<HTML LANG="it">
<HEAD>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html">
    <TITLE>Determina il massimo comune divisore tra due numeri interi
        positivi</TITLE>
    <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
    <!--
        function mcd (x, y)
        {
            var i;
            var z = 0;
            //
            while (x != y)
              {
                if (x > y)
                  {
                    x = x - y;
                  }
                else
                  {
                    y = y - x;
                  }
              }
            return x;
        }
        //
        function esegui ()
        {
            var x = parseInt (document.modulo.z.value);
            var y = parseInt (document.modulo.y.value);
            var z;
            var risultato = "";
            z = mcd (x, y);
            //
            risultato = risultato
                      + "mcd("
                      + x
                      + ", "
                      + y
                      + ")"
                      + "="
                      + z;
            alert (risultato);
        }
        //-->
        </SCRIPT>
</HEAD>
<BODY>
<H1>Determina il massimo comune divisore tra due numeri interi positivi</H1>

<FORM NAME="modulo" METHOD="get" ACTION="">
<P>
    x = <INPUT TYPE="TEXT" SIZE="30" NAME="x"><BR>
    y = <INPUT TYPE="TEXT" SIZE="30" NAME="y">
</P>
<P>
    <INPUT TYPE="button" VALUE="esegui" onClick="esegui()">
</P>
</FORM>

</BODY>
</HTML>

556.8   Numero primo

Il problema della determinazione se un numero sia primo o meno, è descritto nella sezione 531.2.8.

Una copia di questo file dovrebbe essere disponibile presso <allegati/a2/js-primo.html>.

<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HTML//EN">
<HTML LANG="it">
<HEAD>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html">
    <TITLE>Determina se un numero intero sia primo o meno</TITLE>
    <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
    <!--
        function primo (x)
        {
            var primo = true;
            var i = 2;
            var j;
            //
            while ((i < x) && primo)
            {
                j = x / i;
                j = Math.floor (j);
                j = x - (j * i);
                //
                if (j == 0)
                  {
                    primo = false;
                  }
                else
                  {
                    i++;
                  }
            }
            return primo;
        }
        //
        function esegui ()
        {
            var x = parseInt (document.modulo.x.value);
            var z;
            var risultato = "";
            z = primo (x);
            //
            if (z)
              {
                risultato = risultato
                      + x
                      + " è un numero primo!";
              }
            else
              {
                risultato = risultato
                      + x
                      + " non è un numero primo!";
              }
            alert (risultato);
        }
        //-->
        </SCRIPT>
</HEAD>
<BODY>
<H1>Determina se un numero intero sia primo o meno</H1>

<FORM NAME="modulo" METHOD="get" ACTION="">
<P>
    x = <INPUT TYPE="TEXT" SIZE="30" NAME="x">
</P>
<P>
    <INPUT TYPE="button" VALUE="esegui" onClick="esegui()">
</P>
</FORM>

</BODY>
</HTML>

556.9   Ricerca sequenziale

Il problema della ricerca sequenziale all'interno di un array, è descritto nella sezione 531.3.1.

Una copia di questo file dovrebbe essere disponibile presso <allegati/a2/js-ricercaseq.html>.

<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HTML//EN">
<HTML LANG="it">
<HEAD>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html">
    <TITLE>Ricerca sequenziale</TITLE>
    <SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
    <!--
        function ricercaseq (lista, x, a, z)
        {
            var i;
            //
            // Scandisce l'array alla ricerca dell'elemento.
            //
            for (i = a; i <= z; i++)
              {
                if (x == lista[i])
                  {
                    return i;
                  }
              }
            //
            // La corrispondenza non è stata trovata.
            //
            return -1;
        }
        function esegui ()
        {
            var a = new Array ();
            var z;
            var risultato = "";
            var x = document.modulo.x.value;
            //
            a[0] = document.modulo.a0.value;
            a[1] = document.modulo.a1.value;
            a[2] = document.modulo.a2.value;
            a[3] = document.modulo.a3.value;
            a[4] = document.modulo.a4.value;
            a[5] = document.modulo.a5.value;
            a[6] = document.modulo.a6.value;
            a[7] = document.modulo.a7.value;
            a[8] = document.modulo.a8.value;
            a[9] = document.modulo.a9.value;
            //
            z = ricercaseq (a, x, 0, (a.length-1));
            //
            risultato = x
                      + " si trova nella posizione "
                      + z
                      + ".";
            alert (risultato);
        }
        //-->
        </SCRIPT>
</HEAD>
<BODY>
<H1>Ricerca sequenziale</H1>

<FORM NAME="modulo" METHOD="get" ACTION="">
<P>
    x = <INPUT TYPE="TEXT" SIZE="30" NAME="x"><BR>
    a[0] = <INPUT TYPE="TEXT" SIZE="30" NAME="a0"><BR>
    a[1] = <INPUT TYPE="TEXT" SIZE="30" NAME="a1"><BR>
    a[2] = <INPUT TYPE="TEXT" SIZE="30" NAME="a2"><BR>
    a[3] = <INPUT TYPE="TEXT" SIZE="30" NAME="a3"><BR>
    a[4] = <INPUT TYPE="TEXT" SIZE="30" NAME="a4"><BR>
    a[5] = <INPUT TYPE="TEXT" SIZE="30" NAME="a5"><BR>
    a[6] = <INPUT TYPE="TEXT" SIZE="30" NAME="a6"><BR>
    a[7] = <INPUT TYPE="TEXT" SIZE="30" NAME="a7"><BR>
    a[8] = <INPUT TYPE="TEXT" SIZE="30" NAME="a8"><BR>
    a[9] = <INPUT TYPE="TEXT" SIZE="30" NAME="a9"><BR>
</P>
<P>
    <INPUT TYPE="button" VALUE="esegui" onClick="esegui()">
</P>
</FORM>

</BODY>
</HTML>

Esiste anche una soluzione ricorsiva che viene mostrata nella subroutine seguente:

function ricercaseq (lista, x, a, z)
{
    if (a > z)
      {
        //
        // La corrispondenza non è stata trovata.
        //
        return -1;
      }
    else if (x == lista[a])
      {
        return a;
      }
    else
      {
        return ricercaseq (lista, x, a+1, z);
      }
}

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome javascript_esempi_di_programmazione.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!