ESERCITAZIONE SULL' WHILE - ASP/PHP
 
ESERCIZIO 1 (WHILE)

Costruire una breve applicazione che legge da un form un numero N e ne restituisca la sua fattorizzazione. Esempio 18=2*3*3

Numero: N

<form name=dati action=while1.php method=POST>
<input type=text size=4 maxlength=4 NAME=N> N<br>
<input type=submit value="Fattorizza N">
 
Espandi/Nascondi Accessi Soluzione PHP Soluzione ASP
  <?php
$Corretto=MS_IsInt($_POST["N"]);
if ($Corretto)
   $N=$_POST["N"];
else
   die("<H1>N deve essere un numero intero</H1>");


$tmp_N=abs($N);
$d=2;
$fatt="";
while ($tmp_N>=$d)
   if (($tmp_N % $d)==0)
      {
         $fatt=$fatt . ($fatt=="" ? "" : "*") . $d;
         $tmp_N=$tmp_N / $d;
      }
   else
       d++;
if ($fatt=="")
   echo $N . "=1";
else
   echo $N . "=" . ($N<0 ? "-" : "") . $fatt;

function MS_IsInt($x)
{
   return ( is_numeric($x ) ? intval(0+$x )==$x : false );
}
?>
 

ESERCIZIO 2 (WHILE)

Costruire una pagina HTML che legga due numeri X e Y e restituisca il minimo comune multiplo tra i due. (suggerimento: il mcm è pari al prodotto dei numeri primi presenti in entrambe le fattorizzazioni di x e di y)

Numeri: X Y

<form name=dati action=while2.asp/php method=POST>
<input type=text name=X size=4 maxlength=4> X
<input type=text name=Y size=4 maxlength=4> Y<br>
<input type=submit value="Calcola il minimo comune multiplo tra X e Y"></form>
 
Espandi/Nascondi Accessi Soluzione PHP Soluzione ASP
  <?php
$Corretto=MS_IsIntPos($_POST["X"]);
$Corretto=$Corretto && MS_IsIntPos($_POST["Y"]);

if ($Corretto)
{
   $X=$_POST["X"];
   $Y=$_POST["Y"];
}
else
   die("<H1>X e Y devono essere interi positivi</H1>");

$tmp_X=$X;
$tmp_Y=$Y;
$mcm=1;
$d=2;
while ( ($d<=$tmp_X) || ($d<=$tmp_Y) )
   if ( (($tmp_Y % $d)==0) || (($tmp_X % $d)==0) )
      {
         if ( ($tmp_Y % $d)==0 )
            $tmp_Y=$tmp_Y / $d;
         if ( ($tmp_X % $d)==0 )
            $tmp_X=$tmp_X / $d;
         $mcm=$mcm*$d;
      }
   else
      $d++;

echo "Il minimo comune multiplo tra $X e $Y è: $mcm";

function MS_IsIntPos($x)
{
    $EInt=( is_numeric($x) ? intval(0+$x)==$x : false);
    if ($EInt)
       return ($x>0);
    return false;
}
?>
 

ESERCIZIO 3 (WHILE)

Costruire una pagina HTML che legga due numeri X e Y e restituisca il massimo comune divisore tra i due. (suggerimento: il MCD è pari al prodotto dei numeri primi presenti in entrambe le fattorizzazioni di x e di y)

Numero: X Y

<form name=dati action=eser3.asp/php method=POST>
<input type=text name=X size=4 maxlength=4> X
<input type=text name=Y size=4 maxlength=4> Y<br>
<input type=submit value="Calcola il massimo comune divisore tra X e Y"></form>
 
Espandi/Nascondi Accessi Soluzione PHP Soluzione ASP
  <?php
$Corretto=MS_IsIntPos($_POST["X"]);
$Corretto=$Corretto && MS_IsIntPos($_POST["Y"]);

if ($Corretto)
{
   $X=$_POST["X"];
   $Y=$_POST["Y"];
}
else
   die("<H1>X e Y devono essere numeri interi</H1>");

$tmp_X=$X;
$tmp_Y=$Y;
$MCD=1;
$d=2;
while ( ($d<=$tmp_X) || ($d<=$tmp_Y) )
{
   if ( (($tmp_Y % $d)==0) && (($tmp_X % $d)==0) )
      $MCD=$MCD*$d;
   if ( ($tmp_Y % $d)==0 )
      $tmp_Y=$tmp_Y / $d;
   if ( ($tmp_X % $d)==0 )
      $tmp_X=$tmp_X / $d;
   if (!( (($tmp_Y % $d)==0) || (($tmp_X % $d)==0) ))
      $d++;
}

echo "Il Massimo Comune Divisore tra $X e $Y è: $MCD";

function MS_IsIntPos($x)
{
   $EInt=( is_numeric($x) ? intval(0+$x)==$x : false);
   if ($EInt)
      return ($x>0);
   return false;
}
?>
 

ESERCIZIO 4 (WHILE)

Costruire una pagina HTML che legga un numero N e calcoli il numero M per cui vale la relazione: (M-1)! <=N <M! dove M! indica il fattoriale di M ovvero M!=1*2*3*...*(M-1)*M

Numero: N

<form name=dati action=eser4.asp/php method=POST>
<input type=text name=N size=5 maxlength=5> N<br>
<input type=submit value="Calcolo M per cui ho (M-1)!<=N<M!"></form>

ESERCIZIO 5 (WHILE)

Costruire una breve applicazione che data una stringa S elimini tutte le ripetizioni dello stesso simbolo consecutive. Esempio se S="AAbbbbbaAAAbbb" dovrà essere visualizzato "AbaAb"

Stringa: S

