› Excel e gli applicativi Microsoft Office › Sfida sui numeri palindromi
-
AutoreArticoli
-
Ecco a voi una nuova piccola sfida per tenersi in esercizio
La proposta non è mia ma di Albatros54 che mi ha suggerito l'iniziativa e che io adesso propongo a tutti.
Si chiede di scrivere una routine in VBA che individui i numeri palindromi sia scritti in base 2 che in base 10 nell'ambito del primo milione dei numeri naturali (numeri interi non negativi).
Non è consentito utilizzare funzioni native di Excel (definite dalla classe WorksheetFunction).Per esempio il numero in base dieci "9669" corrisponde a "0010010111000101" in base 2; il numero decimale è palindromo ma il numero binario non lo è.
Potete scrivere in un post il codice oppure allegare un file.
La sfida è aperta a tutti, iscritti e non iscritti al forum, ed è solo un modo per passare del tempo divertendosi... non aspettatevi inviti a cena o baci da Albatros54 insomma
Sarà Albatros54, che ringrazio per la proposta, a decretare la routine che lo soddisfa di più
Ciao la sfide è interessante, per capirci bisogna trovare i numeri palindromi da 1 a 1M, che corrispondano sia in base 10 e sia in base 2?
Tipo l'esempio da te riportato non è corretto giusto?
Qui il problema a cui dovrei pensare sarebbe come convertire il numero in binario, per il discorso del palindromo avrei già un'idea
primo milione dei numeri naturali (numeri interi non negativi)
Direi di restringere il range a DIECIMILA, per non andare in OVERFLOW
sono da escludere i NUMERI PRIMI 3-5 e 7
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Si chiede di scrivere una routine in VBA che individui i numeri palindromi sia scritti in base 2 che in base 10 nell'ambito del primo milione dei numeri naturali (numeri interi non negativi).
Mi Permetto.
CORRIGE:
Si chiede di scrivere una routine in VBA che individui i numeri palindromi sia scritti in base 2 che in base 10 nell'ambito dei NUMERI PRIMI(numeri interi non negativi) in un RANGE di numeri naturali fino a DIECIMILA.
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Oddio....siete folli
ma, forse sbaglio e vi prego di correggermi, il numero "9669" in binario non corrisponde a "10010111000101"? Se non ho sbagliato a fare i conti, per rappresentare il numero 10K (base 10) in base 2 ci voglio 14 bit.
vecchio frac ha scritto:
Per esempio il numero in base dieci "9669" corrisponde a "0010010111000101" in base 2; il numero decimale è palindromo ma il numero binario non lo è.
Nell'esempio andrebbero eliminati gli zeri iniziali? Oppure la rappresentazione deve essere su 16 bit?
ho scritto questa per i numeri interi positivi da 9 a 10K :
Option Explicit Private Sub cmbEstraPalindromi_Click() 'Dichiara le variabili/oggetti Dim rngCella As Range Dim Numero As Integer 'Inizializza le variabili/oggetti Set rngCella = Calcolo.Range("A2") 'Cicla da 9 a 10000 For Numero = 9 To 10000 'Verifica che sia un numero palindromo If Palindromo(CStr(Numero)) Then rngCella.Value = Numero Set rngCella = rngCella.Offset(1) End If Next Numero 'Libera la memoria Set rngCella = Nothing End Sub Private Function Palindromo(ByVal NumeroStringa As String) As Boolean 'Dichira le variabili/oggetti Dim Pos As Integer 'Verifica che il numero sia almeno di 2 caratteri If Len(NumeroStringa) > 1 Then 'Cicla il NumeroStringa dalla posizione 1 alla metà della lunghezza della stessa For Pos = 1 To CInt(Len(NumeroStringa) / 2) 'Verifica che il numero sia palindromo If Mid(NumeroStringa, Pos, 1) <> Mid(NumeroStringa, Len(NumeroStringa) - Pos + 1, 1) Then Palindromo = False Exit Function End If Next Pos Palindromo = True Else Palindromo = False End If End FunctionHo eseguito il ciclo dal numero 9 perché convertito in binario è palindromo, mi manca da scrivere la funzione che converte i numeri in binario.
Devo scriverla per forza!?!?
A parte gli scherzi, posto il file del progetto in attesa che vengano delucidate le domande riguardanti i numeri binari
Ho pensato di creare un'altra funzione per la conversione e poi richiamarla da dentro il ciclo da 9 a 10K.
Allegati:
You must be logged in to view attached files.numero "9669" in binario non corrisponde a "10010111000101"
ESATTO!!! pero anche "0010010111000101" corrisponde a "9669" perchè gli zeri a sx del binario non hanno significato (se non sbaglio).
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )ESATTO!!! pero anche "0010010111000101" corrisponde a "9669" perchè gli zeri a sx del binario non hanno significato (se non sbaglio).
Non sbagli, gli zeri iniziali non influiscono nel calcolo del valore, però nel caso in questione (numeri palindromi) hanno lo stesso peso degli altri bit.
Quindi come la volete la rappresentazione? 14 o 16 bit?
ho scritto questa per i numeri interi positivi da 9 a 10K
Forse non siamo stati chiari, vi prego di rileggere i vari interventi, il quesito chiede di trovare in un RANGE che va da 1 a 10000, i numeri primi(1231), una volta trovati questi numeri primi, convertirli in BINARIO e verificare se il numero DECIMALE corrispondente al BINARIO sono PALINDROMI
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Forse non siamo stati chiari, vi prego di rileggere i vari interventi, il quesito chiede di trovare in un RANGE che va da 1 a 10000, i numeri primi(1231), una volta trovati questi numeri primi, convertirli in BINARIO e verificare se il numero DECIMALE corrispondente al BINARIO sono PALINDROMI
Sorry, mi ero perso, sono sveglio dalle 4
adesso sono cotto, ci riprovo domani!!!Sorry, mi ero perso, sono sveglio dalle 4
adesso sono cotto, ci riprovo domani!!!la calma è la virtu dei forti, prenditi tutto il tempo che vuoi(prima di NATALE
) perchè non serve postare per primo, perchèpuoi vincere solo un'ARANCINA
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Si chiede di scrivere una routine in VBA che individui i numeri palindromi sia scritti in base 2 che in base 10 nell'ambito del primo milione dei numeri naturali (numeri interi non negativi).
Forse non siamo stati chiari, vi prego di rileggere i vari interventi, il quesito chiede di trovare in un RANGE che va da 1 a 10000, i numeri primi(1231), una volta trovati questi numeri primi, convertirli in BINARIO e verificare se il numero DECIMALE corrispondente al BINARIO sono PALINDROMI
Sinceramente non ho capito cosa significa "se il numero DECIMALE corrispondente al BINARIO sono PALINDROMI"
il = singolare, sono = plurale
Comunque io tra 10 e 10.000 trovo 189 numeri "decimali" (non solo primi) palindromi, e 101 numeri "binari" palindromi; l'unico numero che è palindromo sia in decimale che in binario è 66 (01000010).
Resto in attesa di chiarimenti "chiari"
P.S.: se i numeri binari vanno presi al numero di bit effettivo ovviamente i palindromi avranno tutti il bit di destra a 1 (quindi 203 palindromi e non 101 e 7 palindromi uguali in decimale e binario).
Io direi che l'unico numero in base 2 palindromo e che corrisponde al numero binario 1001001 è il 37 o 73 avendo cosi' numero palindromo e binario uguale, anche perché' fa parte di quei numeri stellati
Dunque...io ci ho provato. Mi sono dovuto rivedere un po' cosa volesse dire palindromo e come si calcolassero i numeri binari.
Come accennavo ieri ad @albatros54 io sono un neofita con la N maiuscola, quindi per devo per forza guardare sul web e studiare il codice.
Se per caso così va bene però mi auto escludo dal giochino perché solo la function non è farina del mio sacco mentre la sub sì.
`Option Explicit Function covDecBin(ByVal x As Long) As Double Dim Potenza, Esponente As Integer Dim Risultato As Double While x > 0 Esponente = 0 Potenza = 1 While Potenza <= x Potenza = Potenza * 2 Esponente = Esponente + 1 Wend Esponente = Esponente - 1 Risultato = Risultato + 10 ^ Esponente x = x - 2 ^ Esponente Wend covDecBin = Risultato End Function Sub NumPalindromi() Dim nDecimale, nBinario As Double Dim i As Long, xRow As Long MsgBox "Calcolo dei numeri Palindromi" Range("A:B").Clear Range("A1") = "Numeri Palindromi" Range("B1") = "Numeri Binari Palindromi" Columns(2).Select Selection.NumberFormat = "0" xRow = 1 For i = 8 To 10000 If i = StrReverse(i) Then nBinario = covDecBin(i) If nBinario = StrReverse(nBinario) Then xRow = xRow + 1 Cells(xRow, 1).Value = i Cells(xRow, 2).Value = nBinario End If End If Next i Range("A1").Select End Sub `Allegati:
You must be logged in to view attached files.Io direi che l'unico numero in base 2 palindromo e che corrisponde al numero binario 1001001 è il 37 o 73
??
37 : 100101
73 : 1001001Alt!!! Mi rimetto in gioco
Questo è tutta mia. Ovviamente sempre se ho centrato il questito
Option Explicit Function ConversioneDecToBin(ByVal x As Integer) As Double Dim intero As Integer Dim decimale As String Dim divisione As Double Dim Risultato As String 'i numeri binari derivano dalla divisione del numero per 2 e se il risultato 'da resto allora si segna "1" altrimenti "0" 'poi si prosegue e si divide la parte intera del quozione ancora per 2 e si continua come sopra 'finché non si arriverà alla divisione = 0/2 'ad esempio il numero binario di "8" si ottiene facendo: '8/2 = 4 (0) '4/2 = 2 (0) '2/2 = 1 (0) '1/2 = 0,5 (1) '0/2 = non esiste risultato 'il numero binario di "8" è il contrario dei risultati ottenuti sopra quindi è "1000" While x > 0 divisione = x / 2 If x Mod 2 = "0" Then decimale = "0" Risultato = Risultato & decimale Else intero = Int(divisione) Risultato = Risultato & "1" End If x = Int(divisione) Wend ConversioneDecToBin = StrReverse(Risultato) End Function Sub NumPalindromi() Dim nDecimale, nBinario As Double Dim i As Long, xRow As Long MsgBox "Calcolo dei numeri Palindromi" Range("A:B").Clear Range("A1") = "Numeri Palindromi" Range("B1") = "Numeri Binari Palindromi" Columns(2).Select Selection.NumberFormat = "0" xRow = 1 For i = 8 To 10000 If i = StrReverse(i) Then nBinario = ConversioneDecToBin(i) If nBinario = StrReverse(nBinario) Then xRow = xRow + 1 Cells(xRow, 1).Value = i Cells(xRow, 2).Value = nBinario End If End If Next i Range("A1").Select End SubAllegati:
You must be logged in to view attached files.Comunque io tra 10 e 10.000 trovo 189 numeri "decimali" (non solo primi) palindromi
Concordo con scossa (come si fa a far arrivare la notifica direttamente all'interessato? tipo @scossa) col dire che i numeri "decimali" palindromi sono 189 come mostra il file allegato sopra. Adesso provo a modificarlo
Ho apportato delle modifiche al progetto precedente :
Option Explicit Private Sub cmbEstraPalindromi_Click() 'Dichiara le variabili/oggetti Dim rngCella As Range Dim Numero As Integer 'Inizializza le variabili/oggetti Set rngCella = Calcolo.Range("A2") 'Cicla da 9 a 10000 For Numero = 9 To 10000 'Verifica che sia un numero palindromo If isPalindromo(CStr(Numero)) Then rngCella.Value = Numero 'Verifica che sia un numero primo If isPrimo(Numero) Then rngCella.Offset(0, 1).Value = Numero 'Sposta la cella di una riga in basso Set rngCella = rngCella.Offset(1) End If Next Numero 'Libera la memoria Set rngCella = Nothing End Sub Private Function isPalindromo(ByVal NumeroStringa As String) As Boolean 'Dichira le variabili/oggetti Dim Pos As Integer 'Verifica che il numero sia almeno di 2 caratteri If Len(NumeroStringa) > 1 Then 'Cicla il NumeroStringa dalla posizione 1 alla metà della lunghezza della stessa For Pos = 1 To CInt(Len(NumeroStringa) / 2) 'Verifica che il numero sia palindromo If Mid(NumeroStringa, Pos, 1) <> Mid(NumeroStringa, Len(NumeroStringa) - Pos + 1, 1) Then isPalindromo = False Exit Function End If Next Pos isPalindromo = True Else isPalindromo = False End If End Function Private Function isPrimo(ByVal Numero As Integer) As Boolean 'Dichiara le variabili/oggetti Dim Ciclo As Integer 'Verifica che il numero sia Pari If Numero Mod 2 = 0 Then isPrimo = False Exit Function End If 'Cicla i numeri dispari fino al numero interessato For Ciclo = 3 To Numero Step 2 'Verifica che il numero sia Pari If Numero Mod Ciclo = 0 And Ciclo <> Numero Then isPrimo = False Exit Function End If Next Ciclo 'Numero è primo isPrimo = True End Functioncosì facendo ho ottenuto 16 numeri "decimali" primi palindromi.
Resta solo da chiarire come volete la rappresentazione (il confronto) dei vari bit, 16 o 14?
Allegati:
You must be logged in to view attached files.come si fa a far arrivare la notifica direttamente all'interessato? tipo @scossa
Purtroppo in questa versione del forum non sono disponibili i messaggi privati.
Quindi come la volete la rappresentazione? 14 o 16 bit?
Questa è una domanda azzeccata ma come è già stato detto lasciamo perdere gli zeri iniziali.
Quindi 20 = 10100 e non 20 = 00010100.non ho capito cosa significa "se il numero DECIMALE corrispondente al BINARIO sono PALINDROMI"
La frase di Albatros va intesa nel senso che il numero considerato deve essere palindromo sia nella versione in base due che nella versione in base dieci. Forse non sono stato chiaro io fin dall'inizio ma sono contento del movimento che si è generato e delle proposte che sono state prodotte
Purtroppo in questa versione del forum non sono disponibili i messaggi privati.
Ciao Frac, non intendevo messaggi privati, ma far arrivare una notifica all'interessato che è stato menzionato in un post.
La frase di Albatros va intesa nel senso che il numero considerato deve essere palindromo sia nella versione in base due che nella versione in base dieci. Forse non sono stato chiaro io fin dall'inizio ma sono contento del movimento che si è generato e delle proposte che sono state prodotte
ok ci provo
Buongiorno, io ho capito che, tranne i numeri 3, 5 e 7, bisogna trovare tutti quei numeri che, arrivando fino a 10.000, sono palindromi tra loro ma che anche il loro binario lo è. Tipo 8 non va bene perché nonostante al contrario (palindromo) rimane sempre 8 ma il suo binario è 1000 e quindi il suo palindromo sarebbe 0001, invece 9 va bene perché il suo binario è 1001.
Ma quindi le mie proposte #41746 e #41749 sono valide? Hanno raggiunto il risultato del quesito?
NUMERI PRIMI IN UN RANGE DA 1 A 10000!
NUMERI PRIMI IN UN RANGE DA 1 A 10000!
Ahhh....ok ok...quindi devono essere solo numeri primi. Ok. La cosa si complica 🤣
-
AutoreArticoli
