École préparatoire aux sciences et techniques, Annaba
Année universitaire 2012/2013
Module : Informatique 2
Série de TD n˚7 : Structures
Solution
Rappel sur les structures
1. En C++, les tableaux et les structures permettent de résérver en mémoire un en-
semble de données. Mais quel différence principale existe entre tableaux et struc-
tures ?
Les éléments d’un tableau sont tous de même type
Alors que dans une structure les éléments peuvent être de types différents.
2. Dans un plan cartésien, un point a deux coordonnées x et y. Donner une structure
qui permet de représenter un point.
struct point {
int x;
int y;
};
3. Généralement, comment appelle-t-on les éléments d’une structure ?
Les champs.
4. Comment on peut accéder aux champs d’une variable de type structure ?
En utilisant le point. Exemple a.x;
5. Soit la déclaration suivante :
struct personne {
int age;
char sexe;
};
Choisir la proposition correcte. Cette déclaration :
1
(a) Crée deux variables age et sexe.
(b) Crée une nouvelle variable appelée personne qui a deux champs age et sexe.
(c) Crée un nouveau type appelé personne. Des variables de type personne
peuvent être déclarées.
(c)
6. Utiliser la structure déclarée dans la question 2 pour déclarer deux points a(10,5)
et b(1,3).
point a;
a.x = 10;
a.y = 5;
point b;
b.x = 1;
b.y = 3;
Exercices 1
Soit la structure suivante :
struct point {
int x;
int y;
};
1. Écrire une fonction distance qui a deux paramètres de type point. Cette fonction
calcule la distance entre ces deux points.
int distance(point a, point b) {
return sqrt((b.x - a.x) * (b.x - a.x) + (b.y - a.y) * (b.y - a.y));
}
2. En utilisant la structure point, écrire une structure triangle qui pérmet de repré-
senter un triangle.
struct triangle {
point p1;
point p2;
point p3;
}
3. Créer une variable de type triangle avec les points (0,0) (1,0) et (0,1).
triangle t;
t.p1.x = 0;
2
t.p1.y = 0;
t.p2.x = 1;
t.p2.y = 0;
t.p3.x = 0;
t.p3.y = 1;
Exercice 2
Soit le programme suivant :
#include<iostream>
using namespace std;
struct point {
int x;
int y;
};
void raz(point p) {
p.x = 0;
p.y = 0;
}
int main() {
point m;
m.x = 20;
m.y = 30;
raz(m);
cout << "Le point après la remise à zero m(" << m.x << "," << m.y << ")";
}
1. Qu’affiche ce programme ?
Le point après la remise à zero m(20,30)
2. Que doit-t-on modifier pour que la fonction raz remette à zero le point donnée en
paramètre ?
Le paramètre de la fonction raz devra être passé par référence (ou variable)
pour pouvoir modifier ces champs :
void raz(point & p)
Exercice 3
Nous supposons qu’une facture est un tableau de 10 éléments. Chaque élément de
cette facture est un produit qui a les champs prixU et quantité. Écrire un programme
qui :
3
1. Déclare une facture.
2. Lit les données de la facture à partir du clavier.
(prixU ∗ quantité))
P
3. Calcule et affiche le total de la facture. (total =
#include<iostream>
using namespace std;
struct produit {
double prixU;
int quantite;
};
int main() {
//(a)
produit facture[10];
//(b)
for (int i=0;i<10;i++) {
cin >> facture[i].prixU;
cin >> facture[i].quantite;
}
//(c)
double total = 0;
for (int i=0;i<10;i++) {
total += facture[i].prixU * facture[i].quantite;
}
cout << total;
}