tri par paire(pascal)

tri par paire(pascal) - Programmation

Marsh Posté le 20-03-2002 à 13:07:29    

salut a tous on ma demender une procedure qui tri un tablau d'entier en metant les impaire devant et les paire derriere(l ordre des nombres n a aucunne importance.que pencez vous de
 
procedure tri_paire(var t:tablau);
var tampon,k,position:integer;
begin
     position:=0;
     for k:=low(t) to high(t) do
 if ((t[k]div2)<>0) then   :gun:  
  begin
       tampon:=t[position];
       t[position]:=t[k];
       t[k]:=tampon;
       inc(position)
  end
end;


---------------
Master [:viiz] c'est moi
Reply

Marsh Posté le 20-03-2002 à 13:07:29   

Reply

Marsh Posté le 20-03-2002 à 14:06:45    

c bon, c doit pas etre la méthode la plus rapide !

Reply

Marsh Posté le 20-03-2002 à 14:56:41    

si vous avez autre chose a me proposer allez y !


---------------
Master [:viiz] c'est moi
Reply

Marsh Posté le 20-03-2002 à 15:05:59    

J'ai tout de même un doute avec le test de parité

Code :
  1. if((t[k] div 2)<>0) then


 
6 / 2 = 3 <> 0
5 / 2 = 2 <> 0 :(
 
faut utiliser le modulo, ou mieux, faire un ET binaire pour tester le bit de poids faible
maintenant en Pascal, je sais pas le faire ...
en C :

Code :
  1. if((t[k] & 1) == 1)    /* & = ET binaire */
  2.         /* impair */
  3.     else
  4.         /* pair */


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 20-03-2002 à 15:11:30    

div donne le reste de la division entiere si je ne me trompe pas :??:


---------------
Master [:viiz] c'est moi
Reply

Marsh Posté le 20-03-2002 à 15:34:43    

nan ça donne le quotient, il faut utiliser mod qui lui donne le reste.
 
low(t) et high(t) c quoi ? les indices de debut et de fin de ton tablo ?


---------------
L'invariance de l'univers lorsqu'on change de referentiel...
Reply

Marsh Posté le 20-03-2002 à 15:40:18    

BigBrother a écrit a écrit :

nan ça donne le quotient, il faut utiliser mod qui lui donne le reste.
 
low(t) et high(t) c quoi ? les indices de debut et de fin de ton tablo ?  




oui,low et high donne les indice extremes de t


---------------
Master [:viiz] c'est moi
Reply

Marsh Posté le 20-03-2002 à 15:46:47    

j'aurais toujours appris un truc :)
euh en fait vu que les tablo sont statiques, tu connais les indices vu que c toi qui les a defini de maniere definitive, pas la peine de faire appel a une fonction pour ça.


---------------
L'invariance de l'univers lorsqu'on change de referentiel...
Reply

Marsh Posté le 20-03-2002 à 15:52:07    

BigBrother a écrit a écrit :

j'aurais toujours appris un truc :)
euh en fait vu que les tablo sont statiques, tu connais les indices vu que c toi qui les a defini de maniere definitive, pas la peine de faire appel a une fonction pour ça.  




oui ,ils sont statique,mais puisque l'interais de faire une procedure c'est qu'elle soit exportable,avec low et high tu peut utiliser n'importe quel tablau,meme si tes indices sont des caracters :sol:

 

[jfdsdjhfuetppo]--Message édité par jawad--[/jfdsdjhfuetppo]


---------------
Master [:viiz] c'est moi
Reply

Marsh Posté le 20-03-2002 à 15:53:49    

merde la modularité, je l'avais oubliée celle-la :o Des semaines qu'on nous fait chier avec ce concept !


---------------
L'invariance de l'univers lorsqu'on change de referentiel...
Reply

Marsh Posté le 20-03-2002 à 15:53:49   

Reply

Marsh Posté le 20-03-2002 à 16:00:11    

BigBrother a écrit a écrit :

merde la modularité, je l'avais oubliée celle-la :o Des semaines qu'on nous fait chier avec ce concept !  




:??: qui te fais chier


---------------
Master [:viiz] c'est moi
Reply

Marsh Posté le 20-03-2002 à 17:33:17    

salut,
 
oui tu utilises le modulo.
Pour le ET binaire, j'avoue ne pas comprendre, qui pourrait m'expliquer ??? :hello:


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
Reply

Marsh Posté le 20-03-2002 à 18:19:25    

un nombre impair aura son bit de poids faible à 1
un nombre pair à 0
3 => 11    15 => 1111
2 => 10    18 => 10010
 
donc il suffit de tester ce bit pour savoir si le nombre est pair ou pas
on fait ca a l'aide d'un ET
 
impair = nombre ET 0000000...00001
soit :
impair = (nombre & 1)
 
si impair vaut 1, alors c'est impair, sinon c'est pair


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 20-03-2002 à 20:32:51    

impair est une fonction pascal?
si oui je ne le savais pas


---------------
Master [:viiz] c'est moi
Reply

Marsh Posté le 20-03-2002 à 22:16:25    

et s'il est divisible par 3 eheh ;)?
 
test classique: mon nombre est une puissance de deux:
x & (x-1) ?= 0
 
Bon c'est totalement OT desole de vous embeter..
 
LEGREG

Reply

Marsh Posté le 20-03-2002 à 23:46:41    

jawad a écrit a écrit :

 
:??: qui te fais chier  




 
les profs de prog dans mon ecole d'ingé :gun:
bon score ce matin en amphi (de prog): 45 personnes sur 110 (presence censée obligatoire)...on se croirait en fac :lol:


---------------
L'invariance de l'univers lorsqu'on change de referentiel...
Reply

Marsh Posté le 20-03-2002 à 23:50:22    

commence par créer 2 listes chainées vides, une pour les nombres pairs et une autre pour les nombres impairs.
ensuite tu prends chaque nombre et tu l'ajoute dans la bonne liste.

Reply

Marsh Posté le 21-03-2002 à 09:28:18    

wave a écrit a écrit :

commence par créer 2 listes chainées vides, une pour les nombres pairs et une autre pour les nombres impairs.
ensuite tu prends chaque nombre et tu l'ajoute dans la bonne liste.  




 
Pas vraiment optimisé au niveau taille mémoire ni longueur du code. Un tableau, une variable temporaire, et un bon vieux tri-bulle (modifié pour l'occasion).


---------------
"Si ça peut déconner, ça va déconner..."
Reply

Sujets relatifs:

Leave a Replay

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