Vous êtes sur la page 1sur 5

Durée 

: 2 heures Année universitaire : 2019-2020


Documents non autorisés
Licence 1 (SRIT, RTEL et SIGL)

DEVOIR SURVEILLÉ :
ALGORITHMIQUE AVANCÉE
Correction
Vous êtes informaticien au ministère de l’intérieur de Cote d’Ivoire. Le ministre vous demande
d’écrire une petite application qui va lui permettre de gérer le recensement de la population. On
suppose que la population est stockée dans une liste simplement chainée. Une personne est
identifiée par un numéro d’identité, son nom, son genre et son âge.
On considérera dans les exercices, sauf cas contraire les types suivants :

Type LISTE = ^PERSONNE


Type PERSONNE = STRUCTURE
Numero : ENTIER
Nom : CHAINE
 Genre : CARACTERE
Age   : ENTIER
Suivant : LISTE
FINSTRUCTURE

N.B. : La correction tiendra rigoureusement compte des conventions d’écriture des mots clés du
langage de description algorithmique utilisé dans le cours.La propreté de la copie sera prise en
compte.

EXERCICE N°1 (5 points)


Ecrire une PROCEDUREnommée CréationListeCitoyenqui crée la liste de toute
lapopulationde Côte d’Ivoire. L’utilisateur saisira le caractère (0) comme numéro pour terminer
la saisie.

p. 1
PROCEDURECréationListeCitoyen ( (E/S) Tete: LISTE)
VARIABLES
P : LISTE
NumASaisir : ENTIER
NomASaisir : CHAINE
GenreASaisir : CARACTERE
AgeASaisir : ENTIER
DEBUT
Tete¬ Nil
ECRIRE ("SAISIR LE NUMERO DE LA PERSONNE(0 POUR FINIR) :")
LIRE(NumASaisir)
TANTQUENumASaisir<> 0FAIRE
ECRIRE ("SAISIR LE NOM DE LA PERSONNE :")
LIRE(NomASaisir)
ECRIRE ("SAISIR LE GENRE DE LA PERSONNE :")
LIRE(GenrASaisir)
ECRIRE ("SAISIR L’AGE DE LA PERSONNE :")
LIRE(AgeASaisir)
ALLOUER(P)
P^.Numero¬NumASaisir
P^.Nom ¬NomASaisir
P^.Genre ¬GenrASaisir
P^.Age ¬AgeASaisir
P^.Suivant¬Tete
Tete¬ P
ECRIRE ("SAISIR LE NUMERO DE LA PERSONNE (0 POUR FINIR) :")
LIRE(NumASaisir)
FINTANTQUE
FIN

p. 2
EXERCICE N°2 (3 points)
On veut connaitre le nombre de personnespar genre.Ecrire une FONCTIONnommée
cpterPersonneGenrequi renvoie le nombre de personnesdu genre passé en paramètre.Par
exemple à l’appel de la fonction, legenre‘M’ (Masculin) sera transmis au paramètre
val.Compléter l’algorithme suivant :

FONCTIONcpterProduitGenre(Tête : LISTE, val : CARACTERE) : ENTIER


VARIABLE :
nbPersonGenre : ENTIER /* nombre de personnesde ce genre trouvées*/
p : LISTE /* pointeur de parcours de la liste */
DEBUT
nbPersonGenre 0
p Tête
TANTQUE pNILFAIRE
SIP^.Genre = val ALORS
nbPersonGenrenbPersonGenre+ 1
FINSI
p p^.suivant
FINTANTQUE
RETOURNER(nbPersonGenre)
FIN

p. 3
EXERCICE N°3 (6 points)
Ecrire une procédure nommée SupprimerMoins18Ans qui supprime toutes les personnes dont
l’âge est moins de 18 ans, passé en paramètre val.

PROCEDURE SupprimerMoins18Ans((E/S) Tete : Liste, Val : CHAINE)


/* Supprime l'élément dont la valeur est passée en paramètre */
VARIABLES locales
P : Liste /* pointeur de parcours de la liste */
Prec : Liste /* pointeur sur l'élément précédant l'élément à supprimer */
Trouve : /* pointeur sur l'élément à supprimer */
DEBUT
SI Tete <> Nil ALORS
/* la Liste n'est pas vide on peut donc y chercher une valeur à supprimer */
TANTQUE Tete^.Age < Val ALORS
/* l'élément à supprimer est le premier */
Trouve ¬Tete
Tete ¬Tete^.Suivant
DESALLOUER(trouve)
FINTANTQUE
/* l'élément à supprimer n'est pas le premier */
Prec¬Tete /* pointeur précédent */
P ¬Tete^.Suivant /* pointeur courant */
TANTQUE P <> Nil FAIRE
SI P^.Age <Val ALORS
/* L'élément courant doit être supprimer*/
Trouve ¬P
/* on "saute" l'élément à supprimer */
P¬P^.Suivant
Prec^.Suivant ¬P
DESALLOUER(Trouve)
Trouve¬NIL
SINON
/* L'élément courant n'est pas l'élément cherché */
/* on garde la position du précédent */
Prec¬ P
/* on passe à l'élément suivant */
P¬P^.Suivant
FINSI
FINTANTQUE
FINSI
SINON
ECRIRE("La liste est vide")
FINSI
FIN

p. 4
EXERCICE N°4 (3 points)
Écrire une fonction PlusAge qui permet de déterminer l’âge le plus élevé des personnes de la
liste chaînée.
FONCTION PlusAge(tête: liste): Entier
VARIABLES
max: Entier
p: liste
DEBUT
p ← tête
max← P^.age
TANTQUE p<> NILFAIRE
p ← p^.suivant
SI p^.age > max ALORS
max← p^.age
FINSI
FINTANQUE
RETOURNER (max)
FIN

EXERCICE N°5 (3 points)


On considère deux listes chaînées L1 et L2 dont les éléments sont des citoyens ivoiriens. Écrire
uneprocédureconcatenation qui rattache la liste L2 à la suite de la liste L1. Tous les cas
particuliers doivent être pris en compte.

PROCEDUREconcatenation(tete1, tete2: liste)


VARIABLES
p1, p2 : liste
DEBUT
SItete1 <> Nil ALORS
SI tete2 = Nil ALORS
tete2 ← tete1
SINON
p1 ← tete1
TANTQUE p1 <> Nil FAIRE
p1 ← p1^.suivant
FINTANTQUE
p1^.suivant ← tete2
FINSI
FINSI
FIN

p. 5

Vous aimerez peut-être aussi