Aide en VB

Bonjour,
J'ai un petit programme (scolaire) à faire en VB, mais je ne vois pas comment le faire.

voila l'énoncé :

Soit S une suite de nombre entiers positifs ordonnés par ordre croissant. Ecrire un algorithme permettant de déterminer la longueur L de la plus longue sous-suite extraite de S et ne comportant que des éléments identiques.
Exemple : pour S= (1, 2, 2, 7, 7,7 ,8 ,9 ,9) on a L=3

Si quelqu'un avait une piste pour m'aider, je ne sais même pas quelle fonction itérative utiliser.

Merci
Configuration: Windows XP
Firefox 2.0.0.9

11 réponses

  1. Bonsoir,

    Tu lis ta premiere occurence et tu la compare aux autres. Tu comptes le nbre de fois ou c'est égale.

    Tu passes à la seconde occurence tu la compares (tu evites de la comparer à ellle meme bien sur ;p) tu comptes le nbre de fois.

    En utilsant deux variable (dernier comptage - nouveau comptage) tu les compares pour savoir si l'une est superieur à l'autre ...

    Tu fais ceci jusqu'à la dernière occurence ...
    1. Merci !

      hum hum,
      Je vais essayer comme tu m'as dis
      réponse dans quelques temps
      1. Sérieux, j'ai du mal.
        en langage progress, j'y arrive mieux... mais là
        je m'accroche quand meme mais je bloque à "Tu lis ta premiere occurence et tu la compare aux autres" (au début quoi lol) en effet, j'ai du mal à voir comment comparer la 1ere aux autres car "les autres" ne sont pas encore saisies

        je ne sais pas si j'ai réussi à m'expliquer...
        1. ton lien m' ammene en bas de page :(
          1. lol ...

            Il faut utiliser 2 boucles :

            Pour i = 0 jusqu'a Indice max du tableau contenant les valeurs
            
               Pour j = 0 jusqu'a Indice max du tableau contenant les valeurs
            
                    Si valeur de tableau(i) = valeur de tableau(j)
             
                    Fin si
            
               Fin Pour
            
            Fin Pour


            Yaka maintenant ;p
        2. j'ai pourtant bien essayé de suivre ce que tu m'as dis entre 2 réveils de ma fille :) mais les résultats que j'ai sont incorrects.
          voici le programme
          Const N = 10
          Dim tab(N) As Integer
          Dim i As Integer
          Dim X As Integer
          Dim J As Integer
          Dim St As Integer

          Sub Main()

          For i = 1 To N
          tab(i) = InputBox("Nombre ?")
          Next
          For i = 1 To UBound(tab, 1)
          For J = i + 1 To UBound(tab, 1)
          If tab(i) > tab(J) Then
          St = tab(i)
          tab(i) = tab(J)
          tab(J) = St
          End If
          Next
          Next

          X = 0

          For i = 0 To N
          For J = 0 To N
          If tab(i) = tab(J) Then
          X = X + 1

          End If
          Next
          Next
          MsgBox(X)

          End Sub
          1. Const N = 10
                Dim tab(N) As Integer
                Dim i As Integer
                Dim X As Integer
                Dim J As Integer
                Dim St As Integer
            
            
                Sub Main()
            
                    For i = 1 To N
                        tab(i) = InputBox("Nombre ?")
                    Next
                    For i = 1 To UBound(tab, 1)
                        For J = i + 1 To UBound(tab, 1)
                            If tab(i) > tab(J) Then
                                St = tab(i)
                                tab(i) = tab(J)
                                tab(J) = St
                            End If
                        Next
                    Next
            
                    X = 0
            
                    For i = 0 To N
                        For J = 0 To N
                            If tab(i) = tab(J) Then
                                X = X + 1
            
                            End If
                        Next
                    Next
                    MsgBox(X)
            
                End Sub
            


            c'est peut etre plus clair comme ça
            1. Je ne comprend pas cette partie :
                      For i = 1 To UBound(tab, 1)
                          For J = i + 1 To UBound(tab, 1)
                              If tab(i) > tab(J) Then
                                  St = tab(i)
                                  tab(i) = tab(J)
                                  tab(J) = St
                              End If
                          Next
                      Next
              


              Par contre je suis d'accord avec celle ci :

                      X = 0
              
                      For i = 0 To N
                          For J = 0 To N
                              If tab(i) = tab(J) Then
                                  X = X + 1
              
                              End If
                          Next
                      Next
              


              Et ton msgbox affiche le nombre de fois ou tt tes chiffres on été egaux ...
          2.    For i = 1 To UBound(tab, 1)
                        For J = i + 1 To UBound(tab, 1)
                            If tab(i) > tab(J) Then
                                St = tab(i)
                                tab(i) = tab(J)
                                tab(J) = St
                            End If
                        Next
                    Next


            cette partie est un code qui me permet de trier mes données dans un ordre croissant

            mais si tu fais un essai, par exemple, tu rentre que des "1", le résultat est de 101 :S
            1. Oupsss ...

              Pas besoin de tri dans ton cas :

              Dim iCpt1 As Integer
              Dim iCpt2 As Integer
              
              Dim iVal As Integer
              Dim iNbOld As Integer
              Dim iNbNew As Integer
              
              Dim aTab
              
              iCpt1 = 0
              iCpt2 = 0
              
              iNbNew = 0
              iNbOld = 0
              
              aTab = Array(1, 2, 2, 7, 7, 7, 8, 9, 9)
              
              For iCpt1 = 0 To UBound(aTab)
                  For iCpt2 = 0 To UBound(aTab)
                      
                      If aTab(iCpt1) = aTab(iCpt2) Then
                          iNbNew = iNbNew + 1
                          
                      End If
                  
                  Next iCpt2
                  
                  If iNbNew > iNbOld Then
                      iNbOld = iNbNew
                      iVal = aTab(iCpt1)
                  End If
                  
                  iNbNew = 0
              
              Next iCpt1
              
              MsgBox "And the winner issss ... le " & iVal & " compté " & iNbOld & " fois."
              


              Tu peux aussi essayer en utilisant d'autres types de boucles : While, Until, Loop ...
            2. @ShaBooça c'est chouette merci
              j'aurai vraiment continuer à avoir du mal sinon

              je vous remercie tous les deux et particulièrement ShaBoo pour son sens de l'aide et de la passion

              bonne soirée
            3. @VincentGTu pourras raconter une histoire de Loop à ta fille ... ;p

              NeNuit
          3. je te conceil pour ton probleme scolaire de faire comme suit
            utiliser des boucles itératives comme tantque .............faire
            increment tant que tu as des valeurs identiques et superieur
            sortir de la premiere boucle
            l'idee ici si tu utilise un tableau ce prserver les compteurs pour pouvoir afficher la séquences la plus longue
            refaire le travail en incrementant de +1 ton compteur avec la boucle repeter...........jusqu'à la fin tu tableau
            à la sortie de traitement tu doit avoir un compteur de depart pour la séquence et un compteur d'arriver
            ***************************
            bon travail
            la programmation à besion de pertinnece et ne baisse pas les mains à toi de programmmer tous ca