Télécharger @mod.procedur

Retour à la liste

Numérotation des lignes :

  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 - Tous droits réservés.
Mentions légales