/*************************************** * * * Copyright (c) 1998 Jean-Eric Pin * * All rights reserved. * * * * TAB = 2 spaces * * * ***************************************/ /*------------------------------------------------------------------- * SortieLaTeXDclasses.c Jean-Eric Pin 18/08/2006 *------------------------------------------------------------------- */ #include <stdlib.h> #include <stdio.h> #include <string.h> #include "Globales.h" #include "Main.h" #include "Initialisation.h" #include "Memoire.h" #include "Reduction.h" #include "Sortie.h" #include "DclassesIteratif.h" #include "Blocs.h" #include "TriParTas.h" #include "SortieLaTeX.h" #include "SortieDclasses.h" #include "SortieLaTeXDclasses.h" #include "Utilitaires.h" extern unsigned short NbEtats, NbLettres, NbChiffresNbElements, LongueurMax, TypeCalcul, TypeSemigroupe, PossedeUnZero, PossedeUnNeutre; extern unsigned long NbElements, NbRclasses, NbLclasses, NbDclasses, NbHclasses, nZero, DernierMot, nTas, TailleTas; extern info *Table; extern info2 *Table2; extern unsigned long *B, *Tas; extern char **Messages; extern FILE *fichierLaTeX; /* Voir Main.c */ extern element *TableDesValeurs; /**************************************************** * * SortieLaTeXNbDclasses. * ****************************************************/ void SortieLaTeXNbDclasses(FILE *fichier) { fprintf(fichier, "%s %1lu\n", (NbDclasses > 1) ? Messages[M_Dclasses] : Messages[M_Dclass], NbDclasses); /* "Calcul des D-classes acheve : %1lu D-classes\n" */ fprintf(fichier, "%s %1lu\n", (NbRclasses > 1) ? Messages[M_Rclasses] : Messages[M_Rclass], NbRclasses); /* "%1lu R-classes\n" */ fprintf(fichier, "%s %1lu\n", (NbLclasses > 1) ? Messages[M_Lclasses] : Messages[M_Lclass], NbLclasses); /* "%1lu L-classes\n" */ fprintf(fichier, "\n"); } /**************************************************** * * SortieLaTeXDclasses. * ****************************************************/ void SortieLaTeXDclasses(FILE *fichier) { unsigned long i, j, k, n, d, r, l, h, nd, nr, nl, nh; unsigned long *NombreLclasses; /* Tableau donnant le nombre de L-classes de chaque R-classe */ unsigned long *NbElementsParHclasse; fprintf(fichier, "\\noindent $\\cal D$-classes:\n"); /* Calcul du nombre de L-classes par R-classe */ NombreLclasses = AlloueMemoireTableau(NbRclasses + 1); NbElementsParHclasse = AlloueMemoireTableau(NbHclasses + 1); nTas = 0; nl = 0; /* for (r = 0; r <= NbRclasses; r++) NombreLclasses[r] = 0; for (h = 0; h <= NbHclasses; h++) NbElementsParHclasse[h] = 0; */ for (i = 0; i < TailleTas; i++) { n = Tas[i]; r = Table2[n].Rclasse; l = Table2[n].Lclasse; h = Table2[n].Hclasse; NbElementsParHclasse[h]++; if (l != nl) /* Nouvelle L-classe */ { NombreLclasses[r]++; nl = l; } } /* for (h = 0; h <= NbHclasses; h++) printf("h = %d, NbElementsParHclasse[h] = %d\n", h, NbElementsParHclasse[h]); */ n = Tas[0]; nd = Table2[n].Dclasse; nr = Table2[n].Rclasse; nh = Table2[n].Hclasse; r = Table2[n].Rclasse; h = Table2[n].Hclasse; fprintf(fichier, "\\begin{center}\n"); fprintf(fichier, "\\setlength{\\extrarowheight}{6pt}\n"); fprintf(fichier, "\\begin{tabular}{|"); for (j = 0; j < NombreLclasses[r]; j++) { for (k = 0; k < NbElementsParHclasse[h]; k++) fprintf(fichier, "l@{\\extracolsep{1pt}}"); fprintf(fichier, "|"); } fprintf(fichier, "}\n\\hline\n"); for (i = 0; i < TailleTas; i++) { n = Tas[i]; d = Table2[n].Dclasse; r = Table2[n].Rclasse; h = Table2[n].Hclasse; /* printf("n = %d, d = %d, r = %d, h = %d \n", n, d, r, h); */ /* if (h != nh) { fprintf(fichier, "&"); nh = h; } */ if (r != nr) /* Nouvelle R-classe */ { fseek(fichier, -1, SEEK_CUR); fprintf(fichier, "\\\\\n\\hline\n"); nr = r; } if (d != nd) /* Nouvelle D-classe */ { fprintf(fichier, "\\end{tabular}\\\\\n$\\tvi$\\\\\n"); fprintf(fichier, "\\begin{tabular}{|"); for (j = 0; j < NombreLclasses[r]; j++) { for (k = 0; k < NbElementsParHclasse[h]; k++) fprintf(fichier, "l@{\\extracolsep{1pt}}"); fprintf(fichier, "|"); } fprintf(fichier, "}\n\\hline\n"); nd = d; } if (Table[n].Statut & IDEMPOTENT) /* Idempotent */ fprintf(fichier, "\\withstar{"); else fprintf(fichier, "\\nostar{"); SortieLaTeXMot(n, fichier); fprintf(fichier, "} &"); } fseek(fichier, -1, SEEK_CUR); fprintf(fichier, "\\\\\n\\hline\n"); fprintf(fichier, "\\end{tabular}\n\\end{center}\n"); free(NombreLclasses); free(NbElementsParHclasse); } /**************************************************** * * SortieLaTeXRang. * ****************************************************/ void SortieLaTeXRang(FILE *fichier) { unsigned short k = NbEtats; unsigned short Longueur = 0; unsigned long n = IDENTITE; for (n = IDENTITE; n != DernierMot; ) { n = Table[n].Suivant; if (Table2[n].Dclasse == k) { Longueur = Table[n].Longueur; fprintf(fichier, "Mot de rang %d de longueur %d : ", k, Longueur); SortieMotFormate(n, Longueur); k--; fprintf(fichier, "\n"); } } }