Source PostScript (traitement.pps)

Retour Texte non formaté
%%%%%%%%%%%%%%%%%%%%%%%% 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