Bonjour,
Je souhaiterai une aide sur le codage d’un algorithme de tri, UNIQUEMENT avec des IF
J’ai 4 variables Tata, Tete,Titi, Toto. Chacune ayant une valeur positive.
L’algorithme devra classer les positions des variables par ordre croissant.
Avec Max() et Min() , j’obtiens les positions extrêmes. Je bute sur l’identification des 2 variables intermédiaires pour pouvoir leur affecter leur positionnement.
Merci.
En effet sans un tableau c’est compliqué de trier des valeurs contenus dans des variables.
Tu as de la chance si tu en as que 4 à trier cependant 😉
Puisque tu connais déjà le premier et le dernier grâce à MIN et MAX, tu peux facilement trier ceux intermédiaire en testant si leurs valeurs est différentes des premiers et derniers.
Admettons que tata et toto soient les premiers et derniers, alors tu testes simplement si tete > titi et tete <> tata et tete <> toto. Si la réponse est vrai, alors tete est la deuxième valeur du tri.
Merci Nicolas pour la solution pour 4 variables.
La “chance n’est plus de mon coté, je pense que je vais avoir besoin de 6 variables à trier.
Sans tableaux et sans boucle c’est “un poil compliqué” 🙂
Je dirai mission impossible, à moins de tester un ensemble de boucles imbriquées, mais ça ne me dit rien qui vaille …
Pour le fun, j’ai tenté l’exercice avec 6 variables, avec comme contrainte dans l’esprit de la requête: que des if, pas de boucle for ni de boucle while
Si on comparait tout à la fois à coups de if imbriqués ça donnerait une usine à gaz, mais si on fait un peu de tri dans des variables intermédiaires, si je me suis pas trompé, c’est pas aussi long qu’on pourrait le craindre:
//
// Trier 6 variables avec uniquement des if, pas de boucle for to, ni de while do
// Noobywan 2019.08.28 pour ProRealCode
//
// Les 6 variables désordonnées de départ sont a1 à a6
a1=3
a2=2.35
a3=4.5
a4=7
a5=-1
a6=0
b1=min(a1,min(a2,min(a3,min(a4,min(a5,a6)))))
b2=a2
b3=a3
b4=a4
b5=a5
b6=a6
if a2=b1 then
b2=a1
elsif a3=b1 then
b3=a1
elsif a4=b1 then
b4=a1
elsif a5=b1 then
b5=a1
elsif a6=b1 then
b6=a1
endif
c2=min(b2,min(b3,min(b4,min(b5,b6))))
c3=b3
c4=b4
c5=b5
c6=b6
if b3=c2 then
c3=b2
elsif b4=c2 then
c4=b2
elsif b5=c2 then
c5=b2
elsif b6=c2 then
c6=b2
endif
d3=min(c3,min(c4,min(c5,c6)))
d4=c4
d5=c5
d6=c6
if c4=d3 then
d4=c3
elsif c5=d3 then
d5=c3
elsif c6=d3 then
d6=c3
endif
e4=min(d4,min(d5,d6))
e5=d5
e6=d6
if d5=e4 then
e5=d4
elsif d6=e4 then
e6=d4
endif
f5=min(e5,e6)
f6=e6
if e6=f5 then
f6=e5
endif
// Les 6 variables d'arrivée dans l'ordre croissant sont b1, c2, d3, e4, f5, f6
return b1 as "1er", c2 as "2e", d3 as "3e", e4 as "4e", f5 as "5e", f6 as "6e"
Merci Noobywan , j’aurai pu trouver la solution, mais il m’aurait fallu 3 ans de réflexions ^^
En m'inspirant de l'approche de Noobywan.
Rem Trier 6 variables avec uniquement des if, pas de boucle for to, ni de while do
Rem Les 6 variables désordonnées de départ sont a1 à a6
a1=3
a2=2.35
a3=4.5
a4=7
a5=-1
a6=0
Rem 1° position
Rem ¯¯¯¯¯¯¯¯¯¯¯
b1=min(a1,min(a2,min(a3,min(a4,min(a5,a6)))))
Rem 6° position
Rem ¯¯¯¯¯¯¯¯¯¯¯
c1=max(a1,max(a2,max(a3,max(a4,max(a5,a6)))))
Rem Swap
if c1=a1 then
a1=b1
elsif c1=a2 then
a2=b1
elsif c1=a3 then
a3=b1
elsif c1=a4 then
a4=b1
elsif c1=a5 then
a5=b1
elsif c1=a6 then
a6=b1
endif
Rem 5° position
Rem ¯¯¯¯¯¯¯¯¯¯¯
d1=max(a1,max(a2,max(a3,max(a4,max(a5,a6)))))
Rem Swap
if d1=a1 then
a1=b1
elsif d1=a2 then
a2=b1
elsif d1=a3 then
a3=b1
elsif d1=a4 then
a4=b1
elsif d1=a5 then
a5=b1
elsif d1=a6 then
a6=b1
endif
Rem 4° position
Rem ¯¯¯¯¯¯¯¯¯¯¯
e1=max(a1,max(a2,max(a3,max(a4,max(a5,a6)))))
Rem Swap
if e1=a1 then
a1=b1
elsif e1=a2 then
a2=b1
elsif e1=a3 then
a3=b1
elsif e1=a4 then
a4=b1
elsif e1=a5 then
a5=b1
elsif e1=a6 then
a6=b1
endif
Rem 3° position
Rem ¯¯¯¯¯¯¯¯¯¯¯
f1=max(a1,max(a2,max(a3,max(a4,max(a5,a6)))))
Rem Swap
if f1=a1 then
a1=b1
elsif f1=a2 then
a2=b1
elsif f1=a3 then
a3=b1
elsif f1=a4 then
a4=b1
elsif f1=a5 then
a5=b1
elsif f1=a6 then
a6=b1
endif
Rem 2° position
Rem ¯¯¯¯¯¯¯¯¯¯¯
g1=max(a1,max(a2,max(a3,max(a4,max(a5,a6)))))
Rem Les 6 variables d'arrivée dans l'ordre croissant
return b1 as "1°position", g1 as "2°position", f1 as "3°position", e1 as "4°position ", d1 as "5°position", c1 as "6°position"
En remerciant Noobywan pour son approche, j’ai pondu une une variante pour le fun aussi 🙂