1 : * @MOD PROCEDUR MAUGIS 07/03/27 21:15:19 5671 2 : 'DEBPROC' @MOD I J ; 3 : * Petite procédure donnant n modulo m 4 : * 5 : * Types possibles : entiers, flottants, listreel, listenti 6 : * 7 : * si on donne deux scalaires, si l'un des deux est flottant, on 8 : * convertit l'autre en flottant. 9 : * idem pour des listes. 10 : * 11 : 12 : * indicateur comme quoi on n'a que des entiers en entrée 13 : lent = faux ; 14 : 'SI' ( ('EGA' ('TYPE' i) 'ENTIER') 'OU' 15 : ('EGA' ('TYPE' i) 'LISTENTI') ) ; 16 : 'SI' ( ('EGA' ('TYPE' j) 'ENTIER') 'OU' 17 : ('EGA' ('TYPE' j) 'LISTENTI') ) ; 18 : lent = vrai ; 19 : 'FINSI' ; 20 : 'FINSI' ; 21 : 22 : * on convertit tout en flottants 23 : i = i * 1. ; 24 : j = j * 1. ; 25 : 26 : * indicateur comme quoi on veut un scalaire en sortie 27 : lscal = faux ; 28 : 29 : * on convertit tout en liste 30 : 'SI' ('NEG' ('TYPE' i) 'LISTREEL') ; 31 : 'SI' ('NEG' ('TYPE' j) 'LISTREEL') ; 32 : lscal = vrai ; 33 : i = 'PROG' i ; 34 : j = 'PROG' j ; 35 : n = 1 ; 36 : 'SINON' ; 37 : n = 'DIME' j ; 38 : i = 'PROG' n * i ; 39 : 'FINSI' ; 40 : 'SINON' ; 41 : 'SI' ('NEG' ('TYPE' j) 'LISTREEL') ; 42 : n = 'DIME' i ; 43 : j = 'PROG' n * j ; 44 : 'SINON' ; 45 : n = 'DIME' i ; 46 : 'SI' ('NEG' n ('DIME' j)) ; 47 : 'ERREUR' 'Les deux listes ne sont pas de la même longueur' ; 48 : 'FINSI' ; 49 : 'FINSI' ; 50 : 'FINSI' ; 51 : 52 : 'SI' (('MINIMUM' J) '<EG' 0) ; 53 : 'ERREUR' 'le modulo doit être strictement positif' ; 54 : 'FINSI' ; 55 : 56 : ratio = I / J ; 57 : 58 : * correction nécessaire due à la différence entre l'opérateur ENTI et la 59 : * partie entière d'un réel, pour les valeurs négatives, sauf pour les 60 : * valeurs entières négatives (qui sont correctes). 61 : 62 : li1 = 'PROG' n * 1. ; 63 : ineg = 'MASQUE' ratio 'INFERIEUR' 0. ; 64 : ieg = 'MASQUE' ratio 'EGALE' (('ENTIER' ratio)*1.) ; 65 : rati2 = (('ENTIER' ratio)*1.) + ((ieg - li1) * ineg) ; 66 : 67 : MOD = I - ( rati2 * J ) ; 68 : 69 : 'SI' lent ; 70 : * conversion en listenti (pas de pb car le résultat est positif) 71 : mod2 = mod ; 72 : MOD = 'ENTIER' mod2 ; 73 : 'DETRUIT' mod2 ; 74 : 'FINSI' ; 75 : 'SI' lscal ; 76 : * conversion en scalaire 77 : mod2 = MOD ; 78 : MOD = 'MINIMUM' mod2 ; 79 : 'DETRUIT' mod2 ; 80 : 'FINSI' ; 81 : 82 : * Ménage 83 : 'DETRUIT' li1 ; 84 : 'DETRUIT' ineg ; 85 : 'DETRUIT' ieg ; 86 : 'DETRUIT' ratio ; 87 : 'DETRUIT' rati2 ; 88 : 89 : 'FINPROC' MOD ; 90 :
© Cast3M 2003 - All rights reserved.
Disclaimer