Академический Документы
Профессиональный Документы
Культура Документы
Notez que l'on pourrait choisir une autre représentation pour les dates; par exemple,
le mois pourrait être codé par un nombre entier compris entre 1 et 12.
Un structure peut contenir une autre structure, qui doit avoir été déclarée avant :
typedef struct {
char nom[32];
char prenom[32];
date date_naissance;
} etudiant;
Les champs peuvent donc être de n'importe quel type connu : types de bases,
tableaux, pointeurs ou autre structure.
Après avoir déclaré un type structure, on peut l'utiliser pour déclarer des variables
de ce type dans nos fonctions C. Le nouveau type s'utilise comme un type de base.
void main(void) {
int n; /* un entier */
etudiant E; /* un etudiant */
etudiant Robert; / un autre etudiant */
...
}
E.nom s'utilise
comme une variable ordinaire (dans cet exemple c'est un
tableau de caractères).
Exemple :
complexe z; /* un nombre complexe (voir plus haut) */
complexe *pz; = &z; /* un pointeur sur z */
z.x = 1; /* accede au champ x de z */
z.y = 2;
printf("partie reelle de z = %f\n", pz-> x ); /* affiche 1 */
pz->y = z.x + 3; /* <=> z.y = z.x + 3 */
(*pz).x = 22; /* <=> pz->x = 22 ou bien z.x = 22 */
ou par adresse :
void Affiche( etudiant *pE );
1.6 Tableaux de structures
Nous donnons à la suite le programme C complet, pour une pile de 100 nombre
réels.
pile.h :
définition du type pile (struct), et prototypes des fonctions
manipulant ce type.
pile.c : corps des fonctions (implémentation);
expile.c : un petit exemple pour tester notre pile.
Remarques
1. Pour définir une pile avec un autre type d'éléments, il suffit de changer le
type du tableau T et les prototypes de quelques fonctions.
2. Les noms de nos fonctions ne sont pas très judicieux, car ils risquent d'être
utilisés par d'autres bibliothèques (files, listes, ...). Il aurait été préférable
d'utiliser des noms plus spécifiques, comme par
exemple pile_init, pile_empiler, etc.
3. L'ensemble formé par la définition d'un type et les fonctions le manipulant,
qui définissent les opérations que l'on peut effectuer sur des variables de ce
type, est ce que l'on appele en informatique un "objet". Nous reviendrons sur
la notion d'objet lors de l'étude du langage JAVA.
fichier progs/pile.h
/* -------------------------------------------------------------
* File.........: pile.h
*
* Author.......: Emmanuel Viennet, GTR1 1999-00
*
* Created......: Tue Jan 18 23:03:17 2000
*
* Description..: Exemple de gestion d'une pile de nombre reels
*
* -------------------------------------------------------------
*/
/* definition de la structure pile : */
typedef struct {
float T[100]; /* pile contenant des floats, max 100 */
int sommet; /* index du sommet, -1 si pile vide */
} pile;
void init_pile( pile *p );
int est_vide( pile *p );
int est_pleine( pile *p );
void empiler( pile *p, float v );
float depiler( pile *p );
void afficher( pile *p ); /* pour les tests */
#include <stdio.h>
#include "pile.h"
void init_pile( pile *p ) {
p->sommet = -1;
}
int est_vide( pile *p ) {
if (p->sommet == -1)
return 1;
else
return 0;
}
int est_pleine( pile *p ) {
if (p->sommet == 99) /* notre pile contient au max 100 elements */
return 1;
else
return 0;
}
void empiler( pile *p, float v ) {
if (est_pleine(p)) {
printf("erreur: empiler: la pile est pleine\n");
return; /* ne fait rien */
}
p->sommet = p->sommet + 1;
p->T[ p->sommet ] = v;
}
float depiler( pile *p ) {
float resultat;
if (est_vide(p)) {
printf("erreur: depiler: la pile est vide\n");
return 0; /* ? renvoie 0 */
/* note: on pourrait appeler exit(1); pour terminer
le programme */
}
resultat = p->T[ p->sommet ];
p->sommet = p->sommet-1;
return resultat;
}
/* Affiche l'etat de la pile,
pratique pour les tests
*/
void afficher( pile *p ) {
int i;
printf("etat de la pile:\n");
/* on utilise la pile comme un tableau */
for (i=0; i <= p->sommet; i++)
printf("\t[ %3.2f ]\n", p->T[i] );
}
#include "pile.h"
void main(void) {
pile MaPile;
/* on doit toujours initialiser la pile avant tout: */
init_pile( &MaPile );
empiler( &MaPile, 22);
empiler( &MaPile, 314);
empiler( &MaPile, 1000 );
afficher( &MaPile );
printf("on depile %f\n", depiler( &MaPile ) );
afficher( &MaPile );
printf("on depile %f\n", depiler( &MaPile ) );
printf("on depile %f\n", depiler( &MaPile ) );
printf("on depile %f\n", depiler( &MaPile ) );
}
fin du fichier progs/expile.c
EXERCICE 1 - Structures
1- Donner les déclarations des structures suivantes :
EXERCICE 2 - Fichiers textes
http://www-gtr.iutv.univ-paris13.fr/Cours/Mat/LangageC/TD2004/td08.html
http://www-gtr.iutv.univ-paris13.fr/Cours/Mat/LangageC/TD2004/td07.html