Ordre croissant

Résolu
Anna -  
 Anna -
Bonjour,

Soit l'exercice suivant :

Soit un tableau T de n éléments, déterminer la longueur de la première plus longue séquence de nombres rangés par ordre croissant et le rang de son premier élément.

  
Procédure Monotonie(T : Tab ; Var iplm, Lplm : Entier)
Var
i, j, L : Entier
Début
Lplm<-- 1
iplm<-- 1
pour i de 1 à n Faire
j<-- i + 1
TantQue (T[j] >= T[j-1]) Faire
j<-- j + 1
FinTQ
L<-- j – i + 1
Si (L > Lplm) Alors
iplm<-- i
Lplm<-- L
FinSi
i <-- j
FinPour
Fin


Est ce que la correction ci-dessus est correcte ? est ce que je dois initialiser la valeur de L à 1 avant de l'utiliser ? avec la boucle pour, est ce qu'on peut incrémenter le compteur manuellement comme à la fin de cette procédure ( i <-- j )? Merci en avance .

1 réponse

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Bonjour,

    Je pense que cet algorithme est faisable avec une seule boucle, c'est à dire que la condition
    T[j] >= T[j-1]
    serait plutôt à mettre dans un if de la boucle for afin d'éviter d'avoir un gérer un TantQue.

    Remarque : ce serait plus compréhensible de mettre
    T[j-1] <= T[j]
    0
    1. Anna
       
      Merci pour l'idée, mais est ce que ma proposition est faut ?
      0
    2. KX Messages postés 19031 Statut Modérateur 3 020
       
      pour i de 1 à n  Faire
      j<-- i + 1
      TantQue (T[j] >= T[j-1]) Faire

      Il y a je pense deux erreurs qui résultent de ce
      j <-- i+1
      :
      • À la fin tu vas avoir i=n et j=n+1 donc T[j] va dépasser la taille du tableau n.
      • Le résultat L <-- j - i + 1 va être trop grand. Prenons l'exemple où n=1, donc i=1, j=2, L = 2-1+1 = 2, or on devrait toujours avoir L <= n
      0
    3. Anna
       
      Merci, t'as raison, mais svp pouvez vous me redirigé vers une solution.
      0
    4. KX Messages postés 19031 Statut Modérateur 3 020
       
      Il y a plusieurs façon de le faire.

      Comme je l'indiquais au départ, je pense que l'on peut y arriver sans la boucle j.

      Mais même en gardant la boucle j tu ne dois pas être loin de la solution, il faudrait juste prendre j=i au départ et s'assurer que j ne dépasse jamais n.
      0
    5. Anna
       
      Merci bien pour la qualité d'explication, très gentil :)
      0