Vous êtes sur la page 1sur 10

Facultés des sciences appliqués Département d’informatique

Licence L1 : MI (2023/2024) Module : Algorithmique et structure de données I


Fiche TD4/TP4 : les types structurés

Exercice 1
Soit un tableau T de n caractères (n<=100). Ecrire un algorithme qui :
1. Déclare T
2. Lit la taille réelle de ce tableau (sans contrôle de la saisie) puis lit les éléments de ce
tableau T ;
3. Affiche le nombre de ‘(‘ dans T ;
4. Affiche le nombre d’occurrence de chaque caractère de T ; Que remarquez-vous ?
améliorer l’algorithme (devoir à remettre).
5. Affiche le caractère qui se répète le plus dans T ; Si égalité, afficher le 1er. Maximum.
Exercice 2
Soit une matrice Mat de taille nxm d’entiers avec n,m <=100

1. Lire la taille de Mat ainsi que ses éléments (ligne par ligne)
2. Compter et afficher le nombre de valeurs nulles de Mat (ligne par ligne)
3. Créer un tableau V contenant tous les éléments non nuls de Mat (ligne par ligne) et
créer un tableau P contenant le nombre d’éléments nuls de chaque ligne.
4. Afficher l’indice de la ligne où il y a le plus de valeurs nulles.
Exercice 3
Dans un garage, une voiture est caractérisée par une marque, un matricule, le numéro de
téléphone de son propriétaire ainsi que la dernière date d’entrée et de sortie de cette voiture
dans ce garage.

1. Déclarer le type voiture ;


2. On suppose que le garage contient 2 voitures V1 et V2.
a. Déclarer ces 2 voitures
b. écrire un algorithme qui affiche le matricule de la première voiture qui est
entrée dans ce garage en 2023 sinon on n’affichera « aucune ».
3. On suppose que le garage contient 50 voitures. écrire un algorithme qui :
a. Déclare un tableau V contenant ces voitures puis saisit les informations
concernant ces voitures ;
b. Affiche le nombre de voiture de marque "clio" dans ce garage.
c. Afficher le numéro de téléphone de la voiture dont le matricule est
"002356-109-31"
Facultés des sciences appliqués Département d’informatique
Licence L1 : MI (2023/2024) Module : Algorithmique et structure de données I
Fiche TD4/TP4 : les types structurés

Exercice 1
Soit un tableau T de n caractères (n<=100). Ecrire un algorithme qui :
1) Variables
T [100] : caractère ;

2)

Algorithme exo1
Variable
T[100] : caractère ;
n,i :entier ;
Début
Ecrire("donner la taille du tableau") ;
Lire(n) ;
Pour i de 1 à n faire
Ecrire( "T[",i, "]=") ;
Lire(T[i]) ;
Finpour
3) On déclare m : entier ;
m0 ;
Pour i de 1 à n faire
Si T[i]=’(’ alors mm+1
Fsi
Finpour
Ecrire(" le nombre de parenthèse ouvrantes dans T est= ",m) ;

4)
On déclare m : entier ;
Pour i de 1 à n faire
m0 ;
Pour j de 1 à n faire
Si (T[i]=T[j]) alors mm+1 ;
Fsi
Finpour
Ecrire ("le nombre d’occurrences de", T[i], "= ", m) ;
finpour

La remarque : On remarque que le traitement et l’affichage de certains caractères du tableau


peut se répéter autant de fois qu’un caractère apparaitra dans ce tableau. Ce qui engendrera
une redondance donc une perte de temps dans le traitement.
Facultés des sciences appliqués Département d’informatique
Licence L1 : MI (2023/2024) Module : Algorithmique et structure de données I
Fiche TD4/TP4 : les types structurés

Exemple de déroulement :

n=6 T[]={‘*’,’-‘,’*’,’+’,’-‘,’*’}

n i m T[i] j T[j]
6 1 0
1 * 1 *
2 -
2 3 *
4 +
5 -
3 6 *
le nombre d’occurrences de * = 3
2 0
1 *
1 - 2 -
3 *
4 +
2 5 -
6 *
le nombre d’occurrences de - = 2
3 0
1 * 1 *
2 -
2 3 *
4 +
5 -
3 6 *
le nombre d’occurrences de * = 3

On remarque bien que le traitement de l’* se répètera 3fois dans l’algorithme


4.1 Amélioration de l’algorithme
Solution 1 : utiliser 2 tableaux
L’idée est de créer un Tableau V dont lequel on mettra les caractères de T sans répétition puis
de faire le traitement du calcul d’occurrence à partir de V. c’est-à-dire, on prendra chaque
élément de V et on recherche le nombre de répétition de ce caractère dans T.
Facultés des sciences appliqués Département d’informatique
Licence L1 : MI (2023/2024) Module : Algorithmique et structure de données I
Fiche TD4/TP4 : les types structurés

1. Transfert de tous les éléments de T dans V une seule occurrence par caractère.
On déclare B :booleen ; k : entier ;
k 0 /* taille de V, initialement elle est à 0 car V n’existe pas encore*/
Pour i de 1 à n faire
B vrai ; /*B deviendra faux si on trouve que le caractère de T existe dans V sinon il reste à vrai pour
dire qu’il n’existe pas dans V et qu’on doit le rajouter dans V*/
Pour j de 1 à k faire
Si T[i]= V[j] alors B faux fsi
Fpour
Si (B= vrai) alors
Kk+1
V[k]  T[i]
Fsi
Fin pour

La solution optimale pour le transfert serait de remplacer la boucle j par un tantque, ce qui
signifie que dès qu’il trouve un élément de T déjà dans V il arrête la recherche et il passe à
l’élément suivant de T.

1*. Transfert de tous les éléments de T dans V une seule occurrence par caractère (solution
optimale)

k 0 /* taille de V, initialement elle est à 0 car V n’existe pas encore*/


Pour i de 1 à n faire
J 1 ;
Tantque (j<=k) et (T[i]≠ V[j]) faire
jj+1 ;
Fpour
Si (j>k) alors
k k+1
V[k]  T[i]
Fsi
Fin pour

2. Calcul des occurrences de chaque élément de V dans T.


k : taille de V obtenue lors du transfert de T dans V

Pour i de 1 à k faire
m0 ;
Pour j de 1 à n faire
Si (V[i]=T[j]) alors mm+1 ;
Fsi
Finpour
Ecrire ("le nombre d’occurrences de" ,V[i], "= ", m) ;
finpour
Facultés des sciences appliqués Département d’informatique
Licence L1 : MI (2023/2024) Module : Algorithmique et structure de données I
Fiche TD4/TP4 : les types structurés

Déroulement :
n=6 T[]={‘*’,’-‘,’*’,’+’,’-‘,’*’}
k=3 V[]={‘*’,’-‘,’+’}

n k i m V[i] j T[j]
6 3 1 0
1 * 1 *
2 -
2 3 *
4 +
5 -
3 6 *
le nombre d’occurrences de * = 3
2 0
1 *
1 -- 2 -
3 *
4 +
2 5 -
6 *
le nombre d’occurrences de - = 3
3 0 +
1 *
2 -
3 *
1 4 +
5 -
6 *
le nombre d’occurrences de + = 3

Solution 2 : utiliser seulement le tableau T ( Devoir à rendre)


Facultés des sciences appliqués Département d’informatique
Licence L1 : MI (2023/2024) Module : Algorithmique et structure de données I
Fiche TD4/TP4 : les types structurés

5) On déclare max :entier ; c :caractère ;


K : contiendra le nombre d’occurrence de chaque élément de T

Max0 ;
Pour i de 1 à k faire
m0 ;
Pour j de 1 à n faire
Si (V[i]=T[j]) alors mm+1 ;
Fsi
Finpour
Si m>max alors maxm ; c V[i] ;
finsi
finpour
ecrire("le caractère qui se répète le plus dans T" ,c) ;

Exercice 2
1)

Variable
Mat[100][100] : entier ;
i,j,n,m : entier ;
Début
Ecrire( "donner la taille de la matrice" );
Lire(n,m) ;
Pour i de 1 à n faire
Pour j de 1 à m faire
Ecrire( "MAT [",i , "][",j, "] ="),
Lire(Mat[i][j]) ;
Finpour
Finpour

2) on déclare k : entier ; k contiendra le nombre de valeurs nulles

k0 ;
Pour i de 1 à n faire
Pour j de 1 à m faire
Si (Mat[i][j]=0) alors kk+1;
fsi
Finpour
Finpour
Ecrire("le nombre de valeurs nulles dans la matrice=",k) ;
Facultés des sciences appliqués Département d’informatique
Licence L1 : MI (2023/2024) Module : Algorithmique et structure de données I
Fiche TD4/TP4 : les types structurés

3) on déclare V[1000], P[100]: entier ;


k : entier ;
L : compteur de valeurs nulles par ligne
k : indice de V ;
V : tableau qui contiendra les valeurs non nulles de la matrice Mat, il est de taille maximale
égale 1000 car la matrice Mat contient au maximum 100*100 éléments
P : tableau qui contiendra le nombre de valeurs nulles de chaque ligne, la taille de P est égale
àn

k0 ;
Pour i de 1 à n faire
L0 ;
Pour j de 1 à m faire
Si (Mat[i][j]=0) alors
LL+1;
sinon
kk+1 ;
V[k]Mat[i][j]
fsi
Finpour
P[i] L ;
Finpour

4. k : représente l’indice de la ligne où le nombre de zéro est le maximum.


Max P[1] ;
Pour i de 2 à n faire
Si P[i]>max alors
k i ;
finsi
fpour
ecrire("la ligne d’indice", k, "contient le plus de 0") ;
FIN.

Exercice 3

1. type Date = structure {jour, mois, annee : entier ;}


type voiture = structure {
Facultés des sciences appliqués Département d’informatique
Licence L1 : MI (2023/2024) Module : Algorithmique et structure de données I
Fiche TD4/TP4 : les types structurés

Mark, Matri : chaine ;


tel : entier ;
DE, DS : Date} ;

2. 1)
Variables
V1, V2 : voiture ;

2.2)

Algorithme premiere_voiture_garage
type Date = structure {jour, mois, annee : entier ;}
type voiture = structure {
Mark, Matri, : chaine ;
tel : entier ;
DE, DS : Date } ;
Variables
V1, V2 : voiture ;
Début
Ecrire ( "informations première voiture") ;
Ecrire (" marque matricule et numéro téléphone du propriétaire") ;
Lire (V1.Mark, V1.Matri,V1.tel) ;
Ecrire ("date d’entrée au garage") ;
Lire(V1.DE.jour, V1.DE.mois, V1.DE.annee) ;
Ecrire ("date de sortie du garage") ;
Lire (V1.DS.jour, V1.DS.mois, V1.DS.annee) ;
/********* 2eme voiture******/
Ecrire ( "informations deuxième voiture") ;
Ecrire (" marque matricule et numéro téléphone du propriétaire") ;
Lire (V2.Mark, V2.Matri, V2.tel) ;
Ecrire ("date d’entrée au garage") ;
Lire (V2.DE.jour, V2.DE.mois, V2.DE.annee) ;
Ecrire ("date de sortie du garage") ;
Lire (V2.DS.jour, V2.DS.mois, V2.DS.annee) ;
/*******/
Si (V1.DE.mois < V2.DE.mois) alors
Ecrire (" la voiture dont le matricule", V1.Matri, " est la première
a être au garage en 2023") ;
Sinon
Si (V1.DE.mois > V2.DE.mois) alors
Ecrire (" la voiture dont le matricule", V2.Matri, " est la
première à être au garage en 2023") ;
Facultés des sciences appliqués Département d’informatique
Licence L1 : MI (2023/2024) Module : Algorithmique et structure de données I
Fiche TD4/TP4 : les types structurés

Sinon
Ecrire (" les 2 voitures sont rentrées au même mois") ;
Finsi
Finsi
Fin.

3. a)

Algorithme premiere_voiture_garage
type Date = structure { jour, mois, annee : entier ;}
type voiture = structure {
Mark ,Matri: chaine ;
tel : entier ;
DE, DS : Date } ;
Variables
V[50] : voiture ;
i :entier
Début
Pour i de 1 à 50 faire
Ecrire ( "la voiture ", i)
Ecrire (" Marque :") ;
Lire (V[i].Mark) ;
Ecrire (" Matricule :") ;
Lire (V[i].Matri) ;
Ecrire (" Téléphone propriétaire :") ;
Lire (V[i].tel) ;
Ecrire ("date d’entrée au garage") ;
Lire(V[i].DE.jour, V[i].DE.mois, V[i].DE.annee) ;
Ecrire ("date de sortie du garage") ;
Lire (V[I].DS.jour, V[I].DS.mois, V[I].DS.annee) ;

b)
K0; /* k est le nombre de voitures de marques clio*/
Pour i de 1 à 50 faire
Si (V[i].Mark= "clio" ) alors kk+1 ;
Finsi
Finpour
Ecrire ("le nombre de voitures de marque clio au garage est",k) ;
c) Afficher le numéro de téléphone de la voiture dont le matricule est
"002356-109-31"
Facultés des sciences appliqués Département d’informatique
Licence L1 : MI (2023/2024) Module : Algorithmique et structure de données I
Fiche TD4/TP4 : les types structurés

i1 ;
Tantque (V[i].tel≠ "002356-109-31) et (i<=50) faire
Ii+1 ;
Fintantque
Si (V[i].tel= "002356-109-31) alors
Ecrire( "le numéro de téléphone du propriétaire de la voiture est ", V[i].tel) ;
Sinon
Ecrire( "voiture inexistante au garage") ;
Finsi
FIN

Vous aimerez peut-être aussi