Les fichiers et les chaînes de caractères

Slides:



Advertisements
Présentations similaires
Cours de C – Séance dexercices 12 Octobre Exercice 5 Idem quexercice 1 : lire une ligne au clavier Sans limitation de la longueur de la ligne (utilisez.
Advertisements

Rappels C.
Formation C débutant. Notion de compilation source.c executable Phase de compilation Fichier de texte brut, inexploitable directement par la machine Fichier.
GEF 243B Programmation informatique appliquée
1 UMLV 1. Introduction 2. Hachage ouvert 3. Hachage fermé 4. Implémentation des fonctions Méthodes de hachage.
C.
Exercice 1 1 (père) et 1 (fils) 1 (père) et 0 (fils)
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
FLSI602 Génie Informatique et Réseaux
B.Shishedjiev - Informatique II1 Travaux dirigés 5 Les structures.
B.Shishedjiev - Informatique II
Regrouper des éléments de même type et pouvoir y accéder à laide dun identificateur et dun indice. Objectif des tableaux.
Algorithmes et programmes
RECURSIVITE ARBRES BINAIRES
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
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.
TRAITEMENT DE STRUCTURES
1 Les pointeurs et quelques rappels sur certains éléments du langage C.
Les tris.
FICHIERS.
IFT-2000: Structures de données
IFT-2000: Structures de données Les graphes Dominic Genest, 2009.
/* */ /* **** btutil.c **** Contient les fonctions utilitaires du programme create_root() -- Obtient.
IFT Structures de données
Les enregistrements (struct) suite. Struct Rappel Enregistrement : Suite de données pouvant être de types différents, accessibles via une seule variable.
Structures de données IFT-2000
LES ARBRES Un arbre est une structure homogène dont chaque élément,
L’essentiel du langage C
Structures des données
Le langage C Structures de données
B.Shishedjiev - Informatique II
1 Exemples Construction et implantation de types de données abstraits.
Ch. PAUL - Piles et Files à l'aide de listes chainées
LES PILES ET FILES.
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
B.Shishedjiev - Informatique II1 Travaux dirigés 4 Les tableaux.
B.Shishedjiev - TD11 Travaux dirigés 1 Expressions et affectation Entrée-sortie.
et quelques rappels sur certains éléments du langage C
Les adresses des fonctions
1 FICHIERS. 2 Les Fichiers  Les "entrées-sorties conversationnelles" échangent des informations entre le programme et l'utilisateur.  Le terme de fichier.
Les types.
8PRO107 Éléments de programmation Les chaînes de caractères.
Argc et argv Utilisation des paramètres de la ligne de commande.
Autres éléments du langage
Ferhat nouis Cédric tanguy Eric abrial Gregory nazaire
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.
Structures de données élémentaires dans le contexte du TP #1
Arbres binaires et tables de hachage
420-B63 Programmation Web Avancée Auteur : Frédéric Thériault 1.
ETNA – 1ème année Guillaume Belmas –
TABLEAUX des POINTEURS TRAITEMENT DE STRUCTURES
Structures de contrôle
8PRO100 Éléments de programmation Les pointeurs de caractères.
Fiabilisation des lectures au clavier. Problèmes liés à scanf: rencontre de caractères invalides Sans arrêt prématuré: compte = scanf(``%d%c``;&n,&c);
Le Préprocesseur. Sujets abordés: Préprocesseur –Qu’est ce? –Qu’est ce qu’une directive? Les macros –Les définir, les redéfinir, les dé-définir –Les macros.
Conception de Programmes - IUT de Paris - 1ère année – Cours 8 – Les entrées/sorties Comment fonctionnent les opérateurs > pour les types élémentaires.
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
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.
B.Shishedjiev - Modèle relationnel
Langage de programmation
PRO-1027 Programmation Scientifique en C
Les chaînes de caractères
Exercices sur les pointeurs. lireCar/remettreCar Lorsque l’on lit caractère par caractère, on ne peut pas savoir qu’on a atteint un caractère avant de.
Conception de Programmes - IUT de Paris - 1ère année Les classes Introduction Déclaration d’une classe Utilisation d’une classe Définition des.
Informatique 2A Langage C 5ème séance. Déroulement de la séance 5 1 ère partie Étude des chaînes de caractères 2 ème partie Les structures 3.
M. BENJELLOUN : 2005 Le but final est de programmer un jeu où l'ordinateur choisira un nombre aléatoire entre 0 et 100 que vous devez deviner.
Informatique 2A Langage C 4ème séance
Transcription de la présentation:

Les fichiers et les chaînes de caractères Travaux dirigés 6 Les fichiers et les chaînes de caractères B.Shishedjiev - Informatique II

B.Shishedjiev - Informatique II Le dictionnaire Faire un programme qui lit un texte et fait un dictionnaire de tous les mots avec leurs fréquences et6 puis les trie soit en ordre alphabétique soit en ordre descendant de nombre d’occurrences. Les constantes #define MAXLIGNES 5 #define MAXMOTS 100 #define MOTLEN 25 #define NOMFICH "dictionnaire.dat" // Le nom du fichier B.Shishedjiev - Informatique II

B.Shishedjiev - Informatique II Le dictionnaire Les structures typedef char Ligne[100]; // Une ligne de texte typedef struct{ // un élément du dictionnaire char mot[MOTLEN]; // le mot int occur; // le nombre d'occurrences } Dict_elem, *Pelem; typedef struct { // Le dictionnaire int nelem; // le nombre courants d'éléments Dict_elem mots[MAXMOTS]; //les éléments Pelem pmots[MAXMOTS]; /*Pointeurs vers éléments qui sont dans l'ordre désiré */ } Dict; typedef Ligne Texte[MAXLIGNES]; // Le texte B.Shishedjiev - Informatique II

B.Shishedjiev - Informatique II Le menu void affichMenu(void){ int i; for (i=0; i<25; i++) putchar('\n'); puts("Dictionnaire"); puts("I. Initialisation"); puts("L. Lire un texte et separer les mots"); puts("A. Afficher le dictionnaire"); puts("T. Trier en ordre alphabetique"); puts("O. Trier par nombre d'occurences"); puts("S. Sauvegarder"); puts("F. Sortie"); putchar('\n'); printf("Tapez votre choix :"); } B.Shishedjiev - Informatique II

B.Shishedjiev - Informatique II Main void main (void){ Texte tex; Dict monDict; FILE *fichDict; char command; int nl, mod=0; /* Initialiser et lire le dictionnaire si le fichier existe */ initialDict(&monDict); if ((fichDict = fopen(NOMFICH,"rb")) != NULL){ lireDict(&monDict,fichDict); fclose(fichDict); } B.Shishedjiev - Informatique II

B.Shishedjiev - Informatique II do {command = toupper(getchar()); }while (!isalpha(command));// Ca ce fait pour éliminer les caractères blancs fflush(stdin); switch (toupper(command)) { case 'I': initialDict(&monDict); if ( (fichDict = fopen(NOMFICH,"wb")) != NULL) fclose(fichDict); else puts("Erreur d'entree/sortie"); break; case 'L' : nl= lire_texte(tex,MAXLIGNES); separer_mots(tex,&monDict,nl,MAXMOTS); mod=1; break; case 'A' : aff_mots(&monDict); break; case 'T': trie_mots_alf(&monDict); mod=1; break; case 'O': trie_mots_freq(&monDict); mod=1; break; case 'F': if (mod) {int ch; printf("Sauver le dicionnaire ? (Y/N):"); do {ch = toupper(getchar()); }while (!isalpha(ch)); if (ch == 'N') break; } else break; case 'S': if ((fichDict = fopen(NOMFICH,"wb")) != NULL){ saveDict(&monDict,fichDict); fclose(fichDict); puts("le dictionnaire est sauvegarde"); mod=0; } break; default : break; } //fin switch }while (toupper(command) != 'F') ; puts("FIN"); } B.Shishedjiev - Informatique II

B.Shishedjiev - Informatique II Les fonctions void initialDict(Dict*); void lireDict(Dict *, FILE *); int lire_texte(Texte, const int maxl); char *prends_mot_suivant(char *source, char*); int separer_mots(Texte, Dict*, const int nl, const int maxmot); void aff_mots(Dict *); void trie_mots_alf(Dict*); void trie_mots_freq(Dict*); void affichMenu(void); int searchDict(char *, Dict *d); void saveDict(Dict *, FILE *); B.Shishedjiev - Informatique II

Initialisation et affichage void initialDict(Dict *d){ int i; d->nelem = 0; for (i=0; i<MAXMOTS;i++) d->pmots[i]=&d->mots[i]; } void aff_mots(Dict *d){ for (i=0;i<d->nelem;i++) printf("%-25s%5d\n",d->pmots[i]->mot,d->pmots[i]->occur); puts("tapez un caractere"); getchar();fflush(stdin); B.Shishedjiev - Informatique II

B.Shishedjiev - Informatique II Lire et sauvegarder void lireDict(Dict *d, FILE *f){ int i; fread(&d->nelem,sizeof(int),1,f); for(i=0; i< d->nelem;i++) fread(d->pmots[i],sizeof(Dict_elem),1,f); } void saveDict(Dict *d, FILE *f){ fwrite(&d->nelem,sizeof(int),1,f); fwrite(d->pmots[i],sizeof(Dict_elem),1,f); int lire_texte(Texte t, const int maxl){ int i; Ligne l; for (i=0; i < maxl && gets(l) !=NULL && strlen(l)>0; i++) strcpy(t[i],l); return i; B.Shishedjiev - Informatique II

Séparer les mots et les stocker char* motsuiv(s, mot) p=mot *p='\0' !fin && *s n'est pas lettre S++ return s oui non fin *s est dans le mot *p=*s S++,p++ cl,n,temp int sep(t, d, n,max) l=0,n=0 l<nl cl=t[l] return s oui non y a-t-il des mots cl=motsuiv(cl,temp) l++ temp in dict? nouveau mot occur =1 vieux mot occur++ B.Shishedjiev - Informatique II

Séparer les mots et les stocker int searchDict(char * s, Dict *d){ int i; for (i=0; i<d->nelem && strcmp(s,d->mots[i].mot)!=0;i++); return (i<d->nelem)? i:-1; } char* prends_mot_suivant(char *source, char *mot){ char *p = mot; *p = '\0'; // sauter les caract'eres qui ne sont pas dans un mot while ( *source != '\0' && ! isalpha(*source)) source++; if ( *source == '\0') return NULL; // separer le mot while (isalpha(*source) || *source =='-') *p++ = *source++; return source; B.Shishedjiev - Informatique II

Séparer les mots et les stocker int separer_mots(Texte tex, Dict *d , const int nl, const int maxmot){ char *curligne, temp[MOTLEN]; int l, found; for (l=0; l<nl; l++) { curligne = tex[l]; while (d->nelem<maxmot && curligne !=NULL && *curligne != '\0') { if ((curligne=prends_mot_suivant( curligne,temp)) != NULL){ if (( found = searchDict(temp,d)) >=0 ) d->mots[found].occur++; else { strcpy(d->mots[d->nelem].mot,temp); d->mots[d->nelem].occur = 1; d->nelem ++ ; } return d->nelem; B.Shishedjiev - Informatique II

B.Shishedjiev - Informatique II Trier void trie_mots_alf(Dict *d){ // En ordre alphabétique // trie les mots a la boule Pelem t; int i,exch; do{ exch = 0; for (i=1;i<d->nelem;i++) { if (strcmp(d->pmots[i-1]->mot,d->pmots[i]->mot)>0){ exch =1; t =d->pmots[i-1]; d->pmots[i-1]=d->pmots[i]; d->pmots[i]=t; } }while (exch); ………….. if (d->pmots[i-1]->occur < d->pmots[i]->occur){ B.Shishedjiev - Informatique II

B.Shishedjiev - Informatique II Trier void trie_mots(Dict *d,int mode){ // trie les mots a la boule Pelem t; int i,exch,r; do{ exch = 0; for (i=1;i<d->nelem;i++) { r = mode? strcmp(d->pmots[i-1]->mot,d->pmots[i]->mot) : d->pmots[i]->occur - d->pmots[i-1]->occur ; if (r>0){ exch =1; t =d->pmots[i-1]; d->pmots[i-1]=d->pmots[i]; d->pmots[i]=t; } }while (exch); ………………………………………… case 'T': trie_mots(&monDict,1); mod=1; break; case 'O': trie_mots(&monDict,0); mod=1; break; ----------------------------------------------- B.Shishedjiev - Informatique II