Autore Topic: [Risolto] Convertire un numero Binario in decimale  (Letto 909 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
[Risolto] Convertire un numero Binario in decimale
« il: 19 Novembre 2011, 05:29:54 »
C'è una funzione o un algoritmo breve per ottenere la conversione di un numero binario in decimale ?

Io per ora mi sono dovuto intentare 'sto accrocco:   :specchio:

Codice: gambas [Seleziona]

' Gambas class file

Private c[32] As Integer


PUBLIC SUB Button1_Click()

Dim b, e As Integer
Dim a As String
Dim d As Integer = 1


a = InputBox("Immetti un numero binario:")

If a = Null Then Return

For b = Len(a) To 1 Step -1

  If b = Len(a) Then
    Select Case Right$(a, 1)
      Case 1
        c[b] = 1
        d = 1
      Case 0
        c[b] = 0
    End Select
    
      Else
        d = d * 2


        If Mid$(a, b, 1) = 1 Then
          c[b] = d
            Else
              c[b] = 0
        Endif
  Endif


 e = e + c[b]

Next

Print "Corrisponde al numero:"
Print " - decimale: " & e
Print " - esadecimale: "; Hex$(Str(e))
      
END


 :rolleyes:
« Ultima modifica: 13 Dicembre 2012, 16:33:38 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Convertire un numero Binario in decimale
« Risposta #1 il: 19 Novembre 2011, 23:15:21 »
Bel quesito!
Guardando il codice che hai postato, ho notato che tu prevedi il trattamento di valori "1" o "0" fino ad un massimo di 32 ricorrenze, ma non mi sembra che li consideri vincolati a gruppi di almeno 4 crt (crt=caratteri) alla volta. Gambas contiene le seguenti funzioni di conversione attinenti al tuo quesito: Cint, CShort, Cfloat e CByte.  Però tu hai la necessità di ottenere prima il valore binario puro corrispondente al valore di partenza contenuto nella variabile "c". Occorerebbe perciò come primo passo ottenere il valore binario puro corrispondente.  Perciò, secondo me, a questo punto, potresti considerare un contatore numerico dove vai a sommare il risultato di ciascun valore immesso per la potenza di 2 corrispondenmte alla posizione del crt in trattamento.
Es.: Se il valore da trattare è 10010101, partendo dalla posizione all'estrema destra del valore,  potresti fare:
1x2^0  +
0x2^1  +
1x2^2  +
0x2^3  +
1x2^4  +
0x2^5  +
0x2^6  +
1x2^7  +
=149 che tradotto in codice, potrebbe essere:

Codice: [Seleziona]
Dim b, e As Integer
Dim a As String
Dim Intero as Integer
Dim Esponente as Integer
'... bla ... bla ... bla ...
Esponente = 0
For b = Len(a) To 1 Step -1
  crt=Int(Val(mid(a,b)))
  Intero =crt*2^Esponente
  Esponente += 1
next
Print Intero

 :ciao:
:ciao:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Convertire un numero Binario in decimale
« Risposta #2 il: 20 Novembre 2011, 01:21:18 »
Uhmmm... niente male, Picavbg, niente male ! Il principio è molto interessante.

Ho però ho dovuto apportare qualche integrazione al tuo codice, così:

Codice: gambas [Seleziona]

Dim b, e As Integer
Dim a As String
Dim Intero, InteroFinale As Integer
Dim Esponente, crt As Integer

' ...... ..... .. .. .. ...

 Esponente = 0
  
  For b = Len(a) To 1 Step -1
   crt = Int(Val(Mid(a, b, 1)))
  
   Intero = crt * 2 ^ Esponente

   Esponente += 1
  
   InteroFinale = InteroFinale + Intero
  
  Next

  Print InteroFinale
 
« Ultima modifica: 13 Luglio 2012, 20:37:30 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Convertire un numero Binario in decimale
« Risposta #3 il: 20 Novembre 2011, 16:11:16 »
Si, certo, hai ragione; nella fretta di concludere, avevo dimenticato l'accumulo totale.  :D Spero che alla fine tu abbia trovato quello che cercavi.
 :ciao: :ciao:
:ciao:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Convertire un numero Binario in decimale
« Risposta #4 il: 20 Novembre 2011, 18:12:11 »
Si, certo, hai ragione; nella fretta di concludere, avevo dimenticato l'accumulo totale.  :D Spero che alla fine tu abbia trovato quello che cercavi.
 :ciao: :ciao:


Ti ringrazio molto, Picavbg. Il tuo algoritmo è abbastanza breve: metterò "risolto".
Se poi c'è qualche altro amico che vuole aggiungere un suo contributo, potrà senz'altro farlo.  :coder:
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »