with Gada.Text_IO ;
with Rois ;
procedure Mission4 is
package Txt renames GAda.Text_IO ;
-- Renvoie le nom du roi ayant régné le plus longtemps parmi ceux ayant régné dans la période indiquée.
function Plus_Long_Periode(Debut_Periode : Integer ; Fin_Periode : Integer) return String is
--
-- On ne peut pas faire de variable de type String.
-- On mémorise le numéro du gagnant, plutôt que son nom.
-- Si on ne trouve personne, le numéro sera -1.
--
Gagnant: Integer := -1 ;
-- Durée du règne max. On initialise petit.
Regne_Max : Integer := -99 ;
-- Variables pour raccourcir l'écriture
Deb, Fin : Integer ;
begin
for N in 1..Rois.Nb_Rois loop
Deb := Rois.Debut(Roi => N) ;
Fin := Rois.Fin(Roi => N) ;
-- Le roi N a-t-il régné un moment pendant la période ?
-- L'intervalle [a;b] admet une intersection non vide avec l'intervalle [c;d]
-- si et seulement si b >= c et a <= d
if Fin >= Debut_Periode and Deb <= Fin_Periode
-- et a-t-il régné plus longtemps que le gagnant actuel ?
and Fin - Deb >= Regne_Max
then
Regne_Max := Fin - Deb ;
Gagnant := N ;
end if ;
end loop ;
-- Renvoyer le nom du gagnant, ou "Aucun Roi"
if Gagnant = -1 then
return "Aucun Roi" ;
else
return Rois.Nom(Gagnant)
-- Cette partie n'est pas demandée dans le sujet
& " " & Integer'Image(Regne_max) & " ans." ;
end if ;
end Plus_Long_Periode ;
begin
Txt.Put_Line(Plus_Long_Periode(400, 850)) ;
Txt.Put_Line(Plus_Long_Periode(559, 850)) ;
Txt.Put_Line(Plus_Long_Periode(800, 1200)) ;
Txt.Put_Line(Plus_Long_Periode(1880, 2020)) ;
end Mission4 ;