Il diagramma non mi pare corretto (ma posso sbagliarmi :master: )
comunque ecco la mia codicfica![]()
codice:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>Pagina senza titolo</title> <script language="javascript" type="text/javascript"> // <!CDATA[ function Button2_onclick() { var valore = 0; var totale = 0; var a = ""; //input a: valore esadecimale a = document.getElementById("Text1").value; n = a.length; //numero caratteri di a //considero tutti i caratteri di a partendo da quello più significativo (sinistra) for(var i = 0; i < n; i++) { //restituisce il carattere in corrispondenza dell'indice specificato var car = a.charAt(i); //trovo il valore per ogni carattere switch (car) { case "A": case "a": valore = 10; break; case "B": case "b": valore = 11; break; case "C": case "c": valore = 12; break; case "D": case "d": valore = 13; break; case "E": case "e": valore = 14; break; case "F": case "f": valore = 15; break; case "0":case "1":case "2":case "3":case "4":case "5":case "6":case "7":case "8":case "9": valore = parseInt(car, 10);//ricavo il valore esplicitando il formato decimale break; default: alert("Errore"); return; } var potenza = 1;//azzero potenza: l'elemento neutro per la moltiplicazione è 1 //moltiplico il valore per 16 partendo dalla posizione i corrente //sino ad arrivare al penultimo indice for(var ipot = i; ipot < n-1; ipot++) { potenza *= 16; } totale += valore * potenza; } //FINE: stampo totale document.getElementById("div1").innerHTML = totale; } // ]]> </script> </head> <body> <input id="Text1" type="text" value="AB4EF" /> <input id="Button2" type="button" value="button" onclick="return Button2_onclick()" /> <div id="div1"></div> </body> </html>
Pietro
Grazie mille, sei un genio!
Cmq può essere che il diagramma a blocchi è errato.
l'importante è che ci sei riuscito ugualmente.
Grazie
questa è una variante, forse più aderente al diagramma. Prova a sostituire e vedi se va
***
var potenza = 1;//azzero potenza: l'elemento neutro per la moltiplicazione è 1
//moltiplico il valore per 16 partendo dalla posizione i corrente
//sino ad arrivare al penultimo indice
for(var ipot = (n-1-i); ipot > 0; ipot--)
{
potenza *= 16;
}
***
Pietro
non prendermi per pedante, ma quel codice proprio non mi piace. Contrariamente a quello proposto dal diagramma, scansiono il numero da destra a sinistra
passo e chiudo.codice:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>Pagina senza titolo</title> <script language="javascript" type="text/javascript"> // <!CDATA[ function Button2_onclick() { var valore = 0; var totale = 0; var a = ""; var potenza = 1; //input a: valore esadecimale a = document.getElementById("Text1").value; n = a.length; //numero caratteri di a //considero tutti i caratteri di a partendo da quello meno significativo (destra) for(var i = n-1; i >= 0; i--) { //restituisce il carattere in corrispondenza dell'indice specificato var car = a.charAt(i); //trovo il valore per ogni carattere switch (car) { case "A": case "a": valore = 10; break; case "B": case "b": valore = 11; break; case "C": case "c": valore = 12; break; case "D": case "d": valore = 13; break; case "E": case "e": valore = 14; break; case "F": case "f": valore = 15; break; case "0":case "1":case "2":case "3":case "4":case "5":case "6":case "7":case "8":case "9": valore = parseInt(car, 10);//ricavo il valore esplicitando il formato decimale break; default: alert("Errore"); return; } //all'inizio, potenza è 1, perciò totale = valore totale += valore * potenza; //il prossimo valore più a sinistra sarà 16 volte più grande potenza *= 16; } //FINE: stampo totale document.getElementById("div1").innerHTML = totale; } // ]]> </script> </head> <body> <input id="Text1" type="text" value="AB4EF" /> <input id="Button2" type="button" value="button" onclick="return Button2_onclick()" /> <div id="div1"></div> </body> </html>
ps. se vuoi trasformare un binario in decimale, ricorda di moltiplicare potenza per 2 e non per 16![]()
Pietro
RI-Grazie.Originariamente inviato da pietro09
non prendermi per pedante, ma quel codice proprio non mi piace. Contrariamente a quello proposto dal diagramma, scansiono il numero da destra a sinistra
passo e chiudo.
ps. se vuoi trasformare un binario in decimale, ricorda di moltiplicare potenza per 2 e non per 16![]()
Senti.. siccome sappiamo benissimo entrambi che la codifica da te proposta non è perfettamente omogenea al diagramma a blocchi da me postato.. ti chiedevo che modifiche devo apportare al diagramma per renderlo perfettamente rispecchiabile alla codifica.
Le lettere vengono trasformate in numero utilizzando il costrutto if nel diagramma.. mentre nella codifica no.
Poi, se il diagramma a blocchi da me postato è inerente alla perfezione con la codifica da te proposta.. ti chiedo scusa e ammetto la mia totale ignoranza in materia.![]()
Nexus.
Gentilissimo Necsus, purtroppo non maneggio per niente i diagrammi a blocchiperciò spero nella collaborazione degli amici del forum che so che sono molto bravi.
![]()
Pietro