raised CONSTRAINT_ERROR : romain.adb:21 range check failed
Si je comprends bien l'erreur; elle se situerait sur un intervalle de ma ligne 21:
- Code: Tout sélectionner
Cca(indice..indice+lg):=ChiffreRomain'image(Cro);
Voici le code complet des sous programmes; le but final étant de convertir des nombres romains en nombres compréhensibles par tout le monde^^
Ici il y aura plusieurs sous programmes qui viendront après; mais à priori il y a une erreur dans celui de concatenation qui n'ets pas remarqué à la compilation
- Code: Tout sélectionner
with entrees_sorties;use entrees_sorties;
procedure romain is
ENTIER_MAX:constant integer:=4999;
LG_MAX:constant integer:=20;
subtype EntierRomain is integer range 1..ENTIER_MAX;
type ChiffreRomain is (M,CM,D,CD,C,XC,L,XL,X,IX,V,IV,I);
type NombreRomain is record
ch:string(1..LG_MAX);
Ch_eff:Natural; -- longueur réelle de la chaîne
val:EntierRomain;
end record;
type TabConversion is array (ChiffreRomain range M..I) of Natural;
VAL_ROMAIN: constant TabConversion:=(1000,900,500,400,100,90,50,40,10,9,5,4,1);
procedure concatenation (Cro:in ChiffreRomain;Cca:in out string;indice:in out Natural) is
lg:Natural;
begin
lg:= ChiffreRomain'image(Cro)'length;
Cca(indice..indice+lg):=ChiffreRomain'image(Cro);
indice:=indice+lg;
end concatenation;
Cro:ChiffreRomain:=CD;
indice:Natural:=3;
Cca:string(1..indice);
begin
concatenation(Cro,Cca,indice);
put(CCa);
end romain;
On passera sur d'éventuels nom de variables mal choisies je ne fais que reprendre les noms de variables imposées dans les exercices --'
Si quelqun voit d'où vient le problème je lui en serait bien reconnaissant parce que j'avoie que depuis ce matin je ne trouve pas du tout ce qui empêche la compilation. Mais j'avoue un peu avoir du mal avec les chaîne de caractère donc j'ai peut être fait un truc de travers.