<form name=dati action=eser10.asp/php method=POST>
<input type=text name=S size=30 maxlength=90> S<br>
<input type=submit value="Elimina le ripetizioni da S"></form>
 
ESERCIZIO 6 (WHILE)

Costruire una breve applicazione che genera una sequenza casuale di numeri compresi tra 0 e 99 (la sequenza termina quando viene generato il numero zero) e restituisca la statistica richiesta.

Statistica:

<form name=dati action=eser1.asp/php method=POST>
STATISTICA:<select name=Statistica><option value="Min" selected>Minimo<option value="Max">Massimo<option value="Sum">Somma<option value="Avg">Media</select><BR>
<input type=submit value="Statistica della sequenza casuale"></form>
 
Espandi/Nascondi Accessi Soluzione PHP Soluzione ASP
  <?php
$Statistica=$_POST["STATISTICA"];
$x=rand(0,99);
$Minimo=$x;
$Massimo=$x;
$Somma=0;
$Nr=0;
while ($x!=0)
{
   if ($Minimo> $x)
      $Minimo=$x;
   if ($Massimo< $x)
      $Massimo=$x;
   $Somma+=$x;
   $x=rand(0,99);
   if ($x>0)
      $Nr++;
}

if ($Nr>0)
{
   if ($Statistica=="Min")
      echo "Il minimo della sequenza è: " . $Minimo;
   elseif ($Statistica=="Max")
      echo "Il massimo della sequenza è: " . $Massimo;
   elseif ($Statistica=="Sum")
      {
          $s=number_format($Somma, 0, '', '.');
          echo "La somma dei valori della sequenza è: " . $s;
      }
   elseif ($Statistica=="Avg")
      {
          $s=number_format($Somma/$Nr, 2, ',', '.');
          echo "La media della sequenza è: " . $s;
      }
}
else
    echo "Non ho numeri per calcolare la statistica richiesta";
?>
 

ESERCIZIO 7 (WHILE)

Costruire una breve applicazione che generi una sequenza casuale di numeri compresi tra 0 e 99 (la sequenza termina quando viene generato il numero zero) e la visualizzi con a fianco di ogni numero lo scostamento del singolo valore rispetto alla media di tutti i valori generati.

<form name=dati action=eser7.asp/php method=POST>
<input type=submit value="Sequenza numeri con a fianco lo scostamento dalla media"></form>

ESERCIZIO 8 (WHILE)

Costruire una breve applicazione che generi una sequenza casuale di numeri compresi tra 0 e 99 (la sequenza termina quando viene generato il numero zero) e la visualizzi priva di ripetizioni (ovvero non devono apparire duplicati dello stesso numero) con a fianco il nr. di ripetizioni.

<form name=dati action=eser1.asp/php method=POST>
<input type=submit value="Sequenza di numeri con scostamento dalla media"></form>
 
Espandi/Nascondi Accessi Soluzione PHP Soluzione ASP
  <?php
for ($i=0; $i <=99 ; $i++)
   $Conto[$i]=0;

do
{
   $x=rand(0,99);
   if ($x!=0)
      $Conto[$x]++;
} while ($x!=0);

while (list($numero, $uscite) = each($Conto))
if ($uscite>0)
    echo "Il numero " . $numero . " è uscito: " . $uscite . "<BR>";
?>
 

ESERCIZIO 9 (WHILE)

Costruire una breve applicazione che generi una sequenza casuale di numeri compresi tra 0 e 99 (la sequenza termina quando viene il numero zero) e la visualizzi ordinata secondo la richiesta nel form

Ordinamento:

<form name=dati action=while9.asp/php method=POST>
Ordinamento: <select name=ORDINAMENTO><option value="C" selected>Crescente<option value="D">Decrescente</select><br>
<input type=submit value="Crea una sequenza ordinata di numeri"></form>

Espandi/Nascondi Accessi Soluzione PHP Soluzione ASP
  <?php
$Ordinamento=$_POST["ORDINAMENTO"];
$Nr=1;
do
{
   $x=rand(0,99);
   if ($x!=0)
      {
         $Valori[$Nr]=$x;
         $Nr++;
      }
}
while ($x!=0);

if ($Ordinamento=="C")
   sort($Valori);
else
   rsort($Valori);

for ($i=1; $i <=$Nr ; $i++)
   echo $Valori[$i] . "<BR>";
?>
 

ESERCIZIO 10 (WHILE)

Costruire una breve applicazione che generi una sequenza di valori tra 0 e 100 (terminata con zero). I valori estratti devono essere evidenziati in una tabella 10x10 mediante una colorazione differente rispetto a quelli non estratti.

Espandi/Nascondi Accessi Soluzione PHP Soluzione ASP
  <?php
for ($r=1; $r <=10 ; $r++)
   for ($c=1; $c <=10 ; $c++)
      $tabella[$r][$c]="#FFFFFF";

do
{
    $x=rand(0,100);
    if ($x!=0)
       {
          $c=( ($x % 10)==0 ? 10 : ($x % 10) );
          $r=( ($x % 10)==0 ? ($x-($x % 10)) / 10 : ($x-($x % 10)) / 10 + 1 );
          $tabella[$r][$c]="#C4E1FF";
       }
} while ($x!=0);

echo "<TABLE BORDER=1 width=300 height=300>";
for ($r=1; $r <=10 ; $r++)
{
    echo "<TR>";
    for ($c=1; $c <=10 ; $c++)
       {
           $s="<TD BGCOLOR=" . $tabella[$r][$c];
           $s=$s . " VALIGN=MIDDLE ALIGN=CENTER>";
           $s=$s . ($r-1) . ($c-1) . "</TD>";
           echo $s;
       }
    echo "</TR>";
}
echo "</TABLE>";
?>