TP6: use K&R indent coding style
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Thu, 30 Mar 2017 17:10:18 +0000 (19:10 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Thu, 30 Mar 2017 17:10:18 +0000 (19:10 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
TP6/arbres/arbre-n-aire/arbre_n_aire.c

index 63981b59fd024db4b7f67d555a295075a1dcf362..16fd0962755d7b8daadaf5614cb226a2f6d08880 100644 (file)
 /* nombre de caracteres max dans un mot */
 #define N 30
 
-typedef struct noeud
-{
-  char lettre;
-  struct noeud *fils;
-  struct noeud *frere;
+typedef struct noeud {
+    char lettre;
+    struct noeud *fils;
+    struct noeud *frere;
 } NOEUD;
 
 /* Recherche d'un mot dans l'arbre *****************************************/
-bool
-recherche (NOEUD * p, char *mot, int i)
+bool recherche(NOEUD * p, char *mot, int i)
 {
-  if (p == NULL)
-    return false;
-  if (mot[i] == p->lettre)
-    {
-      if (mot[i] == '\0')
-       {
-         return true;
-       }
-      else
-       {
-         return recherche (p->fils, mot, i + 1);
-       }
-    }
-  else
-    {
-      if (p->lettre > mot[i])
-       {
-         return false;
+    if (p == NULL)
+       return false;
+    if (mot[i] == p->lettre) {
+       if (mot[i] == '\0') {
+           return true;
+       } else {
+           return recherche(p->fils, mot, i + 1);
        }
-      else
-       {
-         return recherche (p->frere, mot, i);
+    } else {
+       if (p->lettre > mot[i]) {
+           return false;
+       } else {
+           return recherche(p->frere, mot, i);
        }
     }
 }
 
 /* Creation d'une fin de mot (liste chainee suivant le lien fils) **********/
-NOEUD *
-insere_fin (char *mot, int i)
+NOEUD *insere_fin(char *mot, int i)
 {
-  /* i est l'indice de la lettre courante dans le mot */
-  printf ("insere_fin %c, %i\n", mot[i], i);
-  NOEUD *p = (NOEUD *) malloc (sizeof (NOEUD));
-  if (p == NULL)
-    exit (-1);
-  p->lettre = mot[i];
-  p->fils = NULL;
-  p->frere = NULL;
-  if (mot[i])
-    p->fils = insere_fin (mot, i + 1);
-  return p;
+    /* i est l'indice de la lettre courante dans le mot */
+    printf("insere_fin %c, %i\n", mot[i], i);
+    NOEUD *p = (NOEUD *) malloc(sizeof(NOEUD));
+    if (p == NULL)
+       exit(-1);
+    p->lettre = mot[i];
+    p->fils = NULL;
+    p->frere = NULL;
+    if (mot[i])
+       p->fils = insere_fin(mot, i + 1);
+    return p;
 }
 
 /* Insertion d'un mot dans l'arbre ******************************************/
 /* (on respecte l'ordre lexicographique des freres)**************************/
-NOEUD *
-insere (NOEUD * p, char *mot, int i)
+NOEUD *insere(NOEUD * p, char *mot, int i)
 {
-  /* i est l'indice de la lettre courante dans le mot */
-  /* TODO */
-  if (p == NULL)
-    p = insere_fin (mot, i);
-  return p;
+    /* i est l'indice de la lettre courante dans le mot */
+    if (p == NULL)
+       return p = insere_fin(mot, i);
+    if (mot[i] == p->lettre) {
+
+       return insere(p->fils, mot, i + 1);
+    }
+    //return insere (p->frere, mot, i);
+    if (mot[i] > p->lettre) {
+       return insere(p->frere, mot, i);
+    }
 }
 
 /*****************************************************************************/
 /* Affichage par ordre alphabetique de tous les mots stockes dans l'arbre    */
-void
-affiche (NOEUD * p, char *mot, int i)
+void affiche(NOEUD * p, char *mot, int i)
 {
-  /* i est l'indice de la lettre courante dans le mot */
-  if (p != NULL)
-    {
-      mot[i] = p->lettre;
-      affiche (p->fils, mot, i + 1);
-      if (mot[i] == '\0')
-       {
-         printf ("%s\n", mot);
+    /* i est l'indice de la lettre courante dans le mot */
+    if (p != NULL) {
+       mot[i] = p->lettre;
+       affiche(p->fils, mot, i + 1);
+       if (mot[i] == '\0') {
+           printf("%s\n", mot);
        }
-      affiche (p->frere, mot, i);
+       affiche(p->frere, mot, i);
     }
 }
 
 /* Visualisation de l'arbre n-aire *******************************************/
-void
-affiche_arbre (NOEUD * p, int prof)
+void affiche_arbre(NOEUD * p, int prof)
 /* prof est utilise pour decaller l'affichage avec des espaces  (selon le niveau dans l'arbre) */
 {
-  int i;
-  if (p)
-    {
-      affiche_arbre (p->frere, prof);
-      for (i = 0; i < prof; i++)
-       printf (" ");
-      printf ("%c\n", p->lettre);
-      affiche_arbre (p->fils, prof + 1);
+    int i;
+    if (p) {
+       affiche_arbre(p->frere, prof);
+       for (i = 0; i < prof; i++)
+           printf(" ");
+       printf("%c\n", p->lettre);
+       affiche_arbre(p->fils, prof + 1);
     }
 }
 
 /* Suppression d'un mot de l'arbre ********************************************/
 /* Attention a ne supprimer que la fin du mot qui n'est partagee par aucun autre mot de l'arbre */
-NOEUD *
-supprime (NOEUD * p, char *mot, int i)
+NOEUD *supprime(NOEUD * p, char *mot, int i)
 /* i est l'indice de la lettre courante dans le mot */
 {
-  /* TODO */
-  return p;
+    /* TODO */
+    return p;
 }
 
 /* Chargement des mots d'un fichier (vu comme un dictionnaire) dans l'arbre **/
-NOEUD *
-charge_dico (char *nom_fichier, int *nb_mots)
+NOEUD *charge_dico(char *nom_fichier, int *nb_mots)
 {
-  NOEUD *p;
-  FILE *fp;
-  char mot[N];
-  int i;
-  p = NULL;
-  fp = fopen (nom_fichier, "rt");
-  if (fp == NULL)
-    exit (-1);
-  fscanf (fp, "%d", nb_mots);  /* sur la 1ere ligne du fichier, le nombre de mots */
-  for (i = 0; i < *nb_mots; i++)
-    {
-      fscanf (fp, "%s", mot);
-      p = insere (p, mot, 0);  /* TODO il faut finir "insere" pour que "charge_dico" fonctionne */
+    NOEUD *p;
+    FILE *fp;
+    char mot[N];
+    int i;
+    p = NULL;
+    fp = fopen(nom_fichier, "rt");
+    if (fp == NULL)
+       exit(-1);
+    fscanf(fp, "%d", nb_mots); /* sur la 1ere ligne du fichier, le nombre de mots */
+    for (i = 0; i < *nb_mots; i++) {
+       fscanf(fp, "%s", mot);
+       p = insere(p, mot, 0);
     }
-  fclose (fp);
-  return p;
+    fclose(fp);
+    return p;
 }
 
 /* Ecriture dans fp de tous les mots stockes dans l'arbre ********************/
-void
-affiche_fich (FILE * fp, NOEUD * p, char *mot, int i)
+void affiche_fich(FILE * fp, NOEUD * p, char *mot, int i)
 {
-  /* TODO */
-  /* ressemble beaucoup a "affiche", avec le parametre en plus "fp" qui est un FILE* */
+    /* TODO */
+    /* ressemble beaucoup a "affiche", avec le parametre en plus "fp" qui est un FILE* */
 }
 
 /* Sauvegarde des mots de l'arbre dans un fichier ****************************/
-void
-sauve_dico (NOEUD * p, char *nom_fichier, int nb_mots)
+void sauve_dico(NOEUD * p, char *nom_fichier, int nb_mots)
 {
-  FILE *fp;
-  char mot[N];
-  fp = fopen (nom_fichier, "wt");
-  if (fp == NULL)
-    exit (-1);
-  fprintf (fp, "%d\n", nb_mots);
-  affiche_fich (fp, p, mot, 0);        /* TODO il faut finir la fonction "affiche_fich" pour que "sauve_dico" fonctionne */
-  fclose (fp);
+    FILE *fp;
+    char mot[N];
+    fp = fopen(nom_fichier, "wt");
+    if (fp == NULL)
+       exit(-1);
+    fprintf(fp, "%d\n", nb_mots);
+    affiche_fich(fp, p, mot, 0);       /* TODO il faut finir la fonction "affiche_fich" pour que "sauve_dico" fonctionne */
+    fclose(fp);
 }
 
 /*****************************************************************************/
-int
-main (int argc, char *argv[])
+int main(int argc, char *argv[])
 {
-  char mot[N];
-  NOEUD *arbre = NULL;
-  printf ("saisir un mot : ");
-  gets (mot);
-  printf ("\ninsertion de %s\n", mot);
-  arbre = insere (arbre, mot, 0);
-  printf ("\naffichage mots:\n");
-  affiche (arbre, mot, 0);
-  printf ("\naffichage arbre :\n");
-  affiche_arbre (arbre, 0);
-  if (recherche (arbre, "toto", 0))
-    printf ("mot present\n");
-  /* TODO */
+    char mot[N];
+    int nb_mots = 0;
+    NOEUD *arbre = NULL;
+    //printf ("saisir un mot : ");
+    //gets (mot);
+    //printf ("\ninsertion de %s\n", mot);
+    //arbre = insere (arbre, mot, 0);
+    arbre = charge_dico("dictionnaire", &nb_mots);
+    printf("\naffichage mots :\n");
+    affiche(arbre, mot, 0);
+    printf("\naffichage arbre :\n");
+    affiche_arbre(arbre, 0);
+    if (recherche(arbre, "salut", 0))
+       printf("mot \"salut\" present\n");
+    /* TODO */
 }
 
 /* Exemple de trace d'execution *************************