Gambas-it

Gambas3 => Programmazione => Topic aperto da: vuott - 19 Novembre 2011, 05:29:54

Titolo: [Risolto] Convertire un numero Binario in decimale
Inserito da: vuott - 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:
Titolo: Re: Convertire un numero Binario in decimale
Inserito da: Picavbg - 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:
Titolo: Re: Convertire un numero Binario in decimale
Inserito da: vuott - 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
 
Titolo: Re: Convertire un numero Binario in decimale
Inserito da: Picavbg - 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:
Titolo: Re: Convertire un numero Binario in decimale
Inserito da: vuott - 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: