School-HTML/3AIN/Esercizi TPS JavaScript Misti/ConversioneDecimaleBinario....

98 lines
4.8 KiB
HTML

<html>
<!--
Nome: Mario
Cognome: Montanari
Classe: 3AIN
-->
<head>
<link rel="icon" href="itisnullobaldiniravenna.jpg" />
<link rel="stylesheet" href="styleConversioneDecimaleBinario.css" />
<title>Conversione da decimale a binario</title>
</head>
<body>
<h1>Numero in Base 10:</h1>
<input type="text" id="numeroDecimale" placeholder="Inserisci un numero decimale tra 0 e 255"/></br>
<label for="C2">Complemento a 2</label>
<input type="checkbox" id="C2" onchange="aggiornaPlaceholder()" /></br>
<button onclick="conversioneBinario()">Converti in Base 2</button></br></br>
<input id="numeroBinario" disabled />
<script>
// FUNZIONE CHE CONTROLLA LO STATO DEL CHECK
function testCheck() {
if (document.getElementById("C2").checked) {
document.getElementById("numeroBinario").innerHTML = "SI";
} else {
document.getElementById("numeroBinario").innerHTML = "NO";
}
}
// FUNZIONE CHE AGGIORNA IL PLACEHOLDER DELL'INPUT IN BASE ALLO STATO DEL CHECK
function aggiornaPlaceholder() {
if (document.getElementById("C2").checked) { // SE VIENE CLICCATO IL CHECKBOX
document.getElementById("numeroDecimale").placeholder = "Inserisci un numero decimale tra -128 e 127" // IL PLACEHOLDER DELLA BARRA DI INPUT CAMBIA
} else { // ALTRIMENTI, SE NON VIENE CLICCATO IL CHECKBOX
document.getElementById("numeroDecimale").placeholder = "Inserisci un numero decimale tra 0 e 255"; // RIMANE IL PLACEHOLDER ORIGINALE DELLA BARRA DI INPUT
}
}
// FUNZIONE CHE CALCOLA IL NUMERO IN BASE BINARIA
function conversioneBinario() {
let numeroDecimale = document.getElementById("numeroDecimale").value; // INIZIALIZZAZIONE DELLA VARIBILE numeroDecimale(.value perché prende il valore da un tag <input>)
let numeroBinario = ""; // INIZIALIZZAZIONE DELLA VARIABILE numeroBinario (stringa vuota)
if (numeroDecimale !== "") { // SE VIENE IMMESSO UN NUMERO (e periò non è una stringa vuota)
if (document.getElementById("C2").checked) { // SE IL CHECKBOX VIENE CLICCATO
if (numeroDecimale >= -128 && numeroDecimale <= 127) { // E SE IL NUMERO IMMESSO E' COMPRESO TRA -128 E 127
if (numeroDecimale < "0") { // SE IL NUMERO IMMESSO E' MINORE DI 0
numeroDecimale = 256 + Number(numeroDecimale); // AGGIUNGO 256 (2 elavato alla 8) AL VALORE DECIMALE NEGATIVO, essendo che dobbiamo rappresentare numeri binari in 8 bit
}
// POI CONVERTI IL NUMERO DECIMALE IN BINARIO
while (numeroDecimale > "0") {
numeroBinario = (numeroDecimale % 2) + numeroBinario; // PRENDO IL RESTO DELLA DIVISIONE PER 2 DEL NUMERO DECIMALE IMMESSO (che sarà 0 o 1) E LO AGGIUNGO ALL'INIZIO DELLA STGINGA numeroBinario
numeroDecimale = Math.floor(numeroDecimale / 2); // DIVIDO PER DUE IL NUMERO DECIMALE IMMESSO E LO ARROTONDO SEMPRE PER DIFETTO
}
numeroBinario = numeroBinario.padStart(8, "0"); // RITORNO IL numeroBinario E AGGIUNGO DEGLI 0 ALLA STRINGA numeroBinario
} else { // ALTRIMENTI, SE IL NUMERO SFORA L'INTERVALLO -128 - 127
window.alert("Numero non valido! Inserisci un numero compreso tra -128 e 127."); // MOSTRA UNA FINESTRA DI ALLERTA
}
} else { // SE IL CHECKBOX NON VIENE CLICCATO
if (numeroDecimale >= 0 && numeroDecimale <= 255) { // E SE IL NUMERO IMMESSO E' COMPRESO TRA 0 E 255
if (numeroDecimale === 0) { // SE IL NUMERO IMMESSO E' UGUALE A 0
numeroBinario = "0"; // ALLORA RITORNA COME numeroBinario IL NUMERO 0
} else { // ALTRIMENTI, SE IL NUMERO IMMESSO E' COMPRESO NELL'INTERVALLO 0 - 255, MA NON E' UGUALE A 0
// CONVERTI IL NUMERO DECIMALE NEGATIVO IN BINARIO
while (numeroDecimale > 0) {
numeroBinario = (numeroDecimale % 2) + numeroBinario; // PRENDO IL RESTO DELLA DIVISIONE PER 2 DEL NUMERO DECIMALE IMMESSO (che sarà 0 o 1) E LO AGGIUNGO ALL'INIZIO DELLA STGINGA numeroBinario
numeroDecimale = Math.floor(numeroDecimale / 2); // DIVIDO PER DUE IL NUMERO DECIMALE IMMESSO E LO ARROTONDO SEMPRE PER DIFETTO
}
}
numeroBinario = numeroBinario.padStart(8, "0"); // RITORNO IL numeroBinario E AGGIUNGO DEGLI 0 ALLA STRINGA numeroBinario
} else { // SE IL NUMERO IMMESSO SFORA L'INTERVALLO 0 - 255
window.alert("Numero non valido! Inserisci un numero compreso tra 0 e 255."); // MOSTRA UNA FINESTRA DI ALLERTA
}
}
} else if (numeroDecimale === "") { // ALTRIMENTI, SE NON VIENE IMMESSO NESSUN NUMERO (e periò è una stringa vuota)
window.alert("Inserisci un numero!"); // MOSTRA UNA FINESTRA DI ALLERTA
}
document.getElementById("numeroBinario").value = numeroBinario; // RITORNA IN OUTPUT IN RISULTATO DEL NUMERO BINARIO (.value perché prende il valore da un tag <input>)
}
</script>
</body>
</html>