Vous êtes sur la page 1sur 17

Structures et chiers

Rodrigue DJEUMEN

Rodrigue DJEUMEN Structures et chiers 1 / 17


Les structures Dénition de type structure

Dénition de type structure

Une structure (ou enregistrement, ou article) est une collection d'objet de diérents
types. Chaque objet composant un enregistrement, a un identicateur et un type
qui lui sont associées ; ces objets sont appelés les champs de l'enregistrement.
Syntaxe :
struct nom_de_enregistrement{
champ1 : type1;
champ2 : type2
...
champN : typeN;
};

Rodrigue DJEUMEN Structures et chiers 2 / 17


Les structures Dénition de type structure

Exemples de structure

Exemple :

struct Date{
short j, m;
int a;
};
typedef enum {lun, mar, mer jeu, ven, sam, dim} Jour;
typedef struct{
Jour j;
struct Date d;
} UneDate;

Rodrigue DJEUMEN Structures et chiers 3 / 17


Les structures Opérations sur les types structures

Opérations sur les structures

Déclaration de variables de type structurés :

struct date d1,d2;


UneDate demain;
On peut faire des aectations entre des variables de même type structurés
(par exemple d 1 = d 2).
La sélection d'un champ se fait à l'aide de l'opérateur ”.”
demain.j = sam;
demain.d.a = 2015;
demain.d.m = 12;
demain.d.j = 5;
On peut initialiser les variables structures lors de leur déclaration :

UneDate d = {lun, {3, 5}};


L'opérateur int sizeof (identicateur ) délivre la taille en octet occupée par
une structure déclarée.

Rodrigue DJEUMEN Structures et chiers 4 / 17


Les structures Pointeurs et structures

Pointeurs et structures
Soit le type date ci-après :
typedef struct{
short j,m;
int a;
} Date;
et la déclaration d'un pointeur sur cette structure :
Date *d;
L'accès à un champ du pointeur d ce fait par :
(*d).j = 2;
(*d).m = 12;
(*d).a = 2015;
On peut également se servir de l'opérateur − > pour simplier l'écriture et
obtenir le même résultat :
d->j = 2;
d->m = 12;
d->a = 2015;
Rodrigue DJEUMEN Structures et chiers 5 / 17
Les structures Exercices

Exercice 1

On voudrait créer un logiciel pour la gestion d'une banque ; sachant que :

Un compte est caractérisé par son numéro, le nom et le prénom du titulaire,


le solde et le type (épargne, courant, chèque,. . .) ;

Une personne est caractérisée par le numéro de sa carte d'identité, son nom
et son prénom, sa date de naissance.

1 Donner la dénition des types suivants :

1 Le type Compte
2 Le type Personne

2 Écrire un programme permettant de lire les données d'un compte.


3 Écrire un programme permettant de lire et d'acher les données d'une
personne.

Rodrigue DJEUMEN Structures et chiers 6 / 17


Les chiers Dénition

Notion de chier

Un chier est une collection d'informations, structurée en unités


d'accès appelées articles ( ou enregistrements) qui sont tous du même
type, en général composé.
Exemple : Le chier des résultats à un examen comprendra un article
par étudiant, chaque article étant composé de 4 champs :
char nom[40]
char Prenom[40]
char matricule[6]
char DateNaissance[8]
oat note
Un chier est toujours enregistré sur un support externe à la mémoire
centrale et tout programme de traitement échangera des informations
avec le chier article par article.
On distingue deux types de chiers : chiers textes et chiers binaires.

Rodrigue DJEUMEN Structures et chiers 7 / 17


Les chiers Supports et organisation

Supports

On distingue deux catégories de supports :

Les supports séquentiels : les informations sont écrites ici les unes à la
suite des autres, et sont telles que l'accès à l'information i nécessite le
passage sur toutes les informations qui précèdent i sur le support. Exemple :
la bande magnétique, le streamer,...

Les supports adressables : ces supports sont structurées en surfaces


d'enregistrement individuellement adressables : les informations qui y sont
enregistrées peuvent être retrouvées directement, grâce à leur adresse, sans
que l'on ait à passer par des enregistrements intermédiaires. Exemple : les
disques( Disque Dur, Disquette, CD-ROM, DVD,...)

Rodrigue DJEUMEN Structures et chiers 8 / 17


Les chiers Supports et organisation

Organisation & accès

Selon les impératifs du traitement, on utilise deux techniques d'accès aux


articles d'un chier :
L'accès séquentiel : on accède au chier dans l'ordre

d'enregistrement des articles.


L'accès sélectif : on accède directement à un article particulier sans

passer par les articles intermédiaires ; cet accès n'est possible qu'avec
les supports adressables.
L'organisation d'un chier, dénit la manière dont les articles du chier
sont disposés sur le support. On distingue trois organisations principales :
Séquentielle qui ne permet que l'accès séquentielle.

Directe conçue pour l'accès sélectif

Séquentielle indexée qui permet l'accès séquentiel et l'accès sélectif.

Rodrigue DJEUMEN Structures et chiers 9 / 17


Les chiers Opérations sur un chier

Identication du chier

Un chier F est identié, de manière unique, par un nom externe qui


lui est attaché.
Il peut exister plusieurs programmes de traitement de F et, dans
l'environnement de chacun d'eux, F est décrit avec son nom interne
qui n'a en général, aucun rapport avec le nom externe.
Au moment de traiter un chier, un programme doit s'assurer le
contrôle de ce chier à l'aide d'une primitive d'ouverture de chier. le
rôle d'une telle action est :
d'établir la correspondance entre le nom interne et le nom externe,
d'assurer au programme le contrôle du chier,
d'eectuer le positionnement initial du dispositif de lecture/écriture sur
le support de chier.

Rodrigue DJEUMEN Structures et chiers 10 / 17


Les chiers Opérations sur un chier

Ouverture de chier

Si ch est le nom interne du chier, nous noterons fopen(ch, mode )


la primitive qui permet d'ouvrir le chier ch, suivant mode. le
pointeur NULL est retourné si le chier n'est pas trouvé.

Modes

r ouverture en lecture
w ouverture en écriture (si chier existe, le contenu est eacé)
a ouverture en allongement
r+ Ouverture en lecture pour mise à jour
w+ analogue à w, mais permet de lire
a+ ouverture en lecture et en allongement

Rodrigue DJEUMEN Structures et chiers 11 / 17


Les chiers Opérations sur un chier

Fermeture de chier

la primitive fclose (ch) permet de marquer la n de traitement du


chier.
L'exécution de la primitive de fermeture a deux but :
Compléter le chier par une marque de n de chier (notée EOF ), dans
le cas où le traitement était une création de chier.
Signaler l'abandon du chier.

La primitive int feof (FILE ∗ f ) permet de tester si la n de chier est


atteinte.

Rodrigue DJEUMEN Structures et chiers 12 / 17


Les chiers Opérations sur un chier

Traitement sur un chier

Il existe trois mode de traitement associé aux chiers :


Traitement en lecture : Ici, le chier est ouvert, et parcouru à la
recherche de l'information voulue. Pendant ce temps, il reste
accessible en lecture à d'autres programmes.
Traitement en écriture : Le chier est ouvert de manière exclusive,
an d'éviter que les données écrites ne soient incohérentes ; et l'ajout
du nouvel élément se fait à la n du chier.
Traitement en lecture/écriture ou mise à jour : le chier est
ouvert de manière exclusive et une recherche est préalablement faite
sur l'article à modier ; une fois les modications faites, l'article est
écrite dans le chier.

Rodrigue DJEUMEN Structures et chiers 13 / 17


Les chiers Fichier texte

Fichier textes
Un chier de texte est formé d'éléments bien connus : les caractères.
Les caractères contenus dans un chier de texte sont organisés en
lignes, chacune terminée par une marque de n de ligne. Après la
dernière ligne, le chier se termine par une marque de n de chier.
La déclaration d'un chier texte se fait par l'instruction FILE ∗ ch;
Les primitives de lecture sont :
int fgetc (FILE ∗ ch); pour lire un caractère dans le chier,
int fgets (char ∗ ch, int n, FILE ∗ ch); pour lire n caractères sur ch et
les ranger dans ch.
int fscanf (FILE ∗ ch, char ∗ format , ...); pour lire une donnée formatée
dans le chier.

Les primitives d'écriture sont :


int fputc (char c , FILE ∗ ch); pour écrire le caractère c , dans le chier,
int fputs (char ∗ ch, FILE ∗ ch); pour écrire la chaîne ch sur ch.
int fprintf (FILE ∗ ch, char ∗ format , ...); pour écrire une donnée
formatée dans le chier.

Rodrigue DJEUMEN Structures et chiers 14 / 17


Les chiers Fichier texte

Exemple

#include<stdio.h>
void main(){
int i ;
double tab[2] ;
FILE *chier ;
chier = fopen(essais.txt,r) ;
if (chier != NULL){
for(i=0 ;i<2 ;i++)
fscanf(chier, %lf\n, tab+i) ;
fclose(chier) ;
}
for(i=0 ;i<2 ;i++)
printf(%lf\n, tab[i]) ;
}

Rodrigue DJEUMEN Structures et chiers 15 / 17


Les chiers Fichier binaire

Fichier binaire

Les types chier binaire sont structurés, le type de leurs éléments peut
être n'importe lequel (sauf un type chier !).
La déclaration d'un chier binaire se fait par l'instruction FILE ∗ ch;
La primitive de lecture est :
int fread (void ∗ destination, int taille , int nombre , FILE ∗ ch); pour lire
un bloc de données en binaire, pus retourner le nombre d'éléments
eectivement lus.

La primitive d'écriture est :


int fwrite (void ∗ source , int taille , int nombre , FILE ∗ ch); pour écrire
un bloc donnée en binaire dans le chier.

Rodrigue DJEUMEN Structures et chiers 16 / 17


Les chiers Exercices

Exercices
Dans un établissement, un étudiant est caractérisé par son matricule, ses noms et
prénoms, son âge et sa lière. Un ensemble d'étudiants d'un parcours-type
constitue, une classe d'étudiants ; Cette classe d'étudiants peut être implémentée
par un chier.Il vous est demandé de mettre sur pied un programme permettant
de prendre en charge la gestion de la scolarité.

1 Comment représenter les structures de données Etudiant et une classe


d'étudiant ?
2 Écrire une fonction void lireDonnee (...) permettant de lire les données d'un
étudiant ;
3 Écrire une fonction void creerClasse (...); se servant de la fonction
lireDonnee () pour créer à volonté, une classe d'étudiants ;
4 Écrire une fonction void acherClasse (...) permettant d'acher la liste des
étudiants ;
5 Écrire une fonction int rechercher (...) permettant de rechercher l'existence
d'un étudiant de matricule mat dans la classe.

Rodrigue DJEUMEN Structures et chiers 17 / 17