IFT Structures de données

Slides:



Advertisements
Présentations similaires
Premier programme en C :
Advertisements

Rappels C.
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
Gestion de FICHIERS.
Suite à de nombreuses remarques concernant le projet de structures de données 'Gestion d'un Aéroport' , voici un polycopié de cours concernant la gestion.
FLSI602 Génie Informatique et Réseaux
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Structures de données linéaires
Récursivité.
Mémoire périphérique Stockage primaire: Mémoire principale (RAM)
Section XI Traitement de fichiers
RECURSIVITE ARBRES BINAIRES
Programme de baccalauréat en informatique Algorithmique et programmation IFT-1001 Thierry EUDE Hatem Mahbouli Laboratoire #12 Département dinformatique.
PROGRAMMATION SCIENTIFIQUE EN C PRO Généralités u Présentation du plan de cours –Disponibilité –Références u Environnement de travail –Langage C.
Les fichiers et les chaînes de caractères
IFT-2000: Structures de Données Listes chaînées Dominic Genest, 2009.
Les tris.
FICHIERS.
Structures de données IFT-2000
Les fichiers binaires en C++
Les fichiers indexés (Les B-arbres)
LA STRUCTURE D'ARBRE-B Institut National des Sciences Appliquées – Rouen Département Architecture des Systèmes d’Information.
Abder Alikacem Semaine 13 La récursivité
Structures de données IFT-2000 Abder Alikacem Standard Template library Édition Septembre 2009 Département dinformatique et de génie logiciel.
Structures de données IFT-10541
Structures de données IFT-2000
Structures de données IFT-10541
/* */ /* **** btutil.c **** Contient les fonctions utilitaires du programme create_root() -- Obtient.
Operations de Base en C++ sur les Fichiers
IFT 6800 Atelier en Technologies d’information
Les Fichiers.
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 6. Gestion des erreurs et des exceptions : Fonctionnement.
1 Le fichier séquentiel Suite finie déléments dun même type Exemples : – fichier des livres dune bibliothèque – enregistrements sur un magnétophone – ensemble.
Structures de données IFT-2000
Structures de données IFT-10541
/* */ /*Mise en garde….. Notez bien: dans les exemples qui suivent, la clé d ’indexation est un.
Structures de données IFT-2000 Abder Alikacem La récursivité Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000
Structures de données IFT Abder Alikacem Linéarisation des matrices Département dinformatique et de génie logiciel Édition septembre 2009.
Structures de données IFT-2000 Abder Alikacem Semaine 12 (2 ième partie) Les B-arbres Département d’informatique et de génie logiciel Édition septembre.
Structures de données IFT Abder Alikacem Semaine 10 Les arbres SPLAY Département dinformatique et de génie logiciel Édition septembre
Structures de données IFT-2000 Abder Alikacem Retour sur les listes ordonnées Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000 Abder Alikacem Semaine 11, 1 ère partie Les B-arbres Département dinformatique et de génie logiciel Édition septembre 2009.
Structures de données IFT-2000 Abder Alikacem La récursivité Département d’informatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000
Les fichiers texte en C++
Structures de données IFT Abder Alikacem Semaine 2 Tests sur les pointeurs Département d’informatique et de génie logiciel Édition Janvier 2009.
L’essentiel du langage C
Exemple de gestion d'un buffer clavier en liste circulaire
Le langage C Structures de données
Les pointeurs L'opérateur &.
Mémoire périphérique Stockage primaire: Mémoire principale (RAM)
1 FICHIERS. 2 Les Fichiers  Les "entrées-sorties conversationnelles" échangent des informations entre le programme et l'utilisateur.  Le terme de fichier.
8PRO100 Éléments de programmation Comment répéter plusieurs fois une séquence d’instructions.
Un survol du language C.
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Arbres binaires et tables de hachage
 Syntaxe du langage PHP
420-B63 Programmation Web Avancée Auteur : Frédéric Thériault 1.
Les variables fichiers. Le type fichier On manipule les fichiers par l’intermédiaire de structures FILE décrites dans stdio.h FILE *monFichier; –Nom physique.
 Formulaires HTML : traiter les entrées utilisateur
6ième Classe (Mercredi, 17 novembre) CSI2572
B.Shishedjiev - Modèle relationnel
1 UMLV  FICHIERS Mémoire de masse découpée en blocs Fichier :liste chaînée de blocs, ou arbre de blocs (répertoires - fichiers)‏ Bloc d’éléments Bloc.
8PRO107 Éléments de programmation Les tableaux. Étude de cas 1 Description du problème : Lire une liste d’entiers et l’afficher d’abord dans le même ordre.
PRO-1027 Programmation Scientifique en C
1 PHP 5 Notions fondamentales (niveau 1 cours #3) Formation continue – Cégep de Sainte-Foy François G Couillard.
Structures de données IFT-2000 Abder Alikacem Semaine 10 Les algorithmes de recherche Les structures arborescentes Département d’informatique et de génie.
. Le B-Arbre.
Informatique 2A Langage C 4ème séance
Transcription de la présentation:

IFT-10541 Structures de données Abder Alikacem Département d’informatique et de génie logiciel

Les fichiers binaires • Principe - un fichier est une séquence d'octets non interprétés • Interprétation des données binaires - à la charge du programmeur - une séquence de n octets peut s'interpréter comme: un entier, un tableau, un enregistrement, ... Les outils Déclaration d’un pointeur de fichier Ouverture et fermeture Les différents modes d’ouverture Lecture et écriture Principe du numéro d’ordre relatif (rrn) Accès direct..

Accès direct avec fseek() typedef struct { int age; char nom[10]; } Personne; Personne p; FILE*f; … • Ecriture dans le fichier f=fopen(nomFich, "w+b") fwrite (&p, sizeof(Personne), 1, f); • Lecture du fichier fread (&p, sizeof(Personne), 1, f); Accès direct pour lire ou écrire: fseek (f, rrn*sizeof(Personne), SEEK_SET) déplacement par rapport à origine SEEK_SET début de f SEEK_CUR position courante SEEK_END fin de f

Positionnement dans un fichier La fonction  int rewind(FILE *flot); permet de se positionner au début du fichier. Elle est équivalente à fseek(flot, 0, SEEK_SET); long ftell(FILE *flot); retourne la position courante dans le fichier (en nombre d'octets depuis l'origine). Suggestion de lecture avec des exemples: http://w3.ift.ulaval.ca/~abali/ift-17582/Semaine13/ManipulationFichiersBinaires.html

Organisations et modes d’accès des fichiers  Mode d’organisation Séquentiel Relatif ou direct Séquentiel indexé Mode d’accès séquentiel Mode d’accès direct Hashing Mode d’accès indexé

Structure typique d’un arbre-B typedef struct { short keycount; /* Le compteur de clefs. Indique quand le noeud est plein. */ struct uneCle key [MAXKEYS]; /* Le tableau des clef. */ short CHILD[MAXKEYS+1]; /* Le tableau qui contiendra les fils pointés */ } BTPAGE;

/* ouverture du fichier index*/ if btOpen() root = getRoot(); Ajout dans un arbre-B int main() { …… /* ouverture du fichier index*/ if btOpen() root = getRoot(); else { btfd = fopen("btree.dat", "wb+"); key = getClef(); /*première clé*/ root = createRoot(key, NIL, NIL); } key = getClef(); /* une clé à insérer*/ do { promoted = insert(root, key, &promoRrn, &promoKey); if (promoted) root = createRoot(promoKey, root, promoRrn); key = getClef(); } while( /* il y a une clé*/ );

Ajout dans un arbre-B /* **** insert.c **** Contient la fonction insert() qui insère une clef dans un arbre-B. S'appelle de manière récursive tant que le bas de l'arbre n'est pas atteint. Alors, insert() insère une clef dans une feuille de l ’arbre. Si le noeud est plein, - appelle split() pour scinder le noeud - promotion de la clef du milieu et le rrn du nouveau nœud et essaie d’insérer la clé promue lors de ses remontées d’appel */ /* insert() Arguments: rrn: Le rrn de la page dans laquelle on fait l'insertion *promoRchild: Le fils promu vers le prochain niveau key: La clef à être insérée *promoKey: La clef promue vers le prochain niveau

insert (short rrn, clef key, short *promoRchild, clef *promoKey) { …. if (rrn == NIL) { *promoKey = key; *promoRchild = NIL; return (VRAI); } btread(rrn, &page); found = searchNode(key, page, &pos); if (found) { printf("Erreur: clé dupliquée); return (FAUX); promoted = insert(page.child[pos], key, &pBrrn, &pBkey); if (!promoted) return (FAUX); if (page.keycount < MAXKEYS) { insInPage(pBkey, pBrrn, &page); btWrite(rrn, page); else { split(pBkey, pBrrn, &page, promoKey, promoRchild, &newPage); btwrite(rrn, page); btwrite(*promoRchild, newPage);

Recherche dans un arbre-B RECHERCHE (RRN, CL, TROUV_RRN, TROUV_POS) si RRN == NIL alors /* condition d'arrêt de la récursion */ retourner NON TROUVE sinon lire page RRN dans PAGE regarder à travers la PAGE pour trouver CL mettre POS égale à la position où KEY apparaît ou devrait apparaître. si CL est trouvé alors /* RRN contient la clef */ TROUV_RRN = RRN TROUV_POS = POS retourner TROUVE sinon /* le FILS suivant fait référence à un niveau plus bas*/ return (RECHERCHE(PAGE.FILS[POS], CL, TROUV_RRN, TROUV_POS) finsi

Bool searchBTree(int rrn, uneCle key, int *trouvRRN, short *trouvPos) { short pos; Bool found; BTPAGE page; if (rrn == NIL) return FAUX; } else btread(rrn,&page); /*lecture d'un noeud (une page) dans le fichier B-Arbre*/ found = searchNode(key, page, &pos); /*recherche dans la page lue */ if (found) *trouvRRN = page.key[pos].RRN_FichPrin; return true; return(searchBTree(page.child[pos],key,trouvRRN,trouvPos)); /* RRN_FichPrin est le numéro du bloc dans le fichier de données (FichPrin) où se trouve toutes les données de l'enregistrement trouvé. Chaque clé est accompagnée par l'adresse où se trouve la donnée correspondante dans un autre fichier que le fichier index B-Arbre.*/

Visite d’un arbre-B visite symetrique du B-arbre pour afficher les clés triées rrn est l'adresse de la page racine du B-arbre cette fonction retourne un flag pour contrôler son exécution BTPAGE est la structure typique du B-arbre: typedef struct { short keycount; struct uneCle key [MAXKEYS]; short CHILD[MAXKEYS+1]; } BTPAGE;

int visiteSymetriqueB_Arbre(short rrn) { BTPAGE page; short pos; if (rrn == NIL) return (-1); //arbre vide } btRead(rrn, &page); for(pos = 0; pos < page.keycount; pos++) /*appel recursif pour chaque sous-arbres*/ visiteSymetriqueB_Arbre(page.child[pos]); printf(" - %s ", page.key[pos].nom); /*dernier appel récursif pour le sous-arbrequi se trouve à droite de la dernière cle*/ return 0;