with ada.text_io; use ada.text_io; with ada.integer_text_io; use ada.integer_text_io; with ada.exceptions; use ada.exceptions; -- When using gnat, requires -gnato option to enable overflow checks procedure table4 is -- Precondition: sPow, fPow in 1 .. 99 procedure putHeader(sPow, fPow: Integer) is begin -- First column put(" I"); -- Columns for powers for i in sPow .. fPow loop if i in 1 .. 9 then put(" I**"); else put(" I**"); end if; put(i, 1); end loop; new_line; -- Add one to fPow to account for column for I for i in sPow .. fPow + 1 loop put("-----------"); end loop; new_line; end putHeader; procedure putRows(sInt, fInt, sPow, fPow: Integer) is tempInt: Integer; overflow: Boolean; begin for i in sInt .. fInt loop put(i); for j in sPow .. fPow loop overflow := false; begin tempInt := i ** j; exception when Constraint_Error => overflow := true; end; if not overflow then put(tempInt); else put(" ********"); end if; end loop; new_line; end loop; end putRows; procedure getOneItem( item: out Integer; prompt: String; lowerBound: Integer; errorMsg: String) is begin loop begin put(prompt); get(item); exit when item > lowerBound; put_line(errorMsg); exception when Data_Error => new_line; put_line("Must enter a valid integer value."); -- Discard anything left on input line skip_line; when e: others => new_line; put_line("Unknown exception occurred."); put_line("Bailing out!"); raise Program_Error with exception_name(e); -- exit; end; end loop; end getOneItem; procedure getData(sI, fI, sP, fP: out Integer) is begin getOneItem(sI, "Enter starting integer", -1, "Integer must be non-negative"); getOneItem(fI, "Enter ending integer", sI, "Ending integer must be larger than starting"); getOneItem(sP, "Enter starting power", -1, "Power must be non-negative"); getOneItem(fP, "Enter ending power", sP, "Ending power must be larger than starting"); end getData; startI, finishI: Integer; startPower, finishPower: Integer; begin getData(StartI, finishI, startPower, finishPower); new_line; putHeader(startPower, finishPower); putRows(startI, finishI, startPower, finishPower); end table4;