Oppure

Loading
13/04/11 14:46
Lollolallo
...e se lo è determinare l'esponente.

Oggi ci è stato assegnato questo esercizio in vb 6, ma non ho la pallida idea di come si faccia..

Per ora ho fatto questo:


Dim numero As Integer
Dim esponente As Integer
Dim resto As Integer
Dim conta As Integer
Dim numero1 As Integer


Private Sub Command1_Click()
numero = InputBox("Inserisci il numero";)
esponente = 0
numero1 = InputBox("Inserisci il numero";)
For conta = 1 To numero1
resto = numero / 2
esponente = esponente + 1
Next conta
MsgBox (esponente)
End Sub

Con numero1 definisci quante volte ripetere il ciclo (per es. 3) e con numero il numero (es. 8)
Eseguendo il ciclo, esponente verrà uguale a 3, cioè 2^3 (che è 8), ma io devo far si che il programma metta da solo numero1, e non da input.

Mi potete aiutare mettendo la codifica di questo algoritmo?
aaa
13/04/11 19:02
a_butta
Domanda preliminare: l'esponente deve appartenere a N+ vero? (deve cioè essere un numero naturale positivo?)

In tal caso, una possibile soluzione è provare a costruire un ciclo while che elevi 2^contatore: se il numero così ottenuto è uguale al tuo numero inserito, allora esso è una potenza di due e l'esponente è il contatore; se arriva fino ad risultato (sempre 2^contatore) maggiore del numero inserito, vuol dire che esso non è una potenza di due.
Implementando:
Dim numero As Integer = InputBox("Inserisci il numero: ")
Dim esponente As Integer = -1;
Dim Counter As Integer = 0;
While 2 ^ esponente <= numero
  if 2 ^ esponente = numero
    Counter = esponente
  End If
End While
If esponente > -1 Then
  'Il numero è una potenza di due; l'esponente è ESPONENTE
Else
  'Il numero non è una potenza di due;
End If



Altrimenti se puoi andare via logaritmi, imposti preliminarmente l'equazione:
2^esp = numero ---> esp = log(base 2)N;
da cui:

Esponente = Log(numero)/Log(2) 
'In VB6 ci dovrebbe essere solo LN, dunque converti la base

'Controllo se il numero è intero
If int(numero) < numero
  'Il numero non è potenza di due
Else
  'Il numero è potenza di due.
End If

aaa