Exo sur changement de varaibles

Exo sur changement de varaibles - C - Programmation

Marsh Posté le 03-06-2005 à 21:42:00    

Slt all j'ai un exo c celui la:
 
Soit trois variables a,b et c (supposées de type entier). Ecrivez les instructions permutant les valeurs, de sorte que la valeur de a passe dans b, celle de b dans c et celle de c dans a. On utilisera une (et une seule) variable supplémentaire nommée d (de type entier)
 
Moi je propose ceci
d=a
a=c
c=b
b=d  
et selon les 3 solutions que l'on me propose c tt l'inverse!  :(  :??:  COmprend plus rien du tt svp aidez moi

Reply

Marsh Posté le 03-06-2005 à 21:42:00   

Reply

Marsh Posté le 03-06-2005 à 21:43:30    

oui, c'est ça. le truc c'est faire des diagonales.

Reply

Marsh Posté le 03-06-2005 à 21:44:38    

c'est trivial comme algo :sarcastic:. Si tu réfléchis ce qui importe c'est le résultat final (chaque truc là où on veut qu'il soit), ensuite il y a plusieurs façons d'y parvenir (selon ce que tu mets dans d par exemple)...


---------------
Topic .Net - C# @ Prog
Reply

Marsh Posté le 03-06-2005 à 21:46:20    

J'ai bon??? Pourtant ds la solution de mon bouquin, il mette  
d=a
a=b
b=c
c=d
c pas la meme chose? C l'inverse de ce qui est demandé nan?

Reply

Marsh Posté le 03-06-2005 à 23:10:01    

Citation :

a passe dans b, celle de b dans c et celle de c dans a.


 

HITm@n a écrit :

J'ai bon??? Pourtant ds la solution de mon bouquin, il mette  
d=a
a=b
b=c
c=d
c pas la meme chose? C l'inverse de ce qui est demandé nan?


 
Si c'est la solution de ton bouquin, il y a une erreur ou dans l'énoncé, ou dans les solutions, car c'est effectivement l'inverse

Reply

Marsh Posté le 03-06-2005 à 23:41:12    

Merci c bien ce qui me semblait que c t moi qui avait raison et que la soluce du bouquin inversé par raport a l'énoncé! Merci!

Reply

Marsh Posté le 05-06-2005 à 11:00:36    

On peut le faire sans avoir de variable "d"
 
a=a^b
b=a^b
a=a^b
Ici, on a interverti a et b donc la valeur de "a" est dans "b" et inversement
 
a=a^c
c=a^c
a=a^c
Ici, on a interverti a et c donc la valeur de "a" (qui était originellement dans "b" ) est dans "c" et inversement.
Donc, maintenant, la valeur d'origine de "a" se trouve dans "b", celle de "b" se trouve dans "c" et celle de "c" est dans "a"


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 05-06-2005 à 12:13:07    

Pas idiot ça, mais pas plus rapide je pense, non ?

Reply

Marsh Posté le 05-06-2005 à 13:29:22    

voire beaucoup plus lent.


Message édité par Taz le 05-06-2005 à 13:29:32
Reply

Marsh Posté le 06-06-2005 à 15:08:52    

Ué ms moi je commence juste a apprendre dc pas trop vite! Sinon merci pour vos réponses!
 
d'ailleur g rien compris au mess de Sve@r lol

Reply

Marsh Posté le 06-06-2005 à 15:08:52   

Reply

Marsh Posté le 06-06-2005 à 18:03:06    

HITm@n a écrit :

Ué ms moi je commence juste a apprendre dc pas trop vite! Sinon merci pour vos réponses!
 
d'ailleur g rien compris au mess de Sve@r lol


 
Pfff !!! C'est juste une propriété mathématique du "ou exclusif"
 
1) a=a^b => cela va mettre dans "a" le résultat d'un "ou exclusif" calculé sur chaque bit de "a" par rapport à chaque bit de "b"
2) b=a^b => idem mais si on regarde mieux, on a  maintenant dans "b" le résultat de "a^b^b". Or, b^b vaut 0 donc on a maintenant dans "b" la valeur qu'il y avait dans "a"
3) a=a^b encore une fois va mettre dans "a" le calcul de "a^b". Or, dans "a" il y a "a^b" (première opération) et dans "b" il y a "a" (seconde opération). Donc, on a "a=a^b^a". Comme "a^a" vaut 0, on a dans "a" la valeur qu'il y avait dans "b".
Ainsi, au bout des 3 opérations on a interverti "a" et "b" sans utiliser de variable supplémentaire.


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed