Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Necsus
    Registrato dal
    Oct 2006
    Messaggi
    87

    Da diagramma a blocchi a codifica.

    Salve, mi sono imbattuto in un grosso problema.
    Avendo davanti un diagramma a blocchi a mio parere molto complicato, non sono riuscito a tirar fuori da esso una corretta codifica in javascript che mi permette di convertire un numero da esadecimale a decimale.
    Voi sapreste aiutarmi?

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    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

  3. #3
    Utente di HTML.it L'avatar di Necsus
    Registrato dal
    Oct 2006
    Messaggi
    87
    Grazie mille, sei un genio!
    Cmq può essere che il diagramma a blocchi è errato.
    l'importante è che ci sei riuscito ugualmente.
    Grazie

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    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

  5. #5
    Utente di HTML.it L'avatar di Necsus
    Registrato dal
    Oct 2006
    Messaggi
    87
    Sì, funziona.. ti ringrazio molto.

  6. #6
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    non prendermi per pedante, ma quel codice proprio non mi piace. Contrariamente a quello proposto dal diagramma, scansiono il numero da destra a sinistra
    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>
    passo e chiudo.


    ps. se vuoi trasformare un binario in decimale, ricorda di moltiplicare potenza per 2 e non per 16
    Pietro

  7. #7
    Utente di HTML.it L'avatar di Necsus
    Registrato dal
    Oct 2006
    Messaggi
    87
    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
    RI-Grazie.
    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.

  8. #8
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Gentilissimo Necsus, purtroppo non maneggio per niente i diagrammi a blocchi perciò spero nella collaborazione degli amici del forum che so che sono molto bravi.
    Pietro

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.