Académique Documents
Professionnel Documents
Culture Documents
Programme
2
Rappel gnral et mise niveau Tableaux Les fonctions Directives au pr processeur Type compos et structures Fichiers Pointeurs Rcursivit Listes chanes Arbres Tables de hachage Graphes
21/11/2012
Evaluation
Remarque !! : la prsence et la ralisation des Exos de TD & de TP & mini-projet seront pris en considration dans la note finale de module.
Les tableaux
Un tableau reprsente selon ses dimensions, un vecteur ou une matrice d'lments d'un mme type. Un tableau est un ensemble fini d'lments de mme type, stocks en mmoire des adresses contigus.
21/11/2012
Les tableaux
Dclaration de tableaux en C : <TypeSimple> <NomTableau>[<Dimension>]; Les noms des tableaux sont des identificateurs
21/11/2012
Les tableaux
Les tableaux une dimension
Dclaration: type nom[dim];
Exemples: int compteur[10];
float nombre[20]; Utilisation: Un lment du tableau est repr par son indice. En langage C les tableaux commencent l'indice 0. L'indice maximum est donc dim-1. Appel: nom[indice] compteur[2] = 5; nombre[i] = 6.789; printf("%d",compteur[i]); scanf("%f",&nombre[i]);
Exemples:
Les tableaux
Les tableaux plusieurs dimensions:
Tableaux deux dimensions:
Dclaration: type nom[dim1][dim2]; Exemples: int compteur[4][5]; float nombre[2][10];
Utilisation: Un lment du tableau est repr par ses indices. En langage C les tableaux commencent aux indices 0. Les indices maximum sont donc dim1-1, dim2-1. Appel: nom[indice1][indice2] compteur[2][4] = 5; nombre[i][j] = 6.789; printf("%d",compteur[i][j]); scanf("%f",&nombre[i][j]);
Exemples:
Les tableaux
Initialisation des tableaux On peut initialiser les tableaux au moment de leur dclaration: Exemples: int liste[10] = {1,2,4,8,16,32,64,128,256,528}; float nombre[4] = {2.67,5.98,-8,0.09}; int x[2][3] = {{1,5,7},{8,4,3}}; /* 2 lignes et 3 colonnes * /
Les tableaux
Si la dimension n'est pas indique explicitement lors de l'initialisation, alors le compilateur rserve automatiquement le nombre d'octets ncessaires.
Exemples : int A[] = {10, 20, 30, 40, 50}; ==> rservation de 5*sizeof(int) octets (dans notre cas: 10 octets) float B[] = {-1.05, 3.33, 0.87, -12.3}; ==> rservation de 4*sizeof(float) octets (dans notre cas: 16 octets)
21/11/2012
Les tableaux
Affichage et affectation :
Ecrire un programme qui permet de saisir N valeurs entires dans un tableau puis de les afficher horizontalement.
10
21/11/2012
Les tableaux
Exercices sur les tableaux :
Exercice 1 : Ecrire un programme qui lit la dimension N d'un tableau T du type int (dimension maximale: 50 composantes), remplit le tableau par des valeurs entres au clavier et affiche le tableau. Effacer ensuite toutes les occurrences de la valeur 0 dans le tableau T et tasser les lments restants. Afficher le tableau rsultant.
11
21/11/2012
Les tableaux
Exercice 2 : Ecrire un programme qui lit la dimension N d'un tableau T du type int (dimension maximale: 50), remplit le tableau par des valeurs entres au clavier et affiche le tableau.
Ranger ensuite les lments du tableau T dans l'ordre inverse sans utiliser de tableau d'aide. Afficher le tableau rsultant.
12
21/11/2012
Les tableaux
Exercice 3 : Ecrire un programme qui lit la dimension N d'un tableau T du type int (dimension maximale: 50), remplit le tableau par des valeurs entres au clavier et affiche le tableau.
Copiez ensuite toutes les composantes strictement positives dans un deuxime tableau TPOS et toutes les valeurs strictement ngatives dans un troisime tableau TNEG. Afficher les tableaux TPOS et TNEG.
13
21/11/2012
Les tableaux
Exercice 4: Ecrire un programme qui permet dinsrer une valeur entre au clavier dans un tableau dentiers. Exercice 5: Rechercher dans un tableau d'entiers une valeur VAL entre au clavier. Afficher la position de VAL si elle se trouve dans le tableau, sinon afficher un message correspondant. La valeur POS qui est utilise pour mmoriser la position de la valeur dans le tableau, aura la valeur -1 aussi longtemps que VAL n'a pas t trouve.
14 21/11/2012
Les tableaux
Exercice 6 : Ecrire un programme qui permet de supprimer une valeur dun tableau dentiers en indiquant sa position dans ce tableau. Exercice 7 : Ecrire un programme qui permet de modifier une valeur dun tableau dentiers en indiquant sa position dans ce tableau.
15
21/11/2012
Les tableaux
Sujet de Travaux Pratiques N : 1 On se propose de raliser un rpertoire dadresses : un rpertoire est un ensemble dinformation dont chaque lment possde les informations suivantes : Contact : Nom*, Prnom*, Lien de parent, adresse, Tl.dom, Tl.entreprise, GSM*, email* Avec Adresse : Numro, Nom Rue, Code Postal, Ville, Pays.
Le lien de parent est un indice de la liste suivante : 0 : Mre 1 : Pre 2 : Sur
16
Les tableaux
Les informations indiques par * sont obligatoires 1) 2) 3) 4) 5) 6) 7) 8) 9) Fonctions programmer : Ajouter un contact Afficher la liste des contacts Consulter un contact Modifier un contact Supprimer un contact Recherche par Nom Recherche multicritre : Nom, Prnom, Ville, Amlioration : lajout doit vrifier si le contact existe dj.
17
21/11/2012
Les fichiers
Un fichier (file) est un ensemble structur de donnes stock en gnral sur un support externe (disque dur, disque optique, ...). Un fichier structur contient une suite d'enregistrements homognes, qui regroupent le plus souvent plusieurs composantes.
18
21/11/2012
Les fichiers
Oprations possibles avec les fichiers: Crer - Ouvrir - Fermer - Lire - Ecrire - Dtruire Renommer. La plupart des fonctions permettant la manipulation des fichiers sont ranges dans la bibliothque <STDIO.H>, certaines dans <IO.H>. Dclaration: FILE *fichier; /* majuscules obligatoires pour FILE */ La dclaration des fichiers doit figurer AVANT la dclaration des autres variables.
19 21/11/2012
Les fichiers
Ouverture: FILE *fopen(char *nom, char *mode); FILE *fopen(filename, mode) /* dclaration dans stdio.h */ char filename[], mode[]; On passe donc 2 chanes de caractres nom: celui figurant sur le disque, exemple: C :\test.dat
20 21/11/2012
Les fichiers
fopen a pour argument deux chanes de caractres, le nom du fichier et le mode d'ouverture. donne comme rsultat un pointeur NULL si l'ouverture a chou sinon le pointeur renvoy est utilis dans les critures, les lectures et les dplacements ultrieurs.
Les fichiers
Mode (pour les fichiers TEXTES) : r : lecture seule w : criture seule (destruction de l'ancienne version si elle existe) w+ : lecture/criture (destruction ancienne version si elle existe) r+ : lecture/criture d'un fichier existant (mise jour), pas de cration d'une nouvelle version. a+ : lecture/criture d'un fichier existant (mise jour), pas de cration d'une nouvelle version, le pointeur est positionn la fin du fichier.
22 21/11/2012
Les fichiers
Mode (pour les fichiers BINAIRES) : On ajoute b devant les modes quon a vu : rb wb
23
21/11/2012
Les fichiers
#include <stdio.h> /* Inclusion de la biblio standard */ int main() { /* Dclaration d'un fichier */ FILE* fichier; /* Ouverture du fichier test en lecture */ fichier = fopen("/home/users/manouvrier/test","r"); /* Test de l'ouverture pour vrifier les ventuels problmes */ if (fichier== NULL) /* Il y a eu un problme */ { /* Affichage d'un message d'erreur */ printf("Erreur ouverture fichier "); } /* Si l'ouverture a pu se faire */ else ... }
24 21/11/2012
Les fichiers
Fermeture: Int fclose(FILE *fichier); Retourne 0 si la fermeture sest bien passe, EOF en cas derreur. Il faut toujours fermer un fichier la fin d'une session. mode (pour les fichiers TEXTE) : Exemple : FILE *fichier ;
25
Les fichiers
Destruction: int remove(char *nom); Retourne 0 si la fermeture sest bien passe. Exemple : remove( C:\test.dat ) ; Renommer: int rename(char *oldname, char *newname); Retourne 0 si la fermeture sest bien passe.
26 21/11/2012
Les fichiers
Positionnement du pointeur au dbut du fichier : void rewind(FILE *fichier);
int feof(FILE *id) dit si on est en fin de fichier ou non (0).
Rcupration de la position du curseur dans le fichier : int ftell (FILE * fichier) ; Exemple :
27
Les fichiers
Ecriture dans le fichier texte: int putc(char c, FILE *fichier); Ecrit la valeur de c la position courante du pointeur , le pointeur avance d'une case mmoire. Retourne EOF qui marque la fin de fichier, en cas derreur. Exemple : putc(A, fichier) ;
28
21/11/2012
Les fichiers
int putw(int n, FILE *fichier); le pointeur avance du nombre de cases correspondant la taille d'un entier (4 cases). Retourne n si lcriture sest bien passe. int fputs(char *chane, FILE *fichier); le pointeur avance de la longueur de la chaine ('\0' n'est pas rang dans le fichier). signifie "met une chane dans un fichier" Retourne EOF en cas derreur. Exemple : fputs( BONJOUR ! , fichier) ;
29 21/11/2012
Les fichiers
fputc : ce qui signifie "met un caractre dans un fichier". Comme son nom l'indique, cette fonction crit un octet dans un fichier. Exemple : char erreur; erreur = fputc('x', Pointeur_sur_fichier); putc putc(caractre, pointeur_sur_fichier) crit le caractre dans un fichier la position pointeur_sur_fichier (et renvoie le caractre).
Les fichiers
Ecriture dans le fichier binaire:
int fwrite(void *p,int taille_bloc,int nb_bloc,FILE *fichier);
p crit partir de la position courante du pointeur fichier nb_bloc X taille_bloc octets lus partir de l'adresse p. Retourne le nombre de blocs crits. Exemple : taille_bloc=4 (taille d'un entier en C), nb_bloc=3, criture de 3 octets. int tab[10] ; fwrite(tab,4,3,fichier) ;
31 21/11/2012
Les fichiers
fwrite : crit dans un fichier des objets d'un type quelconque. Il faut prciser la taille d'un objet (par exemple avec sizeof(objet)), le nombre d'objets crire et le pointeur du fichier destination. la fonction renvoie le nombre d'lments effectivement crits.
Les fichiers
int fprintf(FILE *fichier, char *format, liste d'expressions);
rserve plutt aux fichiers ASCII. Retourne EOF en cas derreur. Exemples: fprintf(fichier,"%s","il fait beau"); fprintf(fichier,%d,n); fprintf(fichier,"%s%d","il fait beau",n);
33
21/11/2012
Les fichiers
getc getc(pointeur_sur_fichier) renvoie le caractre lu dans un fichier l'endroit point par le pointeur_sur_fichier et incrmente ce pointeur, ou renvoie EOF si on est la fin du fichier.
Les fichiers
Exemple : copier un fichier dans un autre
void main(int argc, char *argv[] ) /* copier le fichier en premier argument dans le fichier en 2me argument */ { FILE *fopen(), *pf1, *pf2 ; int c ; if (argc <= 2) printf(" deux arguments SVP...") ; else { pf1 = fopen(argv[1] , "r") ; /* uverture du premier fichier en lecture */ pf2 = fopen(argv[2] , "w") ; /* ouverture du deuxime fichier en criture */ while ( (c = getc(pf1)) != EOF ) putc(c, pf2) ; fclose(pf1) ; fclose(pf2) ; } }
Les fichiers
Lecture dans un fichier : fscanf : lecture analogue scanf. Syntaxe : Nb_lu = fscanf(Pointeur_sur_fichier, format, liste de pointeurs); Nb_lu est le nombre d'arguments lus et accepts. Exemple : Nb_lu = fscanf(Pointeur_sur_fichier, "%s", Chane);
Les fichiers
Dans un fichier texte fgetc : ce qui signifie "prend un caractre dans un fichier". Exemple : int caractere; caractere = fgetc(Pointeur_sur_fichier);
Les fichiers
fgets : ce qui signifie "prend une chane dans un fichier". Lit un certain nombre de caractres dans un fichier et les met dans une chane en ajoutant le caractre nul la fin. Exemple : fgets(Chaine, 10, Pointeur_sur_fichier); Lit 10 caractres dans le fichier et les crits dans Chaine. Un dernier caractre nul est ajout. Si une fin de ligne (EOL) est rencontre avant le dixime caractre lu, seuls les caractres avant la fin de ligne seront lus et ils seront suivis dans la chane par EOL et NULL
Les fichiers
Dans un fichier binaire Syntaxe : Nb_lu = fread(pointeur_sur_tableau, taille_element, nb_elements, fichier); Nb_lu est gal nb_elements si l'criture s'est passe correctement.
Les fichiers
Exemple: #include <stdio.h> FILE *Pointeur_sur_fichier; fopen("C:\FSTT\essai.dat", "wb"); int tableau[5]; nb = fread(tableau, sizeof(int), 3, Pointeur_sur_fichier); Lit des nombres entiers et les range dans les trois premires cellules du tableau ; nb a pour valeur le nombre d'lments crits, 3 si tout s'est bien pass.
Les fichiers
Exercice 1: Ecrire un programme qui permet de crer un fichier dtudiants. Exercice 2 : Ecrire une procdure qui permet de modifier les informations dun tudiant.
Les piles
Une pile est un type de donnes abstrait bas sur le modle de donnes liste, dans lequel les oprations sont ralises une extrmit de la liste, appel sommet de la pile. Le terme LIFO (Last-In-First-out) est synonyme de pile.
Les piles
Les oprations sur une pile : Empiler(p) : ajout dun lment au sommet de la pile. Dpiler() : enlve un lment de la pile, retourne le sommet de la pile. EstVide(P) retourne vrai si P est vide.
Empiler Dpiler
Les piles
Une pile peut tre reprsente sous forme d'un tableau : 3 sommet de la pile 4 5 6 7 8
Les piles
Empiler :
Dpiler :
Les piles
Implantation dune pile par un tableau : Dclaration : #define maxpile 100 Typedef struct { Int tableau[maxpile] ; Int sommet ; } pile ;
Les piles
Initialisation : Pile initialiser() { Pile p ; p.sommet=0 ; return p ; }
Les piles
Empiler : Void empiler(pile *p,int x) { p.tableau[p.sommet]=x ; p.sommet+ +; }
Les piles
Dpiler : Int Dpiler(pile p) { int x=p.tableau[p.sommet] ; p.sommet-- ; return x ; } Remarque : les piles peuvent tre implmentes par des listes.
Les piles
Exercice :
Amliorer la fonction empiler pour quelle affiche un message derreur si le sommet dpasse la taille maximum de la pile. Ecrire une fonction menu() dont la structure est la suivante : Printf_______menu principal__________\n Printf( Printf( Printf( Printf( empiler _____________ e\n) ; dpiler _____________ d\n) ; afficher _____________ a\n) ; Quitter _____________ Q\n) ;
Ecrire la fonction qui fait appel ces fonctions. Rcrire les fonctions en utilisant le formalisme pointeur.
Les listes
Dfinitions : Une liste est une squence finie de zro, un, ou plusieurs lments d'un type donn. Si les lments sont de type E, on dit que le type de la liste est "liste de E' : listes d'entiers, des listes de nombres rels, des listes de structures, etc. Une liste est souvent crite comme une squence d'lments spars par des virgules et entoure par des parenthses : (a1,a2, ...an) o les ai sont les lments de la liste.
Les listes
Longueur d'une liste : La longueur d'une liste est le nombre d'lments (mme les doublons) dans la liste. Si le nombre d'occurrences est zro, on dit que la liste est vide. EXEMPLES : L = (a,b,t,y,a,u) de longueur 6. L = (1,2,3,6) de longueur 4
Les listes
Parties d'une liste : Si la liste n'est pas vide, alors elle comprend un premier lment, appel la tte. Le reste de la liste est appel la queue. Si L=(a1,a2, ...an) est une liste, alors pour tous i et j tels que 1 i j n, (ai,ai+1, ...aj) est une sous-liste de L.
Les listes
Position d'un lment :
A chaque lment de la liste est associ une position. Si (a1,a2, ...an) est une liste et n 1, alors on dit que a1 est le premier lment de la liste, a2 le second, et ainsi de suite, an tant le dernier. On dit que ai est de position i. De plus, on dit que ai suit ai-1 et prcde ai+1. Une position contenant l'lment a est une occurrence de a. Le nombre de positions dans une liste est gal sa longueur. Il est possible qu'un mme lment apparaisse plusieurs positions. Il ne faut donc pas confondre position et lment de la liste.
Les listes
Oprations sur les listes : a) Insertion : On peut insrer un lment x la position i d'une liste L. Cette action consiste placer x dans la liste L la ime place, et de dcaler les lments de la liste partir de la position i d'une position dans la liste (le ime lment devient le ime+1, etc.).
Les listes
EXEMPLE : L=(2,3,4,2,6,7) 1 - Insertion de l'lment 7 la position 3. L=(2,3,7,4,2,6,7) 2 - Insertion de l'lment 1 la position 1. L=(1,2,3,7,4,2,6,7) 3 - Insertion de l'lment 7 la fin de la liste. L=(1,2,3,7,4,2,6,7,7)
Les listes
b) Suppression : supprimer l'occurrence de position i d'une liste, signifie que l'lment de position i dans la liste va tre enlev de la liste. Il est galement possible de supprimer un lment x de la liste : Cette opration consiste supprimer toutes les occurrences x apparaissant dans la liste. Si x n'est pas dans la liste, la suppression est sans effet.
Les listes
EXEMPLE : L=(1,2,3,7,4,2,6,7,7) 1 - Suppression de l'occurrence de position 2. L=(1,3,7,4,2,6,7,7) 2 - Suppression de l'lment 7. L=(1,3,4,2,6) 3 - Suppression de l'lment 5. L=(1,3,4,2,6)
Les listes
c) Recherche : La recherche d'un lment x dans une liste est une opration qui retourne VRAI ou FAUX en fonction de la prsence ou non de l'lment x dans la liste. Cette opration peut galement retourner la position du premier lment d'occurrence x rencontr dans la liste, et 0 si l'lment n'existe pas dans la liste.
Les listes
d) Concatnation : On concatne deux liste L et M en formant une liste commenant par les lments de L et se poursuivant avec les lments de M. EXEMPLE : L=(5,6,7,89) M=(3,5,6,7,8,9,0,23,4) La liste rsultat de la concatnation de L et M est : (5,6,7,89,3,5,6,7,8,9,0,23,4) On peut concatner plus de deux listes.
Les listes
e) Autres oprations: L'opration first retourne le premier lment de la liste. Le type retour de first est un lment de la liste. EXEMPLE : L=(5,6,7,89) first(L)=5
L'opration last retourne la queue de la liste. Le type retour de last est une liste. EXEMPLE : L=(5,6,7,89) last(L)=(6,7,89)
Ces deux oprations provoquent une erreur si la liste est vide. Il est possible de les combiner. EXEMPLE : L=(5,6,7,89) first(last(L))=6
Les listes
Une manire d'implanter une liste en C est d'utiliser un tableau pour stocker les lments. Il est possible de maintenir un compteur du nombre d'lments de la liste dans une variable spare, et de stocker les lments dans des emplacements contigus du tableau. Ce type dimplantation nest pas pratique utiliser pour insrer ou supprimer des lments dans la liste. Il faut chaque fois dcaler tous les lments du tableau.
P(X)
Les files
Dfinition : Une file dattente est une structure de donnes telle que : Lajout dun lment se fait en fin de file dattente. La suppression dun lment se fait en dbut de file dattente. Cette structure de donnes est appele aussi FIFO : First in First out.
Les files
Oprations sur une file : Enfiler : ajouter un lment en fin de la liste. Dfiler : enlever un lment en tte de la liste. Implmenter en C une file en se basant sur une liste chane ?
92
21/11/2012
94
21/11/2012
96
21/11/2012
nouveau->precedent = NULL;
ls->dernier = nouveau; }
21/11/2012
98
21/11/2012
99
21/11/2012
100
21/11/2012
101
21/11/2012
102
21/11/2012
103
21/11/2012