0% ont trouvé ce document utile (0 vote)
7 vues11 pages

Chap1 ASD2

Transféré par

sarahtaouzinet2019
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
7 vues11 pages

Chap1 ASD2

Transféré par

sarahtaouzinet2019
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Chapitre 1 : Les types personnalisés

1. Introduction
En plus des types prédéfinis (Entier, Réel, Caractère, Chaîne, . . .), le langage algorith-
mique permet à l’utilisateur de définir ses propres types appelés types personnalisés.
Nous nous intéressons principalement à deux types :
1. Le type énuméré ;
2. Le type enregistrement (structure).
Ces types permettent de structurer les données de manière claire, logique et proche de la
réalité du problème traité.

2. Type énuméré (Énumération)

Définition
Un type énuméré est un type dont le domaine de valeurs est défini par une liste
ordonnée de constantes nommées.

Remarque
Tout type doit être déclaré avant son utilisation (sauf les types prédéfinis : Entier, . . .).
Une énumération est un nouvel objet de nature type défini par un nom identifiant et
un domaine de valeurs.

Syntaxe de déclaration
Type Nom_Type = (Constante1, Constante2, ..., ConstanteN)

Exemple
Type Jour = (Samedi, Dimanche, Lundi, Mardi, Mercredi, Jeudi, Vendredi)
Type Mois = (Janvier, Fevrier, Mars, Avril, Mai, Juin, Juillet, Aout,
Septembre, Octobre, Novembre, Decembre)

Var J1, J2 : Jour


Var M : Mois

— Les variables J1 et J2 ne peuvent prendre que l’une des valeurs : Samedi, ...,
Vendredi.
— La variable M ne peut prendre que l’une des valeurs : Janvier, . . ., Decembre.

1
Propriétés
— Les valeurs sont ordonnées selon leur position dans la liste.
— Les constantes ne peuvent pas être réutilisées.

Exemple
Samedi < Lundi
Decembre > Janvier

Var Samedi : Entier // Erreur !

Fonctions définies sur les types énumérés


— Ord(x) : renvoie un entier positif correspondant au rang de x dans la liste.
— Succ(x) : fournit la constante qui suit immédiatement x. Le successeur de la
dernière valeur n’est pas défini.
— Pred(x) : fournit la constante qui précède immédiatement x. Le prédécesseur
de la première valeur n’est pas défini.

Exemple
Ord(Samedi) = 1
Ord(Dimanche) = 2
...
Ord(Vendredi) = 7

Succ(Samedi) = Dimanche
Succ(Dimanche) = Lundi
Succ(Vendredi) = ? // non défini

Pred(Vendredi) = Jeudi
Pred(Jeudi) = Mercredi
Pred(Samedi) = ? // non défini

3. Type enregistrement (structure)

Définition
Un enregistrement est une structure de données qui regroupe, dans une seule
entité, plusieurs informations de types différents, organisées sous forme de champs.

Chaque champ possède un nom qui permet d’y accéder directement ainsi qu’un type,
qui peut être simple ou structuré.

2
Syntaxe de déclaration
Type Nom_enregistrement = Enregistrement
Nom_champ1 : Type1
Nom_champ2 : Type2
...
Nom_champN : TypeN
Fin

— Nom_champ1, Nom_champ2, . . ., Nom_champN : identifiants des champs de


l’enregistrement.
— Type1, Type2, . . ., TypeN : types associés aux champs.
— Une fois le type de l’enregistrement défini, on peut déclarer des variables de ce
type :
Var Nom_variable : Nom_enregistrement

Accès aux champs d’un enregistrement


On accède à une information en précisant le nom de la variable suivi du nom du champ
séparé par un point (.) :

Nom_variable.Nom_champ

Exemple simple 1
Les informations concernant un étudiant (nom, prénom, âge, sexe, moyenne du BAC)
peuvent être représentées par un enregistrement comme suit :

Type Etudiant = Enregistrement


Nom : Chaine
Prenom : Chaine
Age : Entier
Sexe : Caractere // ’M’ : Masculin, ’F’ : Feminin
MoyenneBac : Reel
Fin

Var Etudiant1, Etudiant2 : Etudiant


Var e1, e2, e3 : Etudiant

Remarque
Un enregistrement peut être représenté par un ensemble de cases. Ces cases peuvent
être de tailles différentes, car les types des champs ne sont pas forcément identiques
comme dans un tableau.

3
Nom Prenom Age Sexe MoyenneBAC

Etudiant1 "Gaya" "Islam" 19 ’M’ 12.5

Modification d’un champ


Pour modifier l’âge de l’étudiant 1 :

[Link] <- 20

Remarque
Le point indique le chemin d’accès : on accède d’abord à la variable puis au champ.
L’ordre de déclaration des champs n’a pas d’importance.

Exemple simple 2
Un autre exemple d’enregistrement représentant un étudiant :

Type Tetudiant = Enregistrement


num_inscr : Chaine
nom, prenom : Chaine
date_nais : Chaine
adresse : Chaine
resultat : Logique
Fin

Var Vetud : Tetudiant

Manipulation des champs


On peut remplir et modifier les informations de l’étudiant comme suit :

Vetud.num_inscr <- "20250125"


[Link] <- "LAKAB"
[Link] <- "Issam"
Vetud.date_nais <- "15/03/2007"
[Link] <- "Azzazga -Tizi-Ouzou "
[Link] <- Vrai

Exercice 1 : Compléter les instructions suivantes :

1) Afficher le prenom de l’etudiant.


2) Modifier l’adresse de l’etudiant.
3) Mettre le resultat a Faux.

4
4. Cas des enregistrements (structures) imbriquées
Un enregistrement peut être imbriqué dans un tableau ou dans un autre enregis-
trement.
La notation par un point (.) utilisée pour sélectionner les champs reste la même.
Tableaux d’enregistrements
Il est possible de déclarer un tableau dont les éléments sont de type enregistrement.
On définit d’abord le type enregistrement, puis on déclare un tableau dont les éléments
sont de ce type d’enregistrement.

Type Nom_enregistrement = Enregistrement


Nom_champ1 : Type1
Nom_champ2 : Type2
...
Nom_champN : TypeN
Fin

Var Nom_tableau : Tableau [1 .. N] de Nom_enregistrement

Accès aux éléments d’un tableau d’enregistrements


De manière générale, l’accès à un champ d’un enregistrement contenu dans un tableau
se fait en deux étapes :
1. On accède d’abord à l’élément du tableau à l’aide des crochets [ ].
2. On accède ensuite au champ de l’enregistrement à l’aide du point (.).
La syntaxe générale est donc :

Nom_tableau[indice].Nom_champj

où :
indice : désigne la position de l’élément dans le tableau.
j : désigne le numéro d’ordre du champ dans l’enregistrement.
Exemple : pour accéder au deuxième champ du troisième élément du tableau :

Nom_tableau[3].Nom_champ2

Exemple d’un tableau d’enregistrements


Pour déclarer un tableau d’enregistrements pour manipuler les informations de 100
étudiants, on doit écrire :

Type Etudiant = Enregistrement


Nom : Chaine
Prenom : Chaine
Age : Entier
Sexe : Caractere
MoyenneBac : Reel

5
Fin

Var Tab : Tableau[1..100] d’Etudiant // Tableau de 100 enregistrements.

\\ Pour modifier les champs de l’étudiant 2, on peut écrire, par exemple :

Tab[2].Nom <- "Laklouf"


Tab[2].Prenom <- "Morad"
Tab[2].Age <- 18
Tab[2].Sexe <- ’M’
Tab[2].MoyenneBac <- 11.7

Exemple de Manipulation d’un tableau d’enregistrement


Lire(Tab[2].Age) // Lit l’âge de l’étudiant 2

Tab[3].MoyenneBAC <- 13 // Modifie la moyenne du BAC de l’étudiant 3

X <- Tab[5].Prenom // Récupère le prénom de l’étudiant 5

Si (Tab[2].MoyenneBAC < 12) Alors \\ Comparaison


Ecrire("Admis en MI")
FSi

Remarque
Toute opération sur les enregistrements doit être effectuée par un algorithme : La
lecture, l’écriture, la comparaison ne peuvent se faire globalement, il faut lire, écrire
ou comparer chaque champ individuellement (un par un).
Une exception : On peut affecter une variable de type enregistrement à une autre
variable du même type.

Exemple
// Déclaration de deux variables de type Etudiant.
Var e1, e2 : Etudiant

// On peut écrire indifféremment : e2 <- e1 ou champ par champ :

[Link] <- [Link]


[Link] <- [Link]
[Link] <- [Link]
[Link] <- [Link]
[Link] <- [Link]

6
Enregistrement imbriqué d’un autre enregistrement
Un enregistrement peut contenir d’autres enregistrements comme champs. La syntaxe
générale est la suivante :

Type Nom_enregistrement_interne = Enregistrement


Champ1 : Type1
Champ2 : Type2
...
ChampN : TypeN
Fin

Type Nom_enregistrement_externe = Enregistrement


ChampA : TypeExterne1
ChampB : Nom_enregistrement_interne // champ de type enregistrement interne
ChampC : TypeExterne2
...
ChampZ : TypeExterneN
Fin

Var Nom_variable : Nom_enregistrement_externe

On accède aux champs imbriqués en utilisant le point (.) de manière successive :

Nom_variable.ChampB.Champ1

Accès aux champs imbriqués


Supposons que l’on ait une variable Vetud de type Tetudiant (voir exemple ci-
dessous), on peut accéder aux champs comme suit :

[Link] // accès au nom de l’étudiant


Vetud.date_nais.j // accès au jour de naissance
[Link] // accès au nom de la rue

Exemple d’enregistrements imbriqués


On peut déclarer des enregistrements contenant d’autres enregistrements :
Type Tdate = Enregistrement
j : Entier // jour
m : Entier // mois
a : Entier // année
Fin

Type Tadresse = Enregistrement


num : Entier // numéro de la maison ou du bâtiment
rue, ville : Chaine // nom de la rue et de la ville
Fin

7
Type Tetudiant = Enregistrement
num_inscr : Chaine // numéro d’inscription de l’étudiant
nom, prenom: Chaine // nom et prénom de l’étudiant
date_nais : Tdate // date de naissance (type Tdate)
adresse : Tadresse // adresse complète (type Tadresse)
resultat : Logique // résultat ou statut (vrai/faux, par exemple réussite)
Fin

Var Vetud : Tetudiant

Exemples de manipulation d’enregistrement imbriqué par d’autres enre-


gistrements
[Link] <-"Ferdjani"
[Link] <-"Alice"
Vetud.date_nais.j <- 22
Vetud.date_nais.m <- 2
Vetud.date_nais.a <- 2007
[Link] <- 12
[Link] <-"Tours"
[Link] <- "Tizi-Ouzou"
[Link] <- Vrai

Exercice 2
On considère les types suivants :

Type Tdate = Enregistrement


j : Entier
m : Entier
a : Entier
Fin

Type Tadresse = Enregistrement


num : Entier
rue, ville : Chaine
Fin

Type Tetudiant = Enregistrement


num_inscr : Chaine
nom, prenom : Chaine
date_nais : Tdate
adresse : Tadresse
resultat : Logique
Fin

Var Classe : Tableau[1..30] de Tetudiant

Travail demandé : Écrire un algorithme qui permet de :

8
1. Saisir les informations de 5 étudiants dans le tableau Classe.
2. Afficher le nom et le prénom du 3ème étudiant.
3. Modifier le champ resultat du 2ème étudiant pour indiquer qu’il a réussi.
4. Afficher la rue de l’adresse du 4ème étudiant.
5. Compter le nombre d’étudiants ayant resultat = Vrai et afficher ce nombre.

5. Traduction en C

Table 1 – Traduction du langage algorithmique vers le langage C – Type enregistrement.

Concept Langage algorithmique (LA) Langage C


Définition Type Nom_enregistrement = Enregistrement typedef struct {
du type Nom_champ1 : Type1 Type1 Nom_champ1;
enregis- Nom_champ2 : Type2 Type2 Nom_champ2;
trement ... ...
Nom_champN : TypeN TypeN Nom_champN;
Fin } Nom_enregistrement;
Var Nom_variable : Nom_enregistrement
Nom_enregistrement Nom_variable;
Exemple :
Exemple :
Type ZComplexe = Enregistrement
im : reel typedef struct {
re : reel float im;
Fin float re;
} ZComplexe;
Var c : ZComplexe
ZComplexe c;

Série d’exercices
Exercice 1
Ecrire un algorithme en LA/programme en langage C permettant de saisir des données
concernant deux personnes, de calculer et d’afficher leur différence d’âge, sachant qu’une
personne est caractérisée par son nom, son prénom et son âge.

Exercice 2
Un étudiant est défini par les informations suivantes : son identificateur, son nom, le
numéro de groupe auquel il appartient (1...4) et sa note comprise entre 0 et 20.
Ecrire un algorithme en LA/programme en langage C qui permet de lire les informations
relatives à 10 étudiants d’une section, puis rechercher et afficher les noms et les prénoms
de tous les étudiants du groupe 2 ayant une note < 10.

Exercice 3

9
Une voiture est caractérisée par les informations suivantes : sa marque, son modèle, son
année de fabrication et son prix.
Ecrire un algorithme en LA/programme en langage C permettant de saisir les informations
de 5 voitures, puis :
— Calculer et afficher le prix moyen des voitures.
— Afficher les informations de la voiture la plus récente.

Exercice 4
Un employé est défini par les informations suivantes : son matricule, son nom, son salaire
et son service.
Ecrire un algorithme en LA/programme en langage C permettant de saisir les informations
de 8 employés, puis :
— Rechercher et afficher les employés dont le salaire est supérieur au salaire moyen.
— Afficher les employés appartenant au service “Informatique”.

Exercice 5
Un étudiant est caractérisé par les informations suivantes : son matricule, son nom, son
prénom et ses notes dans 5 modules (tableau de 5 réels).
Ecrire un algorithme en LA/programme en langage C permettant de saisir les informations
de 5 étudiants, puis :
— Calculer et afficher la moyenne de chaque étudiant.
— Afficher le nom et le prénom de l’étudiant ayant la meilleure moyenne.

Exercice 6
Un produit est caractérisé par les informations suivantes : son code, son nom, son prix
unitaire et les quantités vendues durant 4 trimestres (tableau de 4 entiers).
Ecrire un algorithme en LA/programme en langage C permettant de saisir les informations
de 5 produits, puis :
— Calculer le total des ventes annuelles pour chaque produit.
— Afficher le nom du produit ayant réalisé le plus grand nombre de ventes.

Exercice 7
Un étudiant est caractérisé par les informations suivantes : son matricule, son nom, ses
notes composées d’un contrôle continu et d’un examen final, et son adresse composée du
numéro, de la rue et de la ville.
Ecrire un algorithme en LA/programme en langage C permettant de saisir les informations
de 5 étudiants, puis :
— Calculer la moyenne de chaque étudiant (0.4 * CC + 0.6 * Examen).
— Afficher les noms des étudiants admis (moyenne ≥ 10).

Exercice 9
Une commande est caractérisée par : son numéro, sa date (jour, mois, année), et les
informations du client (code, nom, adresse), ainsi que le montant total.
Ecrire un algorithme en LA/programme en langage C permettant de :

10
— Définir les types nécessaires en utilisant des enregistrements imbriqués.
— Saisir les informations de 5 commandes.
— Afficher les commandes effectuées en 2024.
— Calculer et afficher le montant total de toutes les commandes.

Exercice 9
Un patient est caractérisé par : son numéro (entier), son nom (chaine de 30 caractères),
et son dossier médical contenant son groupe sanguin, son poids et sa taille.
Ecrire un algorithme en LA/programme en langage C permettant de :
— Définir les types nécessaires avec enregistrements imbriqués.
— Saisir les informations de 5 patients.
— Calculer l’indice de masse corporelle (IMC = poids / taille²).
— Afficher les patients ayant un IMC supérieur à 25.

Exercice 10
Un vol aérien est caractérisé par : son numéro, son pilote (nom, années d’expérience), et
les passagers (tableau de 10 enregistrements contenant nom et âge).
Ecrire un algorithme en LA/programme en langage C permettant de :
— Définir les types nécessaires avec enregistrements imbriqués et un champ tableau.
— Saisir les informations de 3 vols.
— Afficher le nombre de passagers de plus de 18 ans pour chaque vol.
— Afficher le nom du vol ayant le plus grand nombre de passagers majeurs.

— Fin du chapitre —

11

Vous aimerez peut-être aussi