%%%%%%%%%%%%%%%%%%%%%%%% les traitements de tableaux %%%%%%%%%%%%%%%%%%
%% syntaxe : [x1 x2 ... xn] traitement --> [valeur1 effectif1 ... valeurj effectifj]
/traitement {
8 dict begin
/xliste exch def
/tmpvaleur xliste length array def
/tmpeffectif xliste length array def
%% initialisation du tableau des effectifs
/i 0 def
tmpeffectif length {
tmpeffectif i 0 put
/i i 1 add store
} repeat
%% remplit le tableau des valeurs prises et le tableau des effectifs
/i 0 def
/k 0 def
xliste length {
xliste i get tmpvaleur in %% xliste [i] est dans tmpvaleur ?
{
/j exch def %% oui, a l'indice j
tmpeffectif j tmpeffectif j get 1 add put %% indice [j] <-- indice [j] + 1
}
{
%% non,
tmpvaleur k xliste i get put %% on le met
tmpeffectif k 1 put %% avec l'effectif 1
/k k 1 add store
}
ifelse
/i i 1 add store
} repeat
%% on cherche ensuite le 1er effectif nul
/i 0 def
tmpeffectif length {
tmpeffectif i get 0 eq {exit} if
/i i 1 add store
} repeat
%% ici, i contient l'indice du 1er effectif nul
%% on definit les tableaux utiles
/valeur i array def
/effectif i array def
/j 0 def
i {
valeur j tmpvaleur j get put
effectif j tmpeffectif j get put
/j j 1 add store
} repeat
%% reste a les poser sur la pile
valeur
effectif
%% puis a les fusionner
fuz
end
} def
|