Ordre croissant [Résolu/Fermé]

Signaler
-
 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

Messages postés
16358
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
7 juin 2021
2 842
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]
Merci pour l'idée, mais est ce que ma proposition est faut ?
Messages postés
16358
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
7 juin 2021
2 842
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
Merci, t'as raison, mais svp pouvez vous me redirigé vers une solution.
Messages postés
16358
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
7 juin 2021
2 842
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.
Merci bien pour la qualité d'explication, très gentil :)