Aide en VB

VincentG Messages postés 49 Statut Membre -  
ShaBoo Messages postés 406 Statut Membre -
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. abdel2007 Messages postés 34 Statut Membre 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
    1
  2. ShaBoo Messages postés 406 Statut Membre 50
     
    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 ...
    0
  3. VincentG Messages postés 49 Statut Membre
     
    Merci !

    hum hum,
    Je vais essayer comme tu m'as dis
    réponse dans quelques temps
    0
  4. VincentG Messages postés 49 Statut Membre
     
    Je vais me coucher,
    je verrai ça demain
    merci quand meme
    0
    1. ShaBoo Messages postés 406 Statut Membre 50
       
      NeNuit ;p
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Polux31 Messages postés 7219 Statut Membre 1 204
     
    salut,

    Shaboo t'as donné la fonction à utiliser.

    ;o)

    polux
    0
  7. VincentG Messages postés 49 Statut Membre
     
    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...
    0
  8. VincentG Messages postés 49 Statut Membre
     
    ton lien m' ammene en bas de page :(
    0
    1. ShaBoo Messages postés 406 Statut Membre 50
       
      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
      0
  9. VincentG Messages postés 49 Statut Membre
     
    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
    0
  10. VincentG Messages postés 49 Statut Membre
     
    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
    0
    1. ShaBoo Messages postés 406 Statut Membre 50
       
      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 ...
      0
  11. VincentG Messages postés 49 Statut Membre
     
       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
    0
    1. ShaBoo Messages postés 406 Statut Membre 50
       
      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 ...
      0
      1. VincentG Messages postés 49 Statut Membre > ShaBoo Messages postés 406 Statut Membre
         
        ç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
        0
      2. ShaBoo Messages postés 406 Statut Membre 50 > VincentG Messages postés 49 Statut Membre
         
        Tu pourras raconter une histoire de Loop à ta fille ... ;p

        NeNuit
        0