Unit uentier;
{ procédures et fonction de base pour calculer avec des entiers longs }

INTERFACE
{ on déclare dans cette partie tout ce qui sera utilisable par
  d'autres programmes ou unités }

Const
 nMax=255; { nombre maximum de chiffres pour un entier }

Type
 { type représentant un entier long }
 Entier=record
  taille : Integer;
  { nombre de chiffres; l'entier n'est pas valide si 0 }
  chiffres : array[1..nMax] of Byte;
  { sauf pour 0 le premier chiffre est toujours différent de 0 }
  end;

Procedure Normalise(var e:Entier);
{ supprime les éventuels 0 du début du tableau de chiffres }

Procedure FaireEntier(S:String; var e:Entier);
{ transforme la chaine de caractères S en un entier e }

Procedure Convertir(n:LongInt; var e:Entier);
{ convertit le LongInt n en entier long e }

Procedure Lire(var e:Entier);
{ entrée de l'entier e au clavier }

Procedure Afficher(e:Entier);
{ affichage de l'entier e }

Procedure Hasard(var e:Entier; l:Integer);
{ crée l'entier e au hasard;
  si l > 0 avec l chiffres
  si l < 0 avec au plus l chiffres }

Function Compare(e1,e2:Entier):Integer;
{ renvoie 1 si e1 > e2, 0 si e1 = e2, -1 si e1 < e2 }

Procedure Permuter(var e1,e2:Entier);
{ remplace e1 par e2 et e2 par e1 }

Procedure Addition(e1,e2:Entier; var e:Entier);
{ renvoie e1+e2 dans e }

Procedure Soustraction(e1,e2:Entier; var e:Entier);
{ renvoie e1-e2 dans e }

Procedure Multiplication(e1,e2:Entier; var e:Entier);
{ renvoie le produit de e1 et e2 dans e }

Procedure Division(e1,e2:Entier; var e,r:Entier);
{ effectue la division euclidienne de e1 par e2, renvoie
  le quotient dans e et le reste dans r }

Procedure AddB(var e:Entier; b:Byte);
{ ajoute le chiffre b à e }

Procedure SousB(var e:Entier; b:Byte);
{ Soustrait le chiffre b de e }

Procedure MultB(var e:Entier; b:Byte);
{ multiplie e par le chiffre b }

Procedure DivB(var e:Entier; b:Byte);
{ divise e par le chiffre b }

Procedure Mult10(var e:Entier);
{ multiplie e par 10 }