Codice dei programmi nella directory:
///File: OrdinaCarte.html
<html>
<head>
<script language="javascript">
/// By F. Sacco ult. modifica 7/2/2017
var j=1;
var carta1=-1;
var carta2=-1;
var carte = [0,1,2,3,4,5,6,7,8,9];
var scambi=0;
function random(N)
{
return parseInt(Math.random()*N)+1; // a caso fra 1 ed N
}
function shuffle(a) { /// Mischio il mazzo...
var j, x, i;
for (i = a.length; i; i--) {
j = Math.floor(Math.random() * i);
x = a[i - 1];
a[i - 1] = a[j];
a[j] = x;
}
}
function scambiacarte()
{
var dep="";
var app=carte[carta1]; carte[carta1]=carte[carta2]; carte[carta2]=app;
//alert("carta1->"+carta1+", carta2->"+carta2);
dep=document.images[carta1].src
document.images[carta1].src=document.images[carta2].src;
document.images[carta2].src=dep;
}
function insertcarta() /// inserisce carta1 nella pos carta2 e sposta a sinistra alcuni elementi (x insertsort)
{
var app;
if (carta2 > carta1) // carta2 DEVE stare a sx di carta1
{
app=carta1; carta1=carta2; carta2=app;
}
app=carte[carta1];
var dep=document.images[carta1].src;
for (i=carta1-1; i >= carta2; i--)
{
carte[i+1]=carte[i];
document.images[i+1].src=document.images[i].src;
}
carte[carta2]=app;
document.images[carta2].src=dep;
}
function ordinato()
{
var i,j=0;
if (carte[9]==0) /// il re vale 0
j++; /// re == 0
for (i=1; i < 9; i++)
if (carte[i] == (i+1)) j++;
if (j==9)
alert("Vettore di carte ordinato in " + scambi + " scambi/inserimenti!!!");
}
function evidenzia(i) /// fa vedere in giallo la parte ordinata delle carte al click...
/// Occorre un vettore di 10 Carte, riempito e disordinato o con shuffle
{
var x = document.getElementById("tabella").rows[0].cells;
x[i].innerHTML = " OK ";
}
function scambia(i)
/// Occorre un vettore di 10 Carte, riempito e disordinato o con shuffle
{
var dep="";
var app=0;
if (carta1==-1)
carta1=i;
else if (carta2==-1)
{
carta2=i;
scambiacarte();
carta1=-1;
carta2=-1;
scambi++;
document.sc.scambi.value=scambi;
}
ordinato();
}
function insert(i)
/// Occorre un vettore di 10 Carte, riempito e disordinato o con shuffle
{
var dep="";
var app=0;
///alert("Entrato in insert(i="+i+")");
if (carta1==-1)
carta1=i;
else if (carta2==-1)
{
carta2=i;
insertcarta();
carta1=-1;
carta2=-1;
scambi++;
document.sc.scambi.value=scambi;
}
ordinato();
}
function scopri(i)
{
document.images[i].src=random(10)+".bmp";
}
function disegna10carte()
{
var s;
s="<table border=2 id=tabella>";
var i,j,k;
k=0;
shuffle(carte);
for (i=0; i < 10; i++)
s+="<td OnClick=evidenzia("+ i + ")> " + "Fuori Posto" + " </td>";
s+="<tr>\n";
//s+="<table border=2>";
for (i=0; i < 10; i++)
{
//j=random(6);
s+="<td><img src=" + carte[i] +".bmp OnClick=scambia("+ i + ") ></td>\n";
//k++;
}
s+="<tr>\n";
for (i=0; i < 10; i++)
s+="<td OnClick=insert("+ i + ")> "+ i +" </td>";
s+="<tr>\n";
s+="</table>\n";
s+="<form name=sc>Numero scambi/inserimenti=<input type=button name=scambi value=0></form>";
///alert(s); // Per debug, metti pure in commento
document.write(s);
}
disegna10carte();
</script>
</head>
<body>
<h2>Programma Javascript per evidenziare algoritmi di ordinamento:
<br> 1) clicca su due carte per scambiarle (Bubble/Select Sort)<br>
2) clicca su due numeri (sotto le carte) per inserire carta in tabella e <br>
shift a destra delle carte a sinistra della scelta (Insert Sort)<br>
3) clicca su "FUORI POSTO" per metterci "OK" (carta in ordine)<br>
4) premi tasto funzione F5 per ripartire con mazzo disordinato..</h2>
</body>
</html>
///(Fine file: OrdinaCarte.html)