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 ;