Newsgroup: it.comp.lang.visual-basic
Titolo: inverire cifre

forse come quesito è davvero facile ma io mi sto incasinando.....
ho un numero di DUE cifre e lo voglio "capovolgere".
esempio: ho 37 e voglio che mi venga restituito 73, ho 61 e voglio che mi
venga restituito 16....... ecc. ecc..
come devo fare?
ho provato con un sacco di giochi di diversi tipi di variabili ma non ci
sono riuscito quando credo che la soluzione sia facile.... boh!
grazie per il gentile ascolto,
ivan

ho un numero di DUE cifre e lo voglio "capovolgere".
Public Function InvertiCifre(ByVal a_Numero As Integer) As Integer
    InvertiCifre = (a_Numero \ 10) + CInt((a_Numero Mod 10) * 10)
End Function
hth, hal

 come devo fare?
Puoi usare le funzioni di stringa:
Dim a As Integer
Dim b As Integer
a = 37
b = Val(Right$(Str$(a), 1) & Left$(Trim$(Str$(a)), 1))
Oppure puoi usare la matematica:
b = a \ 10 + 10 * (a Mod 10)
Oppure puoi usare il Newsgroup, ma questo lo sapevi già... ;-)
Ciao
*Roby*

 ha scritto nel messaggio
news:9ob7pr$ca23f$1...@ID-94194.news.dfncis.de...

ringrazio MILLE per le risposte!
utilizzerò la formuletta che hai scritto. Curiosità: ma è una formula
"standard" o l'hai pensata su due piedi??! ;-)
Piccola voce di un inesperto programmatore lurkatore a vita:
questo NG è il più utile che abbia mai letto, metterlo moderato contro le
solite "stupide" domande o non so cosa mi dispiacerebbe, pagherei pure un
abbonamento pur di leggere tutte queste dritte(insegnamenti)! ;-)
ivan

 "standard" o l'hai pensata su due piedi??! ;-)
(cut su me stesso...)
ehm...... la formula che mi hai dato non funziona sempre.
37 me lo restituisce come 74, ad esempio.
praticamente se l'ultima cifra di a è alta, mi viene un incremento + 1 a b.
boh!

 praticamente se l'ultima cifra di a č alta, mi viene un incremento + 1 a
b.
Fai bene attenzione: da che parte č piegata la barra che sta tra la
variabile "a" e il numero 10?
 b = a \ 10 + 10 * (a Mod 10)
La formula qui sopra funziona perchč l'operatore usato (la barra "\") č
quello della divisione intera, cioč che elimina i resti e non arrotonda
Se invece lo scrivi cosě:
 b = a / 10 + 10 * (a Mod 10)
Stai usando il normale operatore di divisione che ti restituisce un numero
in virgola mobile, ma siccome la variabile destinazione "b" č un integer,
avviene un arrotondamento non desiderato e il risultato sballa di 1.
Ciao
*Roby*

 ha scritto nel messaggio
news:9ob9i3$c2sa6$1...@ID-94194.news.dfncis.de...

Non avevo notato 'sta storia della barra, credo di aver imparato una cosa
non da poco!
davvero grazie mille
ivan

 abbonamento pur di leggere tutte queste dritte(insegnamenti)! ;-)
Sinceramente se dovessi farlo per soldi mi guarderei bene dal rispondere ai
messaggi. Finchè si tratta di un hobby è pure divertente, ma se diventa un
lavoro, l'hot-line coi clienti è quanto di peggio possa pensare di fare per
campare. ;-)
Ciao
*Roby*

 messaggi. Finchè si tratta di un hobby è pure divertente, ma se diventa
(cut)
beh, la mia era una battuta. Era solo per sottolineare la grande utilità di
questo NG. Io poi ho trovato (per le poche domande che ho posto visto che
leggo molto) sempre gente disponibile. ed è una cosa che fa piacere, se poi
a alcuni rompe..... boh, pazienza.
ivan

prima) direi che è uno standard.
Diciamo che se fosse stato un numero in base 2 avremmo lavorato
di shift sui bit, ma in base 10 e in vb ... 
ciao, hal

 ha scritto nel messaggio
news:yf9q7.3600$Lp6.1...@news.infostrada.it...


 >forse come quesito č davvero facile ma io mi sto incasinando.....


 stringhe....)
...e avresti fatto bene.
Mi hai fatto sudare, ma alla fine č uscita questa routine:
Public Function InvertiCifre(ByVal a_Numero As Long) As Double
Dim r As Integer
Dim iNumCifre As Integer
Dim iCifraCorrente As Integer
If a_Numero = 0 Then
   InvertiCifre = 0
   Exit Function
End If
iNumCifre = Int(Log(a_Numero) / Log(10))
For r = iNumCifre To 0 Step -1
   If a_Numero < 10 ^ r Then
      iCifraCorrente = 0
   Else
      iCifraCorrente = Int(a_Numero / (10 ^ Int(Log(a_Numero) / Log(10))))
   End If
   InvertiCifre = InvertiCifre + iCifraCorrente * 10 ^ (iNumCifre - r)
   a_Numero = a_Numero - iCifraCorrente * 10 ^ r
Next
End Function
Va bene solo per motivi di studio, perchč con tutte quelle chiamate alla
funzione di logaritmo e quegli elevamenti a potenza, č molto piů lenta di
una sana gestione di stringhe.
Ciao
*Roby*


Grazie vado a riprendere il libro di analisi del liceo....elevazione al
logaritmo..diviso logaritmo..mamma mia... anche solo a pensarla...di quei
tempi mi piaceva solo lo studio dele funzioni (ma non tutte)
:-)

 logaritmo..diviso logaritmo..mamma mia... anche solo a pensarla...
Fa impressione ma le regole di base sono banali:
Il logaritmo in base dieci di un numero, ti ritorna il valore di esponente
che bisogna dare a 10 per ottenere il numero stesso.
Es: il logaritmo in base 10 di 100 è 2, e 10 elevato 2 fa in effetti 100.
Sfruttando questa funzione, puoi sapere di quante cifre è formato un valore,
e cioè della parte intera del  logaritmo in base 10 del numero + 1.
Siccome però VB non ti dà a disposizione la funzione di logaritmo in base
dieci, ma  solo quella di  logaritmo in base 2, devi sfruttare una altra
regoletta legata ai logaritmi, e cioè quella che permette il cambio di base.
Log in base a(b) = Log in base c(b) diviso Log in base c(a)
Quindi per avere il logaritmo in base 10 di un numero partendo dal logaritmo
in base 2, la formula è questa:
Log 10 (numero) = Log 2 (numero) / Log 2 (10)
Da qui ne risulta che il numero di cifre che compongono un numero è uguale
a:
Int(Log 2 (numero) / Log 2 (10))  + 1
Da qui in poi, il resto dovrebbe essere semplice.
Ciao
*Roby*
P.S.
Con la matematica fanno tutti un po' fatica ad andare d'accordo. Nel 1897 lo
stato americano dell'Indiana è stato vicinissimo ad approvare una legge che
fissava il valore di pigreco a 3:
http://faqs.jmas.co.jp/FAQs/sci-math-faq/indianabill
 ;-)