Vous êtes sur la page 1sur 13

Faculté informatique Module ALGO L2-ACAD C

2023/2024 C.Smaili

Série 1
Exercice 1
Le Crible d’Eratostène est un algorithme classique pour énumérer les nombres premiers. Supposons
que nous voulions trouver les nombres premiers plus petits que 10. Commençons par écrire les
nombres de 2 à 10 : 2 3 4 5 6 7 8 9 10
Nous sélectionnons le plus petit (c’est-à-dire : 2), certains qu’il est premier, et nous retirons tous ses
multiples. Après cette première étape, nous avons : 2 3 5 7 9.
A la seconde étape, nous savons que 3 est premier. Nous retirons tous ses multiples. Après cette
seconde étape, nous avons : 2 3 5 7.
A la troisième étape, nous savons que 5 est premier. Nous retirons tous ses multiples. Après cette
étape, nous avons : 2 3 5 7.
A la quatrième étape, nous savons que 7 est premier. Nous retirons tous ses multiples. Après cette
étape, nous avons trouvé les nombres premiers plus petits que 10 :
2 3 5 7

Après l’initialisation d’un tableau avec les entiers suivants : 2…1000, suivre le principe énoncé ci-
dessus pour afficher les nombres premiers plus petits que 1000.

Exercice 2
Le but de cet exercice est de construire le triangle de Pascal (voir le tableau ci-dessous) pour un
nombre de lignes donné. Le nombre de colonnes est égal au nombre de lignes. On envisage ici deux
méthodes : la première utilise un tableau à deux dimensions et la deuxième utilise un tableau à une
dimension.
1. Écrire l’algorithme de construction du triangle de pascal pour un nombre de lignes donné. La
taille maximale de la matrice est de [100,100].
2. Afficher les éléments de cette matrice. Afficher uniquement les éléments du tringle.
3. Écrire une action qui, à partir de la ligne n du triangle de Pascal stockée dans un tableau à une
dimension de taille 100, calcule les valeurs de la ligne n+1 en effectuant une mise à jour du
tableau sans utiliser de tableau intermédiaire. Le tableau est supposé d’une taille suffisante
(n<100).

Exemple pour n = 4 et avec un tableau de taille 10 :


Tab avant l’appel de la procédure : n=4 1 3 3 1 0 0 0 0 0 0

Tab après 1 4 6 4 1 0 0 0 0 0 l’appel de la procédure :


n=5

4. On souhaite imprimer, parmi les 100 premières lignes du triangle de Pascal, toutes celles qui
ne contiennent que des valeurs strictement inférieures à un nombre strictement positif donné
nb>1. Pour résoudre ce problème, on vous demande d’utiliser l’action de la question
précédente pour calculer et afficher une à une les lignes du triangle de Pascal jusqu’à la
première ligne contenant une valeur supérieure ou égale au nombre nb donné strictement
positif. Cette ligne ne sera pas affichée. Si on atteint la ligne 100 sans avoir trouvé, on s’arrête.
La valeur de nb est saisie au clavier. On choisit de ne pas afficher les 0 présents dans une
ligne. Écrire le programme correspondant.

1
Faculté informatique Module ALGO L2-ACAD C
2023/2024 C.Smaili

Exercice 3
Le but de cet exercice est de construire une pyramide composée de N lignes en commençant par un
nombre x donné (voir l’exemple ci-dessous pour x=1). Chaque ligne est calculée en fonction de la
ligne qui la précède en insérant à son début et à sa fin un chiffre C égal à :
(la somme de ses chiffres + sa longueur) mod 10

1
212
82128
6821286
…………………....
……………..………....

On envisage ici deux méthodes :


Méthode 1 : en utilisant un tableau à deux dimensions T[100, 100]
1. Écrire l’algorithme de construction de la pyramide. Le nombre de colonnes doit être un
nombre impair.
2. Afficher les éléments de cette pyramide.

Méthode 2 : En utilisant un tableau à une dimension T1[100]


3. Écrire une action qui, à partir de la ligne i de la pyramide stockée dans un tableau, calcule les
valeurs de la ligne i+1 en effectuant une mise à jour de T1 sans utiliser de tableau
intermédiaire.
4. On souhaite imprimer, parmi les 100 premières lignes de la pyramide, toutes celles auxquelles
le nombre formé par les chiffres du tableau T1 est inférieure à un nombre strictement positif
donné nb > 1.
Pour résoudre ce problème, on vous demande d’utiliser la même solution donnée en 3 pour
calculer et afficher une à une les lignes de la pyramide jusqu’à le première nombre formé par
les chiffres du tableau soit supérieure ou égale au nombre nb. Cette ligne ne sera pas affichée.
Si on atteint la ligne 100 sans avoir trouvé, on s’arrête. La valeur de nb est saisie au clavier.

Exemple : soit nb = 70000000

1 Cette ligne sera affichée car le nombre 1 < nb


212 Cette ligne sera affichée car le nombre 212 < nb
82128 Cette ligne sera affichée car le nombre 82128 < nb
6821286 Cette ligne sera affichée car le nombre 6821286 < nb
068212860 Cette ligne sera affichée car le nombre 068212860 < nb
20682128602 Cette ligne ne sera pas affichée car 20682128602 > nb

2
Faculté informatique Module ALGO L2-ACAD C
2023/2024 C.Smaili

LISTES
Exercice 1
1. Initialiser une liste simplement chaînée avec les entiers suivants : 2…1000.
2. En suivant le principe donné par le Crible d’Eratostène, construire la liste des nombres
premiers plus petits que 1000. Afficher cette liste.

Exercice 2
Ecrire une fonction qui interclasse 2 listes d'entiers triées par ordre croissant (sans perdre les listes
initiales).

Exercice 3
Partie I : Etant donnée la suite suivante ; on part d'un entier P ≥ 2 :
 S’il est pair, on le divise par 2, on obtient P/2
 S’il est impair, on le multiplie par 3 et l'on ajoute 1, on obtient 3×P +1
On recommence avec le nouveau nombre obtenu jusqu’à obtenir le chiffre 1. Dans l’algorithme
principal :
1. Donnez le type de cette liste
2. Lisez un entier positif P ≥ 2 puis créez sa suite. Exemple : pour P =5, on obtient :
3. Affichez cette suite
T 5 16 8 4 2 1

Partie II : A partir de la liste T (voir la question 2), créez 2 listes T1 et T2 contenant respectivement les
nombres pairs et impairs de T. Exemple : pour la liste T ci-dessous, on obtient :

T1 12 6 10 16 8 4 2
nil
T 12 6 3 10 5 16 8 4 2 1
nil T2 3 5 1
nil

Exercice 4
À partir d’une liste d’entier quelconque (non triée) on veut créer une liste triée par ordre croissant. La
procédure à suivre est la suivante :
1. Donner le type de cette liste
2. Créer la liste d’origine en utilisant la fonction suivante:
Fonction Creation_liste(E/ Tete1 : Liste) : Liste
Tant qu’il reste des éléments dans cette liste (liste d’origine)
Faire
3. Chercher le maximum :
Fonction Chercher_Max(E/ Tete1 : Liste) : entier
4. Libérer ce maximum de cette liste :
Fonction Liberer_Max_Element (E/ Tete1 : Liste, E/ max : entier) : Liste
5. Créer un nouvel élément de la liste résultat :
Fonction Creation_Element_Liste(E/ Tete2 : Liste, E/max : entier) : Liste
Fait
6. Afficher la liste résultat : Procedure Affiche_Liste(E/ Tete2 : Liste)

3
Faculté informatique Module ALGO L2-ACAD C
2023/2024 C.Smaili

Exercice 4.1 (même exercice mais dans ce cas pas de libération ni allocation d’espace)

Tant qu’il reste des éléments dans cette liste (liste d’origine)
Faire
2. Chercher le maximum :
Fonction Chercher_Max(E/ Tete1 : Liste) : Liste //la fonction retourne l’adresse du Max
3. Créer un nouvel élément de la liste résultat :
Procedure Creation_Element_Liste(ES/ Tete1, Tete2 : Liste, E/Pmax : Liste)
Fait
4. Afficher la liste résultat : Procedure Affiche_Liste(E/ Tete : Liste)

Exercice 5
On veut construire le triangle de Pascal pour un nombre de lignes donné en utilisant un tableau et
plusieurs listes chainées. Les étapes à suivre sont données comme suit :

Tete Tete Tete


1 1

1 1 1

1 1 2 1

1 1 3 3 1

1 1 4 6 4 1

Etape 1 Etape 2 Etape 3


1. Initialisez le tableau Tete et donnez sont type (voir Etape 1).
2. Créez la première colonne du triangle avec la valeur 1. Mettez l’adresse de cet élément dans le
tableau (voir Etape 2).
3. Écrire une action qui, à partir de la ligne n du triangle, calcule les valeurs de la ligne n+1 (voir
Figure 1).
4. Écrire une fonction qui affiche les éléments d’une ligne du triangle.
5. On souhaite imprimer, parmi les N premières lignes du triangle, toutes celles qui ne
contiennent que des valeurs strictement inférieures à un nombre strictement positif donné nb
(nb ≥1). On vous demande d’écrire une fonction F( ) qui utilise les fonctions de la question 2
et 3 pour calculer et afficher une à une les lignes du triangle jusqu’à la première ligne
contenant une valeur supérieure ou égale au nombre nb donné (nb ≥1). Cette ligne ne sera pas
affichée. Si on atteint la ligne N sans avoir trouvé, on s’arrête.
6. Ecrire une action qui libère l’espace mémoire alloué au triangle dans le but de retrouver la
configuration donnée par l’étape 1.
7. Écrire l’algorithme qui construit et affiche le triangle pour un nombre de lignes donné
(nb_ligne ≤ 100).
E
E
S 1 3 3 1 1 3 3 1
4 S

1 1 4 6 4 1
Faculté informatique Module ALGO L2-ACAD C
2023/2024 C.Smaili

Exercice 6
1. Ecrire une procédure Ajout_Début_Fin (T : liste, Q : liste, x : entier) qui insert la valeur x en
tête et en queue d’une liste simplement chaînée. Exemple
(b)pour
Aprèsx= l’appel
5, on obtient :
de la fonction

Q Q T Q T Q
T T

5 1 5 1 5

Etat initial Etat final Etat initial Etat final

Exemple où la liste n’est pas Exemple où la liste contient au moins un élément

2. Spécifier pour chaque paramètres de la procédure son mode de transmission E, S, ou ES


Ajout_Début_Fin ( ?T : liste, ?Q : liste, ?x : entier)
3. Ecrire une procédure qui retourne le nombre d’éléments (nbe) d’une liste et la somme des
valeurs de cette liste (som). Le prototype de cette procédure est le suivant :
Procédure som_nb_elt (T : Liste, som : entier, nbe : entier)
Spécifier pour chaque paramètres son mode de transmission E, S, ou ES

Exemple : pour la liste ci-dessous, la procédure retourne : som = 11 et nbe=3.

5 1 5

Problème : On commence par un chiffre x donné (voir l’exemple ci-dessous pour x=1). Chaque
nouveau nombre est calculé en fonction du nombre qui le précède en insérant à son début et à sa fin un
chiffre C : C = (la somme de ses chiffres + sa longueur) mod 10
1
212
82128
6821286
…………………....
……………..………....

4. En utilisant les actions ci-dessus, écrire l’algorithme de construction de la liste chaînée pour
un chiffre x où 1 ≤ x ≤ 9.

Remarque : La construction s’arrête dès que le nombre d’éléments dépasse une valeur val1
strictement positif ou la somme des valeurs de la liste et supérieur val2.

Exercice 7 (Liste circulaire)


1. Ecrire une action paramétrée qui à partir d’une chaîne de caractère construit une liste circulaire
composée uniquement des lettres de cette chaîne (voir figure 1).
A B Tete A B
5
Queue D C D C

Figure 1 : liste circulaire correspondant à la chaine ch=’’ABCD’’


Faculté informatique Module ALGO L2-ACAD C
2023/2024 C.Smaili

2. En déplaçant la queue de la liste circulaire (voir la figure 2), écrire une action paramétrée qui à
partir de la liste circulaire de caractère, construit toutes les chaînes possibles (sauf la chaîne
initiale) et sauvegarde ces mots dans une liste simplement chaînée.

Remarque : traiter les cas particuliers suivants : ch=’’ABAB’’, ch= ‘’A’’, ch=’’AAA’’, …
Queue
A B A B A B

Queue D C D C D C Queue

Tete Tete Tete

DABC BCDA DABC CDAB BCDA DABC

Figure 2 : liste simplement chaînée correspondant à toutes les chaînes possibles en déplaçant la queue de l

3. Pour un ensemble de N chaînes de caractères, écrire l’algorithme principal qui:


 construit la liste chaînée correspondant à N chaînes de caractères
 pour chaque élément de cette liste, construisez les chaînes possibles (voir la figure 3)
Tete
ABCD FE STU

CDAB EF UST

TUS
BCDA

DABC
Figure 3: liste de N=3 chaînes de caractère où chaque chaîne est attachée une liste représentant toutes les combinaisons po

Départ
Exercice 8
L'objectif de cet exercice est d'analyser les résultats d'un athlète dans une
course. Soit T un nombre de 8 chiffres représentant le résultat d'un tour
réalisé par un athlète. Les deux premiers chiffres à gauche indiquent la durée

6
Faculté informatique Module ALGO L2-ACAD C
2023/2024 C.Smaili

en secondes du premier quart d'un tour : Q1, les deux chiffres suivants indiquent la durée en secondes
du deuxième quart d'un tour : Q2, et ainsi de suite :

Pour T = 25282621 :
Q1 = 25 secondes (s), Q2 = 28s, Q3 = 26s, Q4 = 21s

1. Ecrire une action paramétrée TOUR permettant de créer une liste circulaire L contenant le résultat
d'un tour (voir exemple ).

Exemple  25 28 26 21
Pour T = 25282621 L

2. Ecrire une action paramétrée COURSE permettant de créer une liste R contenant le résultat d'une
course de N tours fait par un athlète (voir exemple ). Les résultats de chaque tour réalisés par
l'athlète sont sauvegardés dans un vecteurs V d'entiers.

Exemple  25 28 26 21
Pour N = 2 R

23 27 20 29

NIL

3. Ecrire une action paramétrée MEILLEUR permettant de créer une liste simplement chaînée M
contenant les numéros des K meilleurs quarts de la course (voir exemple ). Expliquer votre
méthode en un paragraphe.
Exemple 
Pour K = 5, les numéros des K meilleurs quarts de l'exemple  sont : 1, 3, 4, 1, 3

4. En utilisant la liste M, écrire une action paramétrée FREQUENCE permettant de déterminer pour
chaque quart, sa fréquence d'apparition dans M (voir exemple ).

Exemple 
1 4 3 Quart
2 1 2 Fréquence
NIL

(L'utilisation des structures de données intermédiaires autre que les listes n'est pas autorisée.)

Exercice 9

7
Faculté informatique Module ALGO L2-ACAD C
2023/2024 C.Smaili

A partir d’un nombre entier positif x, on veut générer tous les nombres possibles en suivant le principe
suivant : pour chaque chiffre constituant ce nombre, on génère deux nombres, en allant vers la droite
puis vers la gauche de ce chiffre.
Exemple : pour le nombre 216 et en commençant par le chiffre 6 on génère : 621
(6*102+2*101+1*100) puis 612 (6*102+1*101+2*100).
Pour le chiffre 2 on génère : 216 puis 261. Pour le chiffre 1 on génère : 162 puis 126. Ce même
principe est appliqué pour l’ensemble: {15, 7, 191} illustré par la figure 1. Notons qu’on ne tient pas
compte des doublons et du nombre initial s’il est généré. Voir le cas de 191 par exemple. En
appliquant ce principe, on vous demande :
4. Donner le(s) type(s) de la structure représentée par la figure 1.
5. Ecrire une action paramétrée qui construit une liste circulaire bidirectionnelle composée
uniquement des chiffres d’un nombre entier positif (voir la figure 2).
6. En utilisant uniquement la queue de la liste circulaire bidirectionnelle comme paramètre d’une
action paramétrée, construisez la liste de tous les nombres possibles en suivant le principe donné en
haut de cet exercice (voir la figure 3).

Remarque : à exclure les doublons et le nombre initial voir par exemple pour le nombre 191.

7. Dans l’algorithme principal, on vous demande de:


 Créer une liste simplement chaînée pour les nombres suivant : 15, 2016, 7, 191
 Créer la liste des nombres possibles pour chaque élément de la liste initiale.
Tete

15 7 191 Queue
nil 2 1 6
nil

51 119 911
nil nil
Figure 2on
Figure 1: liste de N entier (15, 7, 191). Pour chaque chiffre d’un nombre, : liste circulaire
génère bidirectionnelle
deux nombres correspondant
en en suivant audonné
le principe nombre 201
ci-dessus

Q1 Q2 Q3

2 0 1 2 0 1 2 0 1

Tete Tete Tete

120 102 120 102 210 120 102 210


nil nil

21 12
8nil
Etape 1 Etape 2 Etape 3
Figure 3 : étapes de construction de tous les nombres possible à partir d’une liste circulaire bidirectionnelle représentant le nombre 201
Faculté informatique Module ALGO L2-ACAD C
2023/2024 C.Smaili

PILES & FILES

PILE et FILE
Exercice 1
Etant donné N entiers strictement positifs. On veut afficher les nombres parfait de cet ensemble en
suivant les étapes suivantes (voir les figures 1,2 et 3):
1. Donner la définition des deux tableaux : Tete, Queue
2. Initialiser Tete et Queue (voir figure 1)
3. Créer pour chaque élément du tableau un enregistrement avec la valeur 1 représentant le
premier diviseur. Mettre l’adresse de cet élément dans le tableau Tete et dans le tableau
Queue (voir figure 2)
4. Utiliser l’action Enfiler pour construire la liste des diviseurs pour chaque valeur du tableau
(voir figure 3)
5. Pour chaque élément du tableau afficher ses diviseurs
6. Transformer la fonction Affiche ( ) pour afficher les nombres parfaits du tableau

Tete Queue Tete Queue Tete Queue

3 3 1 3 1 3

8 8 1 8 1 2 4 8

11 11 1 11 1 11

1 1 1 1 1

Figure 1 Figure 2 Figure 3

Exercice 2
Une image en informatique peut être représentée par une matrice de points ayant N lignes et M
colonnes. Un élément Image[x, y] de la matrice représente la couleur du point de coordonnées (x, y).
En utilisant la pile comme structure de donnée, on propose d’écrire ici une action paramétrée qui, à
partir d’un point p, étale une couleur c autour de ce point. Pour effectuer le remplissage, on doit aller
dans toutes les directions à partir d’un point de départ. La progression de la couleur étalée s’arrête
quand elle rencontre une couleur autre que celle du point p. La figure suivante illustre cet exemple, en
considérant le point noir se trouvant dans la case (4, 6). Pour effectuer le remplissage, on doit aller
dans toutes les directions à partir du point noir.

9
Faculté informatique Module ALGO L2-ACAD C
2023/2024 C.Smaili

Exercice 3
Etant donné une matrice carrée T [N][N] où N > 1 et N est impair. On veut représenter un triangle
dans la moitié supérieure de cette matrice en mettant à jour certaines cases de la matrice T. Pour
effectuer le remplissage du triangle on procède comme suit : à chaque fois qu’on met à jour une case
par un ‘1’, on sauvegarde les coordonnées entourant cette case (gauche, droite, haut et bas) dans une
PILE.
1. Définissez le type « coordo » représentant les coordonnées (x, y) d’une matrice et donnez le type
de la pile.
2. Réécrivez les deux actions Dépiler et Empiler en tenant compte du nouveau type « coordo ».
3. Ecrivez une action (non récursive) qui place des ‘1’ dans la partie supérieure de la matrice T en
suivant le principe énoncé ci-dessus.
Note : on prend comme configuration initiale les deux côtés du triangle et une position initiale à
l’intérieur du triangle : T [2][4] ≠1 (voir par exemple la figure 1). Le résultat final est donné par la
figure 2.

Exercice 4
On veut générer des nombres en suivant le principe suivant : on commence par un chiffre x donné : 1
≤ x ≤ 9, voir l’exemple ci-dessous pour x=1. Chaque nouveau nombre est calculé en fonction du
nombre qui le précède en insérant à son début et à sa fin un chiffre C :
C = (la somme de ses chiffres + sa longueur) mod 10
1 C = (1 + 1) mod 10 = 2
212 C = (5 + 3) mod 10 = 8
82128 C = (21 + 5) mod 10 = 6
6821286
……………….

En utilisant uniquement deux piles (représentées de façon chaînées), voici les étapes à suivent :

2
2 1
1 1 2
P1 P2 P1 P2 P1 P2
Etape initial Etape 1 Etape 2
Etat initial : empiler le chiffre donné par l’utilisateur dans la pile P1
Etape 1 : désempiler tous les éléments de P1 et les empiler dans P2 en comptant le nombre d’éléments
(nb=1) et la somme des valeurs (som=1). Empiler la valeur C= 2 dans P2 : C= (1 + 1) mod 10 = 2
Etape 2 : désempiler tous les éléments de P2 et les empiler dans P1. Empiler la valeur C dans P1.
Recommencer les étapes 1 et 2 jusqu’à :

10
Faculté informatique Module ALGO L2-ACAD C
2023/2024 C.Smaili

 le nombre d’éléments dépasse une valeur val1 >1 (donnée par un utilisateur) ou
 la somme des valeurs de la liste et supérieur val2 > 1 (donnée par un utilisateur)

5. Donner la déclaration de la pile


6. En suivant les étapes données ci-dessus, créer la pile des valeurs
7. Afficher le nombre contenu dans la pile P1 après l’insertion du chiffre C au début et à la fin du
nombre

Remarque :
Il est judicieux de procéder au calcule d’un nombre à chaque fois qu’on empile un chiffre.
Utiliser les procédures de manipulation de la pile vues en cours : Empiler (tete, x) et Désempiler (tete,
x)

RECURSIVITE
Exercice 1:
En se référant à l’exemple donné par la figure 1 :
1. Donner l’écriture mathématique des suites : Un+1 et Vn+1 pour n≥0
2. Donner le cas trivial (qui assure l’arrêt des appelles) de chaque suite
3. Ecrire les actions récursives U ( ) et V ( )
4. Calculer U5 et V7

*1 U(3)
2*
=
U(2) V(2)
* 1 = 2* *3 = - 1*
U(1) V(1) U(1) V(1)
1
* = 2* 3
* = - 1*
1
* = 2* 3
* = - 1*
U(0) V(0) U(0) V(0) U(0) V(0) U(0) V(0)

1 2 1 2 1 2 1 2
Figure1 : Exemple d’un arbre binaire pour la suite U(n) avec n=3

Exercice 2
1. Soit N un entier positif. Ecrire une fonction récursive qui remplace le(s) chiffre(s) : 2 dans N
par le chiffre 9.
Exemple : N=2093287 on aura : 9093987
2. Ecrire une action récursive qui retourne le nombre de chiffre d’un entier positif.

Exercice 3
1. Ecrire une action paramétrée récursive Affiche_R1( ) qui affiche les éléments d’une liste
d’entier. On commence par afficher le dernier élément, avant dernier,…, premier.
2. Ecrire une seconde action paramétrée récursive Affiche_R2( ) qui affiche les éléments de la
structure de la figure ci-dessous. Penser à utiliser la fonction récursive Affiche_R1( ) dans le
corps de la seconde action. Les nombres seront affichés dans cet ordre : 191 : 911 119 7 :
15 : 51

11
Faculté informatique Module ALGO L2-ACAD C
2023/2024 C.Smaili

3. Ecrire une action paramétrée récursive Efface_R2( ) qui libère l’espace mémoire occupé par
la structure de la figure ci-dessous. Penser à utiliser le même principe donné par les questions
1 et 2 : les éléments seront libérés dans cet ordre : 911 119 191 7 51 15
Tete

15 7 191
nil
nil

51 119 911
nil nil

Exercice 4
Etant donné une matrice carrée T [N][N] où N > 1 et N est impair. On veut représenter un triangle
dans la moitié supérieure de cette matrice en mettant à jour certaines cases de la matrice T.
1. Écrire une action paramétrée récursive afin de représenter un triangle dans la moitié
supérieure de la matrice T.
2. Écrire une action paramétrée récursive afin de représenter un triangle dans la moitié
inférieure de la matrice T.
3. En s’inspirant des deux questions précédentes, écrire une action paramétrée récursive dans le
but de représenter un losange (voir la figure ci-dessous).
Fig 3 : Représentation d’un losange
Fig 1 : Représentation d’un triangle Fig 2 : Représentation d’un triangle dans une matrice T[7][7]
dans une matrice T[7][7] dans une matrice T[7][7]

Exercice 5
Dans cet exercice, on définit une matrice carrée T(N,N) comme un tableau à deux dimensions où le
nombre de lignes est égal au nombre de colonnes et N>1. Étant donné les actions paramétrées ci-
dessous, on vous demande de :
1. Dérouler l’action paramétrée F en tenant compte des initialisations suivantes : L=5, CC=L,
LL=L, DL=1, DC=1. L et val sont des variables globales initialisées à 5 et à 1 respectivement.
Remplissez la matrice T[L][L] et décrire en quelques mots le résultat de cette action.
Expliquer en quelques mots si cette action est récursive terminale ou non.
.
Procédure LGD(E/ T[L][L] ,DL CC :entier) Procédure CHB(E/ T[L][L], DL, LL, CC :entier)
Début Début
k : entier k : entier
pour k de DL à CC faire pour k de DL+1 à LL faire
T [DL][k]val ; T [k][CC]val ;
ftanq ftanq
Fin Fin
Procédure CBH(E/ T[L][L] , LL, DL, DC :entier) Procédure LDG(E/ T[L][L], CC, DC, LL :entier)

12
Faculté informatique Module ALGO L2-ACAD C
2023/2024 C.Smaili

Début Début
k : entier k : entier
pour k de LL-1 à DL+1 pas-1 faire pour k de CC-1 à DC pas-1 faire
T [k][DC]val ; T [LL][k]val ;
ftanq ftanq
Fin Fin
Procédure F (E/ T[L][L], LL, CC, DL, DC :entier)
Début
si (LL >DL et CC >DC)
alors LGD (T, DL, CC) ;
CHB (T, DL, LL, CC) ;
LDG (T, CC, DC, LL) ;
CBH (T, LL, DL, DC) ;
valval+1 ;
F (T, LL-1, CC-1, DL+1, DC+1) ;
Fsi
Fin

Exercice 6
Dans une chaîne amiable, chaque nouveau nombre est égal à la Somme des Diviseurs Propres (SDP)
(autres que lui-même) du précédent. La somme du dernier étant égale au premier nombre. Le nombre
en question est dit sociable (voir l’exemple donné dans le tableau 1).

N DIVISEURS PROPRES SDP


12496 1 2 4 8 11 16 22 44 71 88 142 176 284 568 781 1136 14288
1562 3124 6248
14288 1 2 4 8 16 19 38 47 76 94 152 188 304 376 752 893 15472
1786 3572 7144
15472 1 2 4 8 16 967 1934 3868 7736 14536
14536 1 2 4 8 23 46 79 92 158 184 316 632 1817 3634 7268 14264
14264 1 2 4 8 1783 3566 7132 12496
Tableau 1 : le nombre 12496 est sociable

1. Ecrire une fonction récursive qui vérifie si un nombre N est sociable ou non.
2. Dans le programme principal lisez un entier positif N et afficher le message suivant : N est sociale /
N n’est pas sociable.

Remarque :
 Il est recommandé de créer une fonction qui retourne la SDP d’un entier N positif.
 Si N n’est pas sociable, la SDP de l’ième élément ne sera jamais égale au premier. On prévoit alors
de transmettre un autre paramètre : borne=100 à la fonction. Si le nombre d’éléments créés dépasse
ce paramètre, alors N ne vérifie pas la définition d’une chaîne amiable.

13

Vous aimerez peut-être aussi