Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - Riduzione di una strina
Forum - Visual Basic 6 - Riduzione di una strina

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
yaroze61 (Normal User)
Newbie


Messaggi: 10
Iscritto: 07/02/2012

Segnala al moderatore
Postato alle 9:59
Giovedì, 13/03/2014
Ciao a tutti, non riesco a trovare un algoritmo che mi faccia questa riduzione, faccio un esempio:

ho una strina di questo tipo

cdabababababcdababababab

vorrei ridurla in questo modo: cd5(ab)cd5(ab) il top sarebbe 2(cd5(ab))

Spero essere stato chiaro:

cd ababababab cd ababababab

cd poi ho ab ripetuto 5 volte il tutto ripetuto 2 volte

Quanche idea....!?!?!?!?!?!?!?!?

Grazieeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee:):):):)

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 10:03
Giovedì, 13/03/2014
Cominciamo dal capire cosa è una strina ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
yaroze61 (Normal User)
Newbie


Messaggi: 10
Iscritto: 07/02/2012

Segnala al moderatore
Postato alle 14:03
Giovedì, 13/03/2014
Ciao,
dai ho sbagliato a scrivere 'Riduzione di una stringa' :asd::asd::asd:

PM Quote
Avatar
yaroze61 (Normal User)
Newbie


Messaggi: 10
Iscritto: 07/02/2012

Segnala al moderatore
Postato alle 14:10
Giovedì, 13/03/2014
Una funzione che fa più o meno questa cosa, l'ho fatta!!! Ha dei limiti, funzionando sempre sul calcolo della metà della stringa, piramidale, la stringa risultante a volte non è ottimizzata. La funzione che ho fatto non calcola il secondo livello di parentesi. Si potrebbe utilizzare la ricorsività, ma non so come fare...
Basterebbe un'idea....

Grazieeeeeeeeee:):):)

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:20
Giovedì, 13/03/2014
Testo quotato

Postato originariamente da yaroze61:

Ciao,
dai ho sbagliato a scrivere 'Riduzione di una stringa' :asd::asd::asd:



Sì ma hai scritto

"ho una strina di questo tipo"

a questo punto penso che ti manchi la g nella tastiera ...

Non c'è nessun bisogno della ricorsività ma prova a mostrare la tua funzione e ne parliamo ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
yaroze61 (Normal User)
Newbie


Messaggi: 10
Iscritto: 07/02/2012

Segnala al moderatore
Postato alle 15:55
Giovedì, 13/03/2014
Allora entriamo nel serio della funzione:

la mia stringa iniziale è: 1C1D1A1B1A1B1A1B1A1B

Il valore 1 prima della lettera indica quante colte è ripetuta la lettera, per usare la mia funzione converto la mia stringa in: 0001C0001D0001A0001B0001A0001B0001A0001B0001A0001B

la stringa di uscita dalla mia funzione sarà:
1C1D
4(1A1B)

ma se io raddoppio la stringa iniziale: 1C1D1A1B1A1B1A1B1A1B1C1D1A1B1A1B1A1B1A1B la converto come sopra, la stringa di uscita sarà:

2(1C1D1A1B1A1B1A1B1A1B)

invece sarebbe più corretto: 2(1C1D4(1A1B)))

Spero di essere stato chiaro, ecco il codice:



Ingresso: sNota =  0001C0001D0001A0001B0001A0001B0001A0001B0001A0001B

Uscita: CompattaStringa = 1C1D
                                        4(1A1B)



Codice sorgente - presumibilmente VB.NET

  1. Public Function CompattaStringa(ByVal sNota As String) As String
  2.  
  3.     Dim sNewRigaNot    As String
  4.     Dim fValue         As Single
  5.     Dim sRiga          As String
  6.     Dim sRgNota        As String
  7.     Dim bFind          As Boolean
  8.     Dim fIncr          As Single
  9.     Dim fConta         As Single
  10.     Dim sNotaCalcolata As String
  11.     Dim sNoRip         As String
  12.     Dim lPos1          As Long
  13.     Dim lPos2          As Long
  14.     Dim fId            As Single
  15.     Dim fVolte         As Single
  16.     Dim sNume          As String
  17.     Dim fIncremento    As Single
  18.     Dim sParte         As String
  19.  
  20.     fIncremento = 5
  21.    
  22.     sRgNota = sNota & Space$(fIncremento)
  23.        
  24.     sRiga = ""
  25.     fConta = 1
  26.    
  27.     fIncr = fIncremento
  28.     Do
  29.       Do
  30.         If Mid$(sRgNota, 1, fIncr) = Mid$(sRgNota, (fConta * fIncremento) + 1, fIncr) Then
  31.            bFind = True
  32.         Else
  33.            fIncr = fIncr + fIncremento
  34.            fConta = fConta + 1
  35.         End If
  36.       Loop Until fIncr > Int((Len(sRgNota)) / 2) Or bFind
  37.    
  38.       If bFind = False Then
  39.          sParte = Mid$(sRgNota, 1, fIncremento)
  40.          sNoRip = sNoRip & CStr(Val(Left(sParte, 4))) & Right$(sParte, 1)
  41.          sRgNota = Mid$(sRgNota, fIncremento + 1)
  42.       End If
  43.      
  44.       If bFind And Len(sNoRip) <> 0 Then
  45.          sNotaCalcolata = sNotaCalcolata & sNoRip & vbCrLf
  46.          sNoRip = ""
  47.       End If
  48.      
  49.       If bFind Then
  50.          sRiga = Left(sRgNota, fIncr)
  51.          fVolte = 1
  52.          Do
  53.            fVolte = fVolte + 1
  54.          Loop Until Mid$(sRgNota, (fVolte * fIncr) + 1, fIncr) <> sRiga
  55.    
  56.          sRgNota = Mid$(sRgNota, (fVolte * fIncr) + 1)
  57.          
  58.          sNume = sRiga
  59.          sRiga = ""
  60.          For fId = gnControllo To Len(sNume) - 1 Step fIncremento
  61.              sParte = Mid$(sNume, fId + 1, fIncremento)
  62.              sRiga = sRiga & CStr(Val(Left(sParte, 4))) & Right$(sParte, 1)
  63.          Next
  64.    
  65.          sNotaCalcolata = sNotaCalcolata & CStr(fVolte) & "(" & sRiga & ")" & vbCrLf
  66.          
  67.       End If
  68.      
  69.       fIncr = fIncremento
  70.       bFind = False
  71.       fConta = 1
  72.    
  73.     Loop Until StrClean(sRgNota) = ""
  74.    
  75.     If Len(sNoRip) <> 0 Then
  76.        sNotaCalcolata = sNotaCalcolata & sNoRip & vbCrLf
  77.        sNoRip = ""
  78.     End If
  79.    
  80.     CompattaStringa = sNotaCalcolata
  81.        
  82. End Function












PM Quote
Avatar
yaroze61 (Normal User)
Newbie


Messaggi: 10
Iscritto: 07/02/2012

Segnala al moderatore
Postato alle 15:56
Giovedì, 13/03/2014
Il codice è per VB6...

PM Quote
Avatar
yaroze61 (Normal User)
Newbie


Messaggi: 10
Iscritto: 07/02/2012

Segnala al moderatore
Postato alle 22:45
Domenica, 16/03/2014
Ciaooo,
capisco la difficoltà, ma possibile che nessuno abbia una idea, non chiedo il codice, bhe se ci fosse meglio, ma una piccola idea per lo sviluppo. Devo risolvero questo problema per fine settimana...

Grazieeeeeeeeeeeeeeeeeeeee:(:(:(:(:(:(:(

PM Quote
Avatar
yaroze61 (Normal User)
Newbie


Messaggi: 10
Iscritto: 07/02/2012

Segnala al moderatore
Postato alle 22:47
Giovedì, 20/03/2014
Ciao a tutti,
dai ragazzi una piccola idea...da solo non riesco... grazieeeeeeeeeeeeeeeeeeee:d:d:k:

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo