Excel e gli applicativi Microsoft Office Sfida sui numeri palindromi

Login Registrati
Stai vedendo 25 articoli - dal 1 a 25 (di 101 totali)
  • Autore
    Articoli
  • #41730 Score: 0 | Risposta

    vecchio frac
    Senior Moderator
      272 pts

      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ù   
       

      #41731 Score: 0 | Risposta

      LucaSR
      Partecipante
        15 pts

        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   

        #41732 Score: 0 | Risposta

        albatros54
        Moderatore
          89 pts

          vecchio frac ha scritto:

          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 )
          #41733 Score: 0 | Risposta

          albatros54
          Moderatore
            89 pts

            vecchio frac ha scritto:

            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 )
            #41734 Score: 0 | Risposta

            alexps81
            Moderatore
              58 pts

              Oddio....siete folli    ma, forse sbaglio e vi prego di correggermi, il numero "9669" in binario non corrisponde a "10010111000101"? 

              #41735 Score: 0 | Risposta

              LucaSR
              Partecipante
                15 pts

                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?

                #41736 Score: 0 | Risposta

                LucaSR
                Partecipante
                  15 pts

                  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 Function

                  Ho 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!?!?       

                  #41737 Score: 0 | Risposta

                  LucaSR
                  Partecipante
                    15 pts

                    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.
                    #41739 Score: 0 | Risposta

                    albatros54
                    Moderatore
                      89 pts

                      alexps81 ha scritto:

                      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 )
                      #41740 Score: 0 | Risposta

                      LucaSR
                      Partecipante
                        15 pts

                        albatros54 ha scritto:

                        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?

                        #41741 Score: 0 | Risposta

                        albatros54
                        Moderatore
                          89 pts

                          LucaSR ha scritto:

                          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 )
                          #41742 Score: 0 | Risposta

                          LucaSR
                          Partecipante
                            15 pts

                            albatros54 ha scritto:

                             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!!!

                            #41743 Score: 1 | Risposta

                            albatros54
                            Moderatore
                              89 pts

                              LucaSR ha scritto:

                              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 )
                              #41744 Score: 0 | Risposta

                              scossa
                              Partecipante
                                37 pts

                                vecchio frac ha scritto:

                                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).

                                albatros54 ha scritto:

                                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).

                                #41745 Score: 0 | Risposta

                                Dodi
                                Partecipante
                                  2 pts

                                  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 

                                  #41746 Score: 0 | Risposta

                                  alexps81
                                  Moderatore
                                    58 pts

                                    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.
                                    #41748 Score: 0 | Risposta

                                    scossa
                                    Partecipante
                                      37 pts

                                      Dodi ha scritto:

                                      Io direi che l'unico numero in base 2 palindromo e che corrisponde al  numero binario 1001001 è  il 37 o 73

                                      ??

                                      37 : 100101
                                      73 : 1001001

                                      #41749 Score: 0 | Risposta

                                      alexps81
                                      Moderatore
                                        58 pts

                                        Alt!!! 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 Sub
                                        
                                        Allegati:
                                        You must be logged in to view attached files.
                                        #41751 Score: 0 | Risposta

                                        LucaSR
                                        Partecipante
                                          15 pts

                                          scossa ha scritto:

                                          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   

                                          #41752 Score: 0 | Risposta

                                          LucaSR
                                          Partecipante
                                            15 pts

                                            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 Function

                                            così 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.
                                            #41754 Score: 0 | Risposta

                                            vecchio frac
                                            Senior Moderator
                                              272 pts

                                              LucaSR ha scritto:

                                              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.

                                              LucaSR ha scritto:

                                              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.

                                              scossa ha scritto:

                                              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   

                                              #41755 Score: 0 | Risposta

                                              LucaSR
                                              Partecipante
                                                15 pts

                                                vecchio frac ha scritto:

                                                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.

                                                vecchio frac ha scritto:

                                                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   

                                                #41756 Score: 0 | Risposta

                                                alexps81
                                                Moderatore
                                                  58 pts

                                                  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? 

                                                  #41757 Score: 0 | Risposta

                                                  Seawolf

                                                    NUMERI PRIMI IN UN RANGE DA 1 A 10000!

                                                    #41758 Score: 0 | Risposta

                                                    alexps81
                                                    Moderatore
                                                      58 pts

                                                      Seawolf ha scritto:

                                                      NUMERI PRIMI IN UN RANGE DA 1 A 10000!

                                                      Ahhh....ok ok...quindi devono essere solo numeri primi. Ok. La cosa si complica 🤣

                                                    Login Registrati
                                                    Stai vedendo 25 articoli - dal 1 a 25 (di 101 totali)
                                                    Rispondi a: Sfida sui numeri palindromi
                                                    Gli allegati sono permessi solo ad utenti REGISTRATI
                                                    Le tue informazioni: