Cours Programmation Types Composes
Cours Programmation Types Composes
Cours Programmation Types Composes
Thierry Vaira
BTS SN
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 2 / 34
Types agrégés
Présentation
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 3 / 34
Types agrégés
Les tableaux
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 4 / 34
Types agrégés
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 5 / 34
Types agrégés
Danger : le plus grand danger dans la manipulation des tableaux est d'accéder en
écriture en dehors du tableau. Cela provoque un accès mémoire interdit qui n'est pas
contrôlé au moment de la compilation. Par contre, lors de l'exécution, cela provoquera
une exception de violation mémoire (segmentation fault ) qui se traduit généralement
par une sortie prématurée du programme avec un message "Erreur de segmentation".
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 6 / 34
Types agrégés
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 7 / 34
Types agrégés
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 8 / 34
Types agrégés
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 9 / 34
Types agrégés
int main()
{
char tab[4] = { 'a', 'b', 'c', 'd' }; // un tableau de caractères (il n'y a
pas de fin de chaînes)
char msg[] = "Bonjour"; // chaîne de caractères (le fin de chaîne est ajouté
automatiquement ici)
return 0;
}
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 10 / 34
Types agrégés
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 11 / 34
Types agrégés
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 12 / 34
Types agrégés
string s;
cin >> s; // La taille de s s'adapte toute seule à la saisie.
cout << s;
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 13 / 34
Types agrégés
#include <iostream>
#include <sstream> // stringstream !
#include <string>
using namespace std;
int main() {
string s("pi"); int n=2; float pi=3.14;
ostringstream oss;
oss << n << s << '=' <<2*pi; // on écrit dans oss, sans affichage
cout << "resultat : " << oss.str() << endl; // affiche : resultat : 2pi=6.28
return 0;
}
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 14 / 34
Types structurés
struct
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 15 / 34
Types structurés
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 16 / 34
Types structurés
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 17 / 34
Types structurés
Il est aussi possible de combiner les deux possibilités : date est le nom
de la structure (le modèle), tandis que naissancePierre,
naissanceMarie et mortColuche sont des variables.
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 18 / 34
Types structurés
La taille d'une structure est la somme des tailles de tous les objets qui
la compose (cf. sizeof()). Dans notre exemple, la structure aura une
taille de 3*4 (int) soit 12 octets.
Pour accéder aux champs dune structure, il faut distinguer 2 cas :
1 la structure est délivrée par une variable : cet accès se fait à l'aide de
l'opérateur . (point)
Exemple : naissanceMarie.mois désigne le champ mois de la
variable naissanceMarie (soit 11 dans notre exemple).
2 la structure est délivrée par un pointeur p : cet accès se fait à l'aide de
l'opérateur -> (indirection)
Exemple : p->jour désigne le champ jour de la variable p
Ou : (*p).jour désigne le champ jour de la variable p
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 19 / 34
Types structurés
Utilisation de typedef :
// directement :
typedef struct
{
int jour,
mois,
annee;
} DATE; // le type DATE
// ou apres :
typedef struct date DATE_NAISSANCE; // le type DATE_NAISSANCE
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 20 / 34
Types structurés
printf("La structure struct date occupe une taille de %d octets\n", sizeof(struct date));
return 0;
}
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 21 / 34
Types structurés
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 22 / 34
Types structurés
union
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 23 / 34
Types structurés
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 24 / 34
Types structurés
int main() {
CAPTEUR vitesseVent, temperatureMoteur, pressionAtmospherique;
pressionAtmospherique.iVal = 1013; /* un int */
temperatureMoteur.fVal = 50.5; /* un float */
vitesseVent.cVal = 2; /* un char */
printf("La pression atmosphérique est de %d hPa\n", pressionAtmospherique.iVal);
printf("La température du moteur est de %.1f °C\n", temperatureMoteur.fVal);
printf("La vitesse du vent est de %d km/h\n", vitesseVent.cVal);
printf("Le type CAPTEUR occupe une taille de %d octets\n", sizeof(CAPTEUR));
return 0;
}
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 25 / 34
Types structurés
Champs de bits
Les champs de bits ("Drapeaux" ou "Flags "), qui ont leur principale
application en informatique industrielle, sont des structures qui ont la
possibilité de regrouper (au plus juste) plusieurs valeurs.
La taille d'un champ de bits ne doit pas excéder celle d'un entier.
Pour aller au-delà, on créera un deuxième champ de bits.
On utilisera le mot clé struct et on donnera le type des groupes de
bits, leurs noms, et enn leurs tailles :
Déclaration d'un champ de bits
[classe de memorisation] struct [etiquette] {
{
type champ_1 : nombre_de_bits;
type champ_2 : nombre_de_bits;
[...]
type champ_n : nombre_de_bits;
} [identificateur];
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 26 / 34
Types structurés
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 27 / 34
Types structurés
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 28 / 34
Conteneur en C++
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 29 / 34
Conteneur en C++
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 30 / 34
Conteneur en C++
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 31 / 34
Conteneur en C++
int main() {
vector<int> v1; // un vecteur d'entier vide
return 0;
}
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 32 / 34
Conteneur en C++
int main() {
vector<int> v2(4, 100); // un vecteur de 4 entiers initialisés avec la valeur
100
return 0;
}
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 33 / 34
Conteneur en C++
Thierry Vaira (BTS Avignon) Les bases de l'Informatique v1.0 - 5 juillet 2017 34 / 34