Tableau : inverser deux valeurs - C++ - Programmation
Marsh Posté le 10-01-2007 à 14:59:06
Salut,
D'après la taille de ton tableau que tu annonces, tu fais 2 fois un dépassement:
* for de 0 à 6 inclus,
* et inversion de 6 avec 7 (qui sont tous les 2 hors limites)
J'imagines que l'erreur vient de là? Par contre, si tu expliquais le "ne marche pas", ça nous aiderait un peu plus.
Edit: pas besoin non plus de faire 2 valeurs temporaires, 1 seule suffit.
Marsh Posté le 10-01-2007 à 14:59:33
Exemple :
j'ai cette série :
20004 - 20003 - 20008 - 20006 - 20007 - 20001
et une fois classé j'obtiens :
20003 - 20004 - 20006 - 20007 - 20001 - 20001
Marsh Posté le 10-01-2007 à 15:01:02
Ca c'est parce que tu n'obtiens pas un tableau trié de cette façon en une seule passe, puisque tu n'inverses que 2 valeurs à la fois sans vérifier les précédentes.
Marsh Posté le 10-01-2007 à 15:02:41
20003 - 20004 - 20006 - 20007 - 20001 - 20001
Ce 20001 n'est pas un problème en soit, c'est normal qu'il soit là, car il faudrait que je recommence le tri plusieurs fois pour que toi soit ordonné correctement.
C'est le dernier 20001 qui me gène...
Marsh Posté le 10-01-2007 à 15:07:16
IrmatDen a écrit : Salut,Edit: pas besoin non plus de faire 2 valeurs temporaires, 1 seule suffit. |
Exact, très juste.
Marsh Posté le 10-01-2007 à 15:09:29
ReplyMarsh Posté le 10-01-2007 à 15:09:36
Et si tu enlèves le dépassement de capacité et fait autant de passes que nécessaire?
Marsh Posté le 10-01-2007 à 15:10:34
Taz a écrit : std::sort(tableau, tableau + N) ou N est la taille de ton tableau. |
C'est la solution rapide ça, mais notre professeur a voulu nous compliquer la tache...
Marsh Posté le 10-01-2007 à 15:12:34
Nichlas a écrit : Bonjour,
|
C'est pas un tri à bulles, que tu veux faire ?
http://fr.wikipedia.org/wiki/Tri_%C3%A0_bulles
Marsh Posté le 10-01-2007 à 15:16:00
boulgakov a écrit : C'est pas un tri à bulles, que tu veux faire ? |
Si dans l'esprit c'est ça, mais il y a certains trucs que je ne peux pas utiliser, on est strictement limité par notre professeur. Bool, true, false... pas le droit.
Marsh Posté le 10-01-2007 à 15:18:47
IrmatDen a écrit : Et si tu enlèves le dépassement de capacité et fait autant de passes que nécessaire? |
Bon, j'ai mis mon "for" de 0 à 4 et maintenant ça marche
Marsh Posté le 10-01-2007 à 17:45:50
Nichlas a écrit : Si dans l'esprit c'est ça, mais il y a certains trucs que je ne peux pas utiliser, on est strictement limité par notre professeur. Bool, true, false... pas le droit. |
C'est moi ou de nombreux soi-disant profs d'infos se croient malins en imposant ce genre de limitations stupides ?
Marsh Posté le 10-01-2007 à 17:47:23
Quand on parcourt un tableau de N cases, la bonne facon de le faire est :
Code :
|
Juste pour dire de ne pas utiliser le <= mais le <.
Marsh Posté le 10-01-2007 à 19:40:42
Si tu veux inverser deux valeurs, tu peux aussi le faire au niveau binaire sans redéclarer de variable temporaire :
exemple :
int a =1;
int b =2;
a ^= b;
b ^= a;
a ^= b;
C'est illisible, mais ca marche
Marsh Posté le 10-01-2007 à 22:24:22
did-54 a écrit : Si tu veux inverser deux valeurs, tu peux aussi le faire au niveau binaire sans redéclarer de variable temporaire : |
Absolument pas illisible ! Ca se démontre d'ailleurs très simplement
Posons
Mais comme on a utilisé les notations "a1", "a2" et "b1" pour montrer que les variables changaient de contenu mais que ce sont quand-même les mêmes variables, cela revient à dire qu'au final, on a "a" qui a pris le contenu de "b" et "b" qui a pris le contenu de "a".
Marsh Posté le 10-01-2007 à 22:27:19
Nichlas a écrit : Si dans l'esprit c'est ça, mais il y a certains trucs que je ne peux pas utiliser, on est strictement limité par notre professeur. Bool, true, false... pas le droit. |
Change d'école et demande un remboursement. Ton prof est manifestement un con fini.
Marsh Posté le 10-01-2007 à 22:46:59
Joel F a écrit : Change d'école et demande un remboursement. Ton prof est manifestement un con fini. |
Pas forcément. Il peut avoir envie de forcer les élèves à réfléchir par eux-même pour trouver un algo simple qui résoudra un problème simple sans passer par un truc tout fait ; ce qui les aidera ensuite à trouver des algo plus complexes pour résoudre des problèmes plus complexes (évidemment je dis ça pour le coup du "sort" qui est interdit car je ne vois vraiment pas en quoi le fait d'interdire "bool" ou "false/true" va plus affuter l'esprit des élèves)...
Marsh Posté le 11-01-2007 à 13:37:32
Sve@r a écrit : Absolument pas illisible ! Ca se démontre d'ailleurs très simplement
Mais comme on a utilisé les notations "a1", "a2" et "b1" pour montrer que les variables changaient de contenu mais que ce sont quand-même les mêmes variables, cela revient à dire qu'au final, on a "a" qui a pris le contenu de "b" et "b" qui a pris le contenu de "a". |
J'suis d'accord, mais c'est quand même moins intuitif
Sauf quand tu as l'habitude évidemment !
Marsh Posté le 11-01-2007 à 14:03:17
did-54 a écrit : J'suis d'accord, mais c'est quand même moins intuitif |
sauf que ça sert à rien sauf si tu veux échanger deux registres sur une controlleur à 2 registres
Marsh Posté le 11-01-2007 à 14:58:40
Nichlas a écrit : Si dans l'esprit c'est ça, mais il y a certains trucs que je ne peux pas utiliser, on est strictement limité par notre professeur. Bool, true, false... pas le droit. |
L'implémentation en Pascal proposée sur la page Wikipedia n'utilise pas de variables booléennes. L'adaptation en n'importe quel langage que tu utilises ne devrait pas poser de problème. Par contre il faut tout de même vérifier que l'algo est OK, ça reste Wikipedia.
Marsh Posté le 11-01-2007 à 21:33:37
Sve@r a écrit : |
le sort ok, mais le bool interdit excuse moi
Marsh Posté le 10-01-2007 à 14:51:28
Bonjour,
j'ai un tableau (1 dimension, taille 6) avec différentes valeurs. Pour réorganiser ces valeurs de la plus petite à la plus grande, je veux utiliser une comparaison.
Si le contenu de la case N et plus grand que celui de la case N+1, alors on inverse ces deux valeurs.
J'avais utilisé ça, mais ça ne marche pas : (deux variables sont déclarées initialement, save1 et save2)
Je suppose que l'erreur se situe à ce niveau, car ailleurs, je ne vois vraiment pas ce qui peut clocher...
Merci de votre aide