-- Demonstrate named loops.
--
-- Find the value of start such that the sum of 50 or fewer numbers
-- starting at start is more than 1_000.

with ada.text_io; use ada.text_io; 
procedure loops_named  is 
    i, count, start, sum: Natural;
    or_fewer: constant := 50;
    max_value: constant := 1_000;
begin
    start := 0;
    outer:                          -- Give loop a name
    loop
        start := start + 1;

        sum := 0;
        inner:                      -- Give loop a name
        for i in start .. start + or_fewer - 1 loop
            sum := sum + i;
            exit outer when sum >= max_value;   -- Specify which to exit
        end loop inner;             -- Indicate which loop is ending
    end loop outer;

    put_line(start'img & sum'img);

    -- Check results by printing partial sums and the count
    count := 0;
    sum := 0;
    i := start;
    check_loop: while sum < max_value loop
        count := count + 1;
        sum := sum + i;
        put(sum'img);
        i := i + 1;
    end loop check_loop;
    new_line;
    put_line(count'img);
end loops_named;