Ecrivez un algorithme qui permet de permuter les valeurs de deux variables. quel que soitleur contenu.
-----
Ecrivez un algorithme qui permet de permuter les valeurs de deux variables. quel que soitleur contenu.
Bonjour,
c'est un défi ?
Permuter les valeurs de deux variables est une méthode bestiale.
Permuter les pointeur sur deux variables est plus une méthode plus fine.
C'est demandé tellement gentiment ...
Nous ne sommes pas dans un supermarché!
Commence par respecter la charte, notamment en ce qui concerne les règles de politesse.
Ensuite lis les "post-it" de ce forum et on en reparle.
Bonjour
en voilà un en C
Code:void permute(void *a,void *b,DWORD longueur) { void buf=malloc(longueur); memcpy(buf,a); memcpy(a,b); memcpy(b,buf); }
Dernière modification par gienas ; 17/04/2012 à 18h52. Motif: Ajouté la balise code, obligatoire pour les programmes
Bug : J'ai oublié de supprimer buf, voila ce que c'est de papillonner sur c++,VBA,js,php,html,MySql on fait des mélanges involontaire.
Code:delete buf;
Quand il s'agit, comme c'est très probablement le cas ici, un exercice, il ne faut pas donner la solution, c'est un mauvais service. Il faut donner des pistes.
Rien ne sert de penser, il faut réfléchir avant - Pierre Dac
certes mais on peut glisser des erreurs c'est encore mieux car pour trouver un algorithme ce qui est le plus long c'est de trouver les bugs.
et il y en avait encore 3 autres heureusement identiques
Il fallait donner la longueur à copier dans memcpy car les allocation mémoire ne sont pas bornées en C
Code:memcpy(buf,a,longueur); memcpy(a,b,longueur); memcpy(b,buf,longueur);
Notons qu'ali-zenagui t'a été très reconnaissant pour l'aide apportée. Ça fait toujours plaisir .
Bonjour,
Oui Jack mais c'est pas grave, ça occupe
Encore une erreur, pas grave car le compilateur l'aurait signalé comme pour le memcpy(buf,a) où il manque la longueur
il manque une étoile
buf est un pointeur sur une zone mémoire pas une valeur
Code:void *buf=malloc(longueur);
Petit conseil :
Utilise le passage par référence.
Oui, mais, ali-zenagui (qui a posé la question) lui n'a rien précisé.DomiM ayant bien précisé qu'il s'agissait d'un exemple en C, un passage par référence n'est pas possible.
Bonjour,
Pour un exercice de base comme celui-ci, c'est habituellement en rapport avec C (mais pas forcément quand même ).
De toute manière, la réponse contient une grosse erreur, et si ali-zenagui s'est contenté de faire un copier/coller, il a dû avoir une sale note (en tout cas, ce serait le cas pour mes élèves).
D'accord , mais si on repart effectivement du message d'origine, il n'est même pas question d'écrire une fonction.
Enfin bon, vu l'intérêt qu'ali-zenagui porte aux réponses données, je ne vois pas pourquoi on se donne tant de mal.
Belle mentalité je trouve ...
A+
Bonjour,
Ah,Ah Ah,
En relisant la question d'origine, ali-zenagui n'a pas dit qu'il en avait besoin.
Moi j'ai compris quelque-chose du genre "Vous vous ennuyez, alors voila un petit exercice qui vous fera passez le temps".
Par contre, on aurait pu s'attendre à ce qu'il apporte des corrections, des remarques, des conseils, comme tout individu qui propose un exercice.
Bien sûr, tout ça c'était pour rire.
A la suite d'un pari il y a longtemps, j'avais écrit l'interversion de deux nombres sans variable intermédiare. La seule contrainte : que la somme des variables ne provoque pas d'overflow,
Soient A et B deux variables numériques dont on veut intervertir les valeurs.
A:=A+B
B:=A-B
A:=A-B
ça ne fait pas avancer la science, mais c'est rigolo...
On trouve des chercheurs qui cherchent ; on cherche des chercheurs qui trouvent !
Oui, c'est pas mal.
Et ça donne quoi avec des float ?
A essayer !
Bia,
C'est un problème très classique, et une possibilité plus générale, puisque ne dépendant pas des valeurs :
De plus, ça marche quelle que soit la taille des variables (ça peut demander des casts ou autres trucs pour être appliqué, selon les données à traiter).Code:a = a XOR b b = b XOR a a = a XOR b