From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM autolearn=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,2ac1e7c090dd0c4a X-Google-Attributes: gid103376,public,usenet X-Google-Language: ENGLISH,ASCII Path: g2news1.google.com!news4.google.com!proxad.net!feeder1-2.proxad.net!cleanfeed4-b.proxad.net!nnrp20-1.free.fr!not-for-mail Message-ID: <474531FD.5090401@free.fr> Date: Thu, 22 Nov 2007 08:38:37 +0100 From: Damien Carbonne User-Agent: Thunderbird 1.5.0.13 (X11/20070809) MIME-Version: 1.0 Newsgroups: comp.lang.ada To: DarthBob88 Subject: Re: "Constraint Error: Range Check" That Does Not Always Occur References: <86ddf1f4-c7be-4729-8480-bae618b6d296@a39g2000pre.googlegroups.com> In-Reply-To: <86ddf1f4-c7be-4729-8480-bae618b6d296@a39g2000pre.googlegroups.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit Organization: Guest of ProXad - France NNTP-Posting-Date: 22 Nov 2007 08:38:38 MET NNTP-Posting-Host: 82.247.219.63 X-Trace: 1195717118 news-3.free.fr 30929 82.247.219.63:54311 X-Complaints-To: abuse@proxad.net Xref: g2news1.google.com comp.lang.ada:18558 Date: 2007-11-22T08:38:38+01:00 List-Id: DarthBob88 a �crit : > I've been trying to write a program that creates four random numbers, > to simulate four dice rolling; a D&D simulator, in fact. > Unfortunately, I occasionally get "raised CONSTRAINT_ERROR : test.adb: > 22 range check failed" (line 22 is one of the lines to generate a > random number; it varies between the four). I have been trying to find > information on how to prevent this error, but I can't find anything > about it. I'm extremely new to this language, as in I only started > last week new, so any help would be greatly appreciated. Here follows > my code, warts and all. > > with Ada.Text_IO, Ada.Integer_Text_IO; > with Ada.Numerics.Discrete_Random; > > procedure test is > subtype Die is Integer range 1..6; > --Declare that anything of type Die may be > --an integer, value between 1 and 6, inclusive, and sod-all else. > subtype Dice is Integer range 3*Die'First .. 3*Die'Last; > --Declares that Dice may be anything from 3 to 18. > package Random_Die is new Ada.Numerics.Discrete_Random (Die); Here you instantiate Discrete_Random with Die. Change Die to Dice, it should work. > use Random_Die; > --Random generator; produces an integer between 1 and 6 > sum : Integer := 0; > G: Generator; > D1 : Dice; > D2 : Dice; > D3 : Dice; > D4 : Dice; > --Declare four Dice > begin > Reset(G); > D1 := Random(G); > D2 := Random(G); > D3 := Random(G); > D4 := Random(G); Here, Random should have been instantiated with Dice. > --I Haven't found the error just yet, but a Constraint_Error > --Occasionally comes up for the previous 4 lines > --I haven't been able to find it online, but I presume > --It's because the generator comes up with a number outside of [1,6] > sum := D1 + D2 + D3 + D4; > --Debugging > Ada.Integer_Text_IO.Put(D1); > Ada.Integer_Text_IO.Put(D2); > Ada.Integer_Text_IO.Put(D3); > Ada.Integer_Text_IO.Put(D4); > Ada.Integer_Text_IO.Put(sum); > end test; > --compile Ada programs with gnat make .adb > > If it helps any, I'm using the Windows version of GNAT on XP. Thanks > in advance.