Excel e gli applicativi Microsoft Office Sfida di Pasqua: calcolatore con notazione polacca

Login Registrati
Stai vedendo 25 articoli - dal 26 a 50 (di 52 totali)
  • Autore
    Articoli
  • #45217 Score: 0 | Risposta

    vecchio frac
    Senior Moderator
      272 pts

      Luca73 ha scritto:

      Ciao a tutti e buona Pasqua,

      io in questo periodo non ce la faccio,....se mi aspettate provero a ragionarci dopo l'8 di aprile

       fighting!

      #45218 Score: 0 | Risposta

      vecchio frac
      Senior Moderator
        272 pts

        Aldo Ercolini ha scritto:

        Risolto anche questo

        #45220 Score: 1 | Risposta

        scossa
        Partecipante
          37 pts

          Giusto per gioco, ho implementato una "calcolatrice RPN" veramente all'osso input solo da mouse) ma che credo possa essere un buon punto di partenza per implementare ulteriori funzioni e abbellimenti.

          Calcolatrice RPN

          Il codice è tutto nella userform:

          N.B.: è solo una bozza, non escludo la presenza di bug.

          Allegati:
          You must be logged in to view attached files.
          #45222 Score: 0 | Risposta

          scossa
          Partecipante
            37 pts

            Peccato che il forum non gestisca le gif animate.

            Per chi vuole divertirsi con il primo "giocattolino" che ho avuto per le mani (1975): hp 25

            #45225 Score: 0 | Risposta

            Raffaele53
            Partecipante
              23 pts

              Siete solo dei "MOSTRI"

              Nel mio piccolo sono riuscito a fare la mia prima Function (che non funziona), non mi ritorna la risposta ??? Mi dite il motivo?

              @scossa, come funziona? A me da errore >>>LblHid.Caption = cStack(j) * LblHid.Caption

              `Option Explicit
              Sub a()
                  Dim stG As String
                  stG = "- + 3 * / 6 2 5 1" '17
                  MsgBox CnP(stG) 'non funziona
              End Sub
              Function CnP(ByVal stG As String)
              Dim sT1 As String, sT2 As String, arr() As String
              Dim Val As Double, nN As Long, X As Long 'y As Long, tot As Long
              Do While Len(stG) - Len(Replace(stG, " ", "")) > 0
                  nN = Len(stG) - Len(Replace(stG, " ", ""))
                      arr() = Split(stG, " ")
                          For X = nN To 0 Step -1
                              sT1 = arr(X)
                              If sT1 = "/" Or sT1 = "*" Or sT1 = "+" Or sT1 = "-" Then
                                  Val = Evaluate(arr(X + 1) & arr(X) & arr(X + 2))
                                  sT2 = arr(X) & " " & arr(X + 1) & " " & arr(X + 2)
                                  stG = Replace(stG, sT2, Val)
                                 Exit For
                              End If
                          Next
              Loop
              stG = Val
              MsgBox stG 'questo funziona
              End Function`
              #45226 Score: 0 | Risposta

              scossa
              Partecipante
                37 pts

                Raffaele53 ha scritto:

                @scossa, come funziona?

                Fondamentalmente così: click su una cifra poi click su Enter, poi su un'altra cifra poi click su un operatore (x + - / ^) e ottieni il risultato, poi click su un'altra cifra e poi operatore ....

                #45227 Score: 0 | Risposta

                Aldo Ercolini
                Partecipante
                  19 pts

                  Ciao Raffaele,

                  nella functio devi modificare: stG = Val con CnP = Val (Devi assegnare alla funzione il valore del calcolo)

                  Poi nella sub :

                  Dichiari una variabile double tipo Dim risutato as double

                  la function la chiami cosi' risultato = CnP(stG)

                  e poi msgbox risultato

                   

                   

                  #45228 Score: 0 | Risposta

                  Raffaele53
                  Partecipante
                    23 pts

                    @scossa, Ok funziona ma numero-virgola-4zeri mandano in confusione

                    @Aldo Ercolini
                    Grazie. Adesso mi funziona la Sub, credevo che se mettevo la stringa in A1 ed in A2=CnP(A1) dovesse andare (mi mancano altri passaggi)

                    #45229 Score: 0 | Risposta

                    scossa
                    Partecipante
                      37 pts

                      Raffaele53 ha scritto:

                      @scossa, Ok funziona ma numero-virgola-4zeri mandano in confusione

                      Serve per evidenziare che il numero è stato inserito nello stack, si possono mettere anche solo due zeri; del resto è così anche nelle calcolatrici hp (prova a cliccare una cifra e poi Enter: ti mette 2 decimali)

                      #45230 Score: 0 | Risposta

                      vecchio frac
                      Senior Moderator
                        272 pts

                        scossa ha scritto:

                        Peccato che il forum non gestisca le gif animate.

                        Ma che potenza    e' simile alla TI57 che mio fratello non sapeva usare e con cui hop giocato per diverso tempo all'epoca. Uno spettacolo... complicata per un ragazzino ma potente   

                        #45231 Score: 0 | Risposta

                        vecchio frac
                        Senior Moderator
                          272 pts

                          scossa ha scritto:

                          ho implementato una "calcolatrice RPN" veramente all'osso

                           poi dicevo di non strafare vero? 

                          #45232 Score: 0 | Risposta

                          vecchio frac
                          Senior Moderator
                            272 pts

                            Raffaele53 ha scritto:

                            ma numero-virgola-4zeri mandano in confusione

                            Personalizzazione! Customizzazione! Enhancement!   

                            #45233 Score: 0 | Risposta

                            vecchio frac
                            Senior Moderator
                              272 pts

                              scossa ha scritto:

                              non escludo la presenza di bug

                              Scovato il bug (non e' un bug, solo che non e' implementata la gestione dell'errore, in questo caso la divisione per zero).

                              Ma naturalmente bravo scossa, e' una figata, in cosi' poco tempo poi!   

                              #45234 Score: 0 | Risposta

                              Aldo Ercolini
                              Partecipante
                                19 pts

                                Raffaele53 ha scritto:

                                credevo che se mettevo la stringa in A1 ed in A2=CnP(A1) dovesse andare (mi mancano altri passaggi)

                                Raffaele a me funziona:

                                Function CnP(ByVal stG As String) As Double
                                Dim sT1 As String, sT2 As String, arr() As String
                                Dim Val As Double, nN As Long, X As Long
                                
                                Do While Len(stG) - Len(Replace(stG, " ", "")) > 0
                                    nN = Len(stG) - Len(Replace(stG, " ", ""))
                                        arr() = Split(stG, " ")
                                            For X = nN To 0 Step -1
                                                sT1 = arr(X)
                                                If sT1 = "/" Or sT1 = "*" Or sT1 = "+" Or sT1 = "-" Then
                                                    Val = Evaluate(arr(X + 1) & arr(X) & arr(X + 2))
                                                    sT2 = arr(X) & " " & arr(X + 1) & " " & arr(X + 2)
                                                    stG = Replace(stG, sT2, Val)
                                                   Exit For
                                                End If
                                            Next
                                Loop
                                
                                CnP = Val
                                
                                End Function
                                #45236 Score: 0 | Risposta

                                vecchio frac
                                Senior Moderator
                                  272 pts

                                  Aldo Ercolini ha scritto:

                                  Raffaele a me funziona:

                                  Confermo che funziona   

                                  #45242 Score: 0 | Risposta

                                  Raffaele53
                                  Partecipante
                                    23 pts

                                    Avete aggiunto as double, comunque a me non funziona
                                    Ok per la Sub a(), KO per la cella =CNP(C23)

                                    Non avete risposto alla mia domanda (post #45163)
                                    vecchio frac scrive-->notazione polacca---------->"* / 15 3 2"
                                    Scossa scrive-------->Notazione Polacca Inversa-->"2 3 * 5 +"
                                    Mi sembra che una inizia da sinistra, l'altra da destra. Pertanto sono due cose similari ma diverse?

                                    Allegati:
                                    You must be logged in to view attached files.
                                    #45244 Score: 0 | Risposta

                                    Aldo Ercolini
                                    Partecipante
                                      19 pts

                                      Raffaele effettivamente nel tuo file non funziona e non capisco il motivo.

                                      Hai provato a creare un file ex novo?

                                      #45245 Score: 0 | Risposta

                                      vecchio frac
                                      Senior Moderator
                                        272 pts

                                        Raffaele53 ha scritto:

                                        Mi sembra che una inizia da sinistra, l'altra da destra. Pertanto sono due cose similari ma diverse?

                                        Si' esatto. Infatti la seconda (quella preferita da scossa in effetti) si chiama RPN dove la R sta per reverse.

                                        Quando scrivi "2 3 * 5 +" la devi interpretare cosi': fissati il 2 da qualche parte (2, primo operando) poi considera 3 (secondo operando: quindi mi aspetto un'operatore), moltiplica (2*3=6) e considera il risultato come il primo operando percio' fissalo in memoria, poi considera 5 (secondo operando: quindi mi aspetto un'operatore), addiziona (6+5=11), fine.

                                        In notazione polacca normale invece le operazioni si scrivono prima degli operandi somma (seguono due numeri? esegui; segue un altro operando? sospendi la prima operazione e prosegui chiedendoti se seguono due numeri).

                                        L'esempio di prima si scrive invece si scrive "+ * 2 3 5" che si legge cosi': somma (segue altro operando quindi mi aspetto due operatori); moltiplica (2*3=6) : questo e' il primo operando della prima operazione; segue un altro numero: questo e' il secondo operando della prima operazione, eseguila (6+5=11).

                                        #45246 Score: 0 | Risposta

                                        scossa
                                        Partecipante
                                          37 pts

                                          vecchio frac ha scritto:

                                          e' simile alla TI57 che mio fratello non sapeva usare

                                          Eh, la hp 25 del link invece era di mia sorella, universitaria a Padova (in fisica nucleare) e nei week-end a casa gliela sequestravo.

                                          Era programmabile e mi ricordo che c'era un programma che simulava l'allunaggio dell'Apollo e dovevi immettere i valori dei controrazzi per frenare la discesa e fare un allunaggio senza scatafasciarti, quanti ricordi !  

                                          #45249 Score: 0 | Risposta

                                          vecchio frac
                                          Senior Moderator
                                            272 pts

                                            scossa ha scritto:

                                            Era programmabile

                                            Massimo cento posizioni, un tot di subroutine, mi pare con una nidificazione limitata, con la possibilita' di memorizzare i calcoli intermedi. Poi pero' sono comunque diventato un ciuccio di matematica, tra le altre cose   

                                            #45250 Score: 0 | Risposta

                                            scossa
                                            Partecipante
                                              37 pts

                                              Giusto per fare un esempio di ulteriore sviluppo della calcolatrice in Vba del post 45226:

                                              HP 25 in Excel

                                              Allegati:
                                              You must be logged in to view attached files.
                                              #45252 Score: 0 | Risposta

                                              vecchio frac
                                              Senior Moderator
                                                272 pts

                                                Oddio ho sbloccato un ricordo a scossa, adesso chi lo ferma?   

                                                Naturalmente scherzo, ottimo lavoro come sempre, e poi veramente bellissima l'immagine interattiva    non ti chiederemo comunque di attivare tutti i tasti e simulare la calcolatrice reale     

                                                Edit by VF: il font Liquid Crystal non ce l'ho ma e' molto bello, vado a cercarlo  

                                                #45253 Score: 1 | Risposta

                                                scossa
                                                Partecipante
                                                  37 pts

                                                  vecchio frac ha scritto:

                                                  non ti chiederemo comunque di attivare tutti i tasti e simulare la calcolatrice reale

                                                  Tranquillo, non ci penso proprio, anche perché alla fine sarebbe più noioso che interessante; anche perché sul cellulare ho installato l'app dell'HP 21 e sul pc l'emulatore dell'HP 15C     

                                                  #45299 Score: 1 | Risposta

                                                  Luca73
                                                  Partecipante
                                                    58 pts

                                                    Ciao a tutti ecco la mia soluzione:

                                                    Public Function NP_LT(StrIni As String)
                                                    
                                                    Dim VettoreStr() As String
                                                    Dim IndiceS As Long
                                                    Dim IndiceSInt As Long
                                                    Dim Errore As Boolean
                                                    Dim ErrMsg As String
                                                    Dim Risultato As Double
                                                    Dim MioInd As Integer
                                                    Dim Term1 As Double
                                                    Dim Term2 As Double
                                                    MioInd = 0
                                                    
                                                    VettoreStr = Split(StrIni, " ")
                                                    If UBound(VettoreStr) < 2 Then
                                                        ErrMsg = "Stringa non Adeguata = corta"
                                                        GoTo ErrGest
                                                    ElseIf UBound(VettoreStr) Mod 2 = 1 Then
                                                        ErrMsg = "Stringa non Adeguata = Numero Errato di Operatori"
                                                        GoTo ErrGest
                                                    Else
                                                        Do
                                                            Errore = True
                                                            
                                                            MioInd = MioInd + 1
                                                            For IndiceS = 2 To UBound(VettoreStr)
                                                                If ((VettoreStr(IndiceS - 2) Like "[-+*/]") And (IsNumeric(VettoreStr(IndiceS - 1))) And (IsNumeric(VettoreStr(IndiceS - 0)))) Then
                                                                    Term1 = VettoreStr(IndiceS - 1) * 1
                                                                    Term2 = VettoreStr(IndiceS - 0) * 1
                                                                    Select Case VettoreStr(IndiceS - 2)
                                                                        Case "+"
                                                                            Risultato = Term1 + Term2
                                                                        Case "-"
                                                                            Risultato = Term1 - Term2
                                                                        Case "*"
                                                                            Risultato = Term1 * Term2
                                                                        Case "/"
                                                                            If Term2 = 0 Then
                                                                                ErrMsg = "Divisione per 0 (Zero)"
                                                                                GoTo ErrGest
                                                                            Else
                                                                                Risultato = Term1 / Term2
                                                                            End If
                                                                        Case Else
                                                                            ErrMsg = "Non un operatore Corretto"
                                                                            GoTo ErrGest
                                                                    End Select
                                                                    Errore = False
                                                                    If UBound(VettoreStr) = 2 Then
                                                                        NP_LT = Risultato
                                                                        Exit Do
                                                                    Else
                                                                        VettoreStr(IndiceS - 2) = Risultato
                                                                        For IndiceSInt = IndiceS + 1 To UBound(VettoreStr)
                                                                            VettoreStr(IndiceSInt - 2) = VettoreStr(IndiceSInt)
                                                                        Next
                                                                        ReDim Preserve VettoreStr(UBound(VettoreStr) - 2)
                                                                        Exit For
                                                                    End If
                                                                End If
                                                            Next IndiceS
                                                            If Errore Then
                                                                ErrMsg = "Stringa non Adeguata = sequenza non Corretta"
                                                                GoTo ErrGest
                                                            End If
                                                        Loop Until (Errore = True Or MioInd > 1000)
                                                    End If
                                                    Exit Function
                                                    ErrGest:
                                                    'MsgBox (ErrMsg)
                                                    NP_LT = "ERRORE: " & ErrMsg
                                                    End Function
                                                    
                                                    
                                                    #45322 Score: 0 | Risposta

                                                    vecchio frac
                                                    Senior Moderator
                                                      272 pts

                                                      Luca73 ha scritto:

                                                      Ciao a tutti ecco la mia soluzione:

                                                      Ti e' venuta bene! L'ho provata in molti modi e ha retto ad ogni stringa inserita con un messaggio appropriato!

                                                    Login Registrati
                                                    Stai vedendo 25 articoli - dal 26 a 50 (di 52 totali)
                                                    Rispondi a: Sfida di Pasqua: calcolatore con notazione polacca
                                                    Gli allegati sono permessi solo ad utenti REGISTRATI
                                                    Le tue informazioni: