Prof :Fredj Imed Devoir de Synthese N°1
AS 2025-206
Mat : Algorithmique 3ème Info
Matrice -Enregistrement -Recherche Simple
Exercice n° 1 (10 pts)
Ecrire l’algorithme d’un programme qui permet de :
• Saisir un chiffre N aléatoire et paire.
• Remplir une première matrice M de taille N*N par des chiffres aléatoires
non nul.
• Remplir une deuxième matrice T de taille N*N par des chiffres aléatoires non
nul.
• Afficher les deux matrices M et T
• Vérifier si M et T sont identique en (lignes ,colonnes et
diagonales) ou (diagonales) sinon (non identique)
Exemple1 : pour N=4 et M
0 1 2 3 0 1 2 3
0 6 6 2 3 0 6 6 2 3
1 5 9 2 3 1 5 9 2 3
2 8 5 2 7 2 8 5 2 7
3 8 3 4 1 3 8 3 4 1
Le programme affiche identique en ligne, colonnes et diagonales
Exemple2 : pour N= 4 , M et T
0 1 2 4 0 1 2 3
0 6 7 5 6 0 6 6 2 6
1 3 6 6 3 1 5 6 6 3
2 3 6 6 2 2 8 6 6 7
3 6 3 4 6 3 6 3 4 6
le programme affiche identique en diagonale
1
Exercice n°2 (10pts ) : Gestion des Compétitions Sportives
Un participant à la compétition est identifié par :
• Un Nom (Nom du sportif),
• Le Nombre de médailles obtenues,
• Une Équipe qui est formée par deux champs (Nom du coach et Nom du club).
On se propose dans la suite, après avoir rempli un tableau T1 par N participants
(N ∈ [10..150] ), de former puis afficher un deuxième tableau T2 tel que chaque case
contient un Nom de club ainsi que le nombre total de médailles gagnées par ce
club.
NB : un club n'existe qu'une seule fois dans le tableau.
Exemple :
N=5
T1 SALAH MOHAMED AMIRA WALID FATMA
Nombre de
4 1 3 5 2
médailles
Nom du Coach S. Karim L. Ali S. Karim H. Zied H. Zied
E.S. C.A. E.S.
Nom du Club O. Béja O. Béja
Tunis Africain Tunis
Le tableau T2 à afficher contient :
T2 E.S. Tunis C.A. Africain O. Béja
Total médailles 7 1 7
Questions :
1. Déterminer les structures de données utilisées dans le problème. (Structure de
l'enregistrement, Type de T1 et T2).
2. Écrire l'algorithme du programme principal, solution à ce problème, en le
décomposant en modules.
3. Écrire l'algorithme de chacun des modules envisagés précédemment.
2
Correction DS n°1
Exercice1 : Comparaison de Matrices
Analyse du Problème
Objectif : Comparer deux matrices M et T pour vérifier si elles sont identiques :
• En lignes : toutes les lignes correspondantes sont identiques
• En colonnes : toutes les colonnes correspondantes sont identiques
• En diagonales : les diagonales principale et secondaire sont identiques
TDNT
Matrice = Tableau de 20 lignes * 20 colonnes Entiers
Algorithme du Programme Principal
ALGORITHME ComparaisonMatrices
DEBUT
// Saisie de N pair
SaisirN(n)
// Remplissage des matrices
Remplir (M, n)
Remplir (T, n)
// Affichage des matrices
Écrire_nl ("Matrice M :")
AfficherMatrice (M, n)
Écrire_nl ("Matrice T :")
AfficherMatrice (T, n)
// Vérification d'identité
idLig ← IdentiqueLignes (M, T, n)
idDiag ← IdentiqueDiagonales (M, T, n)
// Affichage du résultat
afficher(idLig ,idDiag)
FIN
TDO glabaux
objet Type/nature
M Matrice
T Matrice
n Entier
idCol Boolèen
idDiag Boolèen
SaisirN procedure
Remplir procedure
AfficherMatrice procedure
IdentiqueLignes fonction
3
afficher procedure
IdentiqueDiagonales fonction
Algorithmes des Modules
Fonction SaisirN
Procedure SaisirN (@n:entier) : Entier
DEBUT
Répéter
Écrire ("Donner N (pair, entre 2 et 20) : ")
Lire (n)
Jusqu'à (n ≥ 2) Et (n ≤ 20) Et (n Mod 2 = 0)
FIN
TDO
objet Type/nature
n Entier
Procédure Remplir (chiffres non nuls : 1 à 9)
Procédure Remplir(@M : Matrice, n : Entier)
DEBUT
Pour i de 0 à n - 1 Faire
Pour j de 0 à n - 1 Faire
M[i, j] ← Aléa(1, 9)
Fin Pour
Fin Pour
FIN
TDO
objet Type/nature
i Entier
j Entier
Procédure AfficherMatrice
Procédure AfficherMatrice (Mat : Matrice, n : Entier)
DEBUT
Pour i de 0 à n - 1 Faire
Pour j de 0 à n - 1 Faire
Écrire (Mat[i, j], " ")
Fin Pour
Écrire_nl ("")
Fin Pour
FIN
TDO
objet Type/nature
i Entier
j Entier
Fonction IdentiqueLignes (recherche)
Fonction IdentiqueLignes (M : Matrice, T : Matrice, n : Entier) : Booléen
DEBUT
id ← Vrai
i←0
Tant que (i < n) Et id Faire
4
j←0
Tant que (j < n) Et id Faire
Si M[i, j] ≠ T[i, j] Alors
id ← Faux
FinSi
j←j+1
Fin Tant que
i←i+1
Fin Tant que
Retourner id
FIN
TDO
objet Type/nature
i Entier
j Entier
id boolèen
Fonction IdentiqueDiagonales
Fonction IdentiqueDiagonales (M : Matrice, T : Matrice, n : Entier) : Booléen
DEBUT
// Vérifier la diagonale principale
idPrinc ← Vrai
i←0
Tant que (i < n) Et idPrinc Faire
Si M[i, i] ≠ T[i, i] Alors
idPrinc ← Faux
FinSi
i←i+1
Fin Tant que
// Vérifier la diagonale secondaire
TDO
idSec ← Vrai
i←0 objet Type/nature
Tant que (i < n) Et idSec Faire i Entier
Si M[i, n - 1 - i] ≠ T[i, n - 1 - i] Alors idPrinc Boolèen
idSec ← Faux idSec boolèen
FinSi
i←i+1
Fin Tant que
Retourner idPrinc Et idSec
FIN
procedure Afficher(idLig, idDiag:boolèen )
Debut
Si idLig Alors
Écrire ("Identique en lignes, colonnes et diagonales")
Sinon Si idDiag Alors
Écrire ("Identique en diagonales")
Sinon
Écrire ("Non identique")
FinSi
Fin
5
Exercice n°2 : Gestion des Compétitions Sportives
Question 1 : Structures de Données
TDNT
------------
Enregistrements
Equipe = Enregistrement
coach : Chaîne de caractères
club : Chaîne de caractères
Fin
Participant = Enregistrement
nom : Chaîne de caractères
nbMed : Entier
equipe : Equipe
Fin
ClubMed = Enregistrement
club : Chaîne de caractères
totalMed : Entier
Fin
Types des Tableaux
Tab1 = Tableau de 150 Participant
Tab2 = Tableau de 150 ClubMed
Question 2 : Algorithme du Programme Principal
ALGORITHME GestionCompetitions
DEBUT
// Saisie du nombre de participants
n ← SaisirN()
// Remplissage du tableau T1
RemplirT (T1, n)
// Formation du tableau T2
m←0
FormerT(T1, n, T2, m)
// Affichage du tableau T2
AfficherT (T2, m)
FIN
TDO globaux
objet Type/Nature
T1 Tab1
T2 Tab2
n Entier
m Entier
RemplirtT procedure
FormerT procedure
AfficherT procedure
Question 3 : Algorithmes des Modules
Fonction SaisirN()
DEBUT
Répéter
Écrire ("Donner le nombre de participants (10..150) : ")
6
Lire (n)
Jusqu'à (n ≥ 10) Et (n ≤ 150)
Retourner n
FIN
Procédure RemplirT
Procédure RemplirT (@T1 : Tab1, n : Entier)
DEBUT
Pour i de 0 à n - 1 Faire
Écrire ("=== Participant n°", i + 1, " ===")
Écrire ("Nom du sportif : ")
Lire (T1[i].nom)
Répéter
Écrire ("Nombre de médailles : ")
Lire (T1[i].nbMed)
Jusqu'à T1[i].nbMed ≥ 0
Écrire ("Nom du coach : ")
Lire (T1[i].[Link])
Écrire ("Nom du club : ")
Lire (T1[i].[Link])
Fin Pour
FIN
TDO
objet Type/Nature
i Entier
Fonction RechercherClub
Fonction RechercherClub (T2 : Tab2, m : Entier, nomClub : Chaîne) : Entier
DEBUT
pos ← -1
i←0
Tant que (i < m) Et (pos = -1) Faire
Si T2[i].club = nomClub Alors
pos ← i
FinSi
i←i+1
Fin Tant que
Retourner pos
FIN
TDO
7
objet Type/Nature
i Entier
pos Entier
Procédure FormerT
Procédure FormerT (T1 : Tab1, n : Entier, @T2 : Tab2, @m : Entier)
DEBUT
m←0
Pour i de 0 à n - 1 Faire
nomClub ← T1[i].[Link]
pos ← RechercherClub(T2, m, nomClub)
Si pos = -1 Alors
// Le club n'existe pas encore, on l'ajoute
T2[m].club ← nomClub
T2[m].totalMed ← T1[i].nbMed
m←m+1
Sinon
// Le club existe déjà, on cumule les médailles
T2[pos].totalMed ← T2[pos].totalMed + T1[i].nbMed
FinSi
Fin Pour
FIN
TDO
objet Type/Nature
i Entier
pos entier
nomClub chaine
Procédure AfficherT
Procédure AfficherT(T2 : Tab2, m : Entier)
DEBUT
Écrire_nl ("========================================")
Écrire_nl (" RÉCAPITULATIF PAR CLUB ")
Écrire_nl ("========================================")
// Afficher les noms des clubs
Écrire ("Clubs : ")
Pour i de 0 à m - 1 Faire
Écrire (T2[i].club, " ")
Fin Pour
Écrire_nl ("")
// Afficher le total des médailles
Écrire ("Total médailles: ")
8
Pour i de 0 à m - 1 Faire
Écrire (T2[i].totalMed, " ")
Fin Pour
Écrire_nl ("")
Écrire_nl ("========================================")
FIN
TDO
objet Type/Nature
i Entier