Articolo dedicato alla traduzione in HTML e PHP dell'algoritmo per la conversione da binario a decimale;

lo script PHP deve essere in grado di rilevare eventuali errori sintattici nella stringa immessa in input, cioè deve controllare che nella stringa immessa ci siano solo il carattere 0 e il carattere 1.

Risorse collegate

 

Per un più approfondito commento  di tale argomento, puoi scaricare qui il PDF

Se ti interessa  il video della codifica in HTML+PHP

Scriveremo due file il primo sarà un file HTML che realizzerà un form per l'immissione del numero binario, il secondo sarà uno script PHP che effettuerà i controlli sintattici ed eventualmente convertire il numero binario in decimale.

Questo è il form:

<html>
<head>
	<title>Conversione da binario a decimale</title>
	<link href="/stile.css"  rel='stylesheet' type='text/css'>	
</head>

<body>
	<h1>Conversione da binario a decimale</h1>

	<form name='binario' method='POST' action="convertib2d.php">
		<!-- aggiungo una casella di testo -->
		inserire un numero binario <input type='text' name='numbin' size='25'><br><br>

		<!-- aggiungo i bottoni per l'invio o per azzerare i campi -->
		<input type='submit' value='converti'><input type='reset' value='cancella'>
	</form>
</body>

</html>

Due cose sono interessanti in questo frammento di HTML:

  • linea 10: Il nome dello script PHP che deve essere richiamato quando viene premuto il tasto submit  (nel nostro caso è convertib2d.php,  che va impostato nell'attributo action del tag form
  • linea 10: il metodo utilizzato per inviare i dati allo script (POST)
  • linea 12: Il nome della casella di testo (nel nostro caso numbin) che consentirà allo script PHP di recuperare il dato immesso nella stessa casella.

Di seguito l'altro file,  lo script convertib2d.php:

<?php
//recupero dei dati immessi 
$binario=$_POST['numbin'];
//calcola la lunghezza della stringa immessa   
$l=strlen($binario);

//controllo che nella stringa ci siano solo 0 e 1

$numeroerrori=0; // contatore di errori
$output=''; // buffer il cui contenuto sarà inviato al browser
for($k=0;$k<$l;$k++){
	//estraggo il singolo carattere 
	$carattere=substr($binario,$k,1);
	if($carattere!='0' && $carattere!='1'){
		$numeroerrori++;
		$output.="carattere non valido in posizione $k <br>";
	}
}
if($numeroerrori>0){
	$output="la stringa immessa non e' valida:rilevati $numeroerrori errori<br> $output";
}else{
	$output="la stringa e' valida<br>";
	
	$decimale=0;
	for($k=0;$k<$l;$k++){
		//estraggo il singolo carattere 
		$carattere=substr($binario,$k,1);
		$decimale=$decimale*2+$carattere;
	}
	$output.="il numero binario $binario in decimale si scrive $decimale";
}

echo$output;
?>

Spiegazione dello script:

  • Si comincia con il recupero dei dati immessi nel form ($binario=$_POST['numbin'];) (linea 3) e si calcola una volta per tutte la lunghezza della stringa immessa  ($l=strlen($binario);) (linea 5)
  • Il passo successivo prevede la scansione (linee 11-18) della stringa immessa per verificare se ciascun carattere è valido, cioè se è uno '0' oppure un '1' : in caso contrario viene incrementato un contatore di errori ($numeroerrori)  (linea 15) e contestualmente viene predisposto un messaggio di errore che recita "carattere non valido in posizione $k". Notare l'operatore di concatenazione fra stringhe (punto davanti al simbolo '=' ).
  • Il singolo carattere viene estratto alla linea 13 usando la funzione substr alla quale bisogna fornire in input ordinatamente la stringa da cui estrarre, la posizione da cui partire per l'estrazione e la lunghezza della sottostringa da estrarre; nel nostro caso la posizione viene indicata dal valore della variabile $k che scorre da 0 fino alla lunghezza della stringa, mentre la lunghezza della sottostringa da estrarre è 1: l'effetto finale è quello di scandire la stringa iniziale ed estrarre di volta in volta un carattere.
  • Alla fine della scansione si controlla il numero degli errori  (linea 19) e se esso è maggiore di zero viene emesso un messaggio di errore e lo script termina la propria esecuzione con la linea 33 con l'istruzione echo $buffer;. Se invece il numero degli errori è uguale a zero,  la stringa è valida e quindi si può procedere con la conversione:
    • Per la conversione è stato utilizzato l'algoritmo di KRONECKER; si incomincia con impostare una variabile chiamata decimale a zero (linea 24).
    • poi viene eseguita una scansione della stringa da sinistra verso destra (linee 25-29) per esaminare ciascun carattere: in ciascun ciclo, il contenuto della variabile decimale viene moltiplicato per la base del sistema di numerazione di partenza (nel nostro caso 2) e al risultato viene aggiunto il valore del carattere che si sta esaminando (linea 28). Quando avremo finito la scansione nella variabile decimale ci sarà il risultato della conversione da binario che sarà emesso con la linea 33.