/*************************************** * * * Copyright (c) 1998 Jean-Eric Pin * * All rights reserved. * * * * TAB = 2 spaces * * * ***************************************/ /*------------------------------------------------------------------- * SortieDclasses.c Jean-Eric Pin 07/12/96 *------------------------------------------------------------------- */ #include <stdlib.h> #include <stdio.h> #include <string.h> #include "Globales.h" #include "Main.h" #include "Reduction.h" #include "Sortie.h" #include "SortieDclasses.h" #include "Utilitaires.h" extern unsigned short NbEtats, NbLettres, NbChiffresNbElements, LongueurMax, TypeCalcul, TypeSemigroupe, PossedeUnZero, PossedeUnNeutre; extern numero NbElements, NbRclasses, NbLclasses, NbDclasses, nZero, DernierMot; extern info *Table; extern info2 *Table2; extern char **Messages; /**************************************************** * * SortieNbDclasses. OK * ****************************************************/ void SortieNbDclasses(void) { printf("%s %1lu\n", (NbDclasses > 1) ? Messages[M_Dclasses] : Messages[M_Dclass], NbDclasses); /* "Calcul des D-classes acheve : %1lu D-classes\n" */ printf("%s %1lu\n", (NbRclasses > 1) ? Messages[M_Rclasses] : Messages[M_Rclass], NbRclasses); /* "%1lu R-classes\n" */ printf("%s %1lu\n", (NbLclasses > 1) ? Messages[M_Lclasses] : Messages[M_Lclass], NbLclasses); /* "%1lu L-classes\n" */ printf("\n"); } /**************************************************** * * SortieDclasses. OK * ****************************************************/ void SortieDclasses(void) { numero n = IDENTITE; unsigned short Longueur = 0; short i, NbChiffresRLclasses; NbChiffresRLclasses = Max(NombreDeChiffres(NbRclasses), NombreDeChiffres(NbLclasses)); printf(" %*c %*c |%*cD |%*cR |%*cL \n", NbChiffresNbElements, ' ', LongueurMax, ' ', NbChiffresRLclasses, ' ', NbChiffresRLclasses, ' ', NbChiffresRLclasses, ' '); for (i = 0; i < LongueurMax + NbChiffresNbElements + 3 * NbChiffresRLclasses + 15; i++) printf("-"); printf("\n"); if (PossedeUnNeutre) { printf("*%*c1 %*c1 | %*lu | %*lu | %*lu\n", NbChiffresNbElements, ' ', LongueurMax, ' ', NbChiffresRLclasses, Table2[IDENTITE].Dclasse, NbChiffresRLclasses, Table2[IDENTITE].Rclasse, NbChiffresRLclasses, Table2[IDENTITE].Lclasse); for (n = IDENTITE; n != DernierMot; ) { n = Table[n].Suivant; Longueur = Table[n].Longueur; if (Table[n].Statut & IDEMPOTENT) printf("*"); else if (Table[n].Statut & DANS_UN_GROUPE) printf("G"); else if (Table[n].Statut & REGULIER) printf("R"); else printf(" "); printf(" %*ld ", NbChiffresNbElements, n); SortieMotFormate(n, Longueur); printf(" | %*lu | %*lu | %*lu\n", NbChiffresRLclasses, Table2[n].Dclasse, NbChiffresRLclasses, Table2[n].Rclasse, NbChiffresRLclasses, Table2[n].Lclasse); } } else for (n = IDENTITE; n != DernierMot; ) { n = Table[n].Suivant; Longueur = Table[n].Longueur; if (Table[n].Statut & IDEMPOTENT) printf("*"); else if (Table[n].Statut & DANS_UN_GROUPE) printf("G"); else if (Table[n].Statut & REGULIER) printf("R"); else printf(" "); printf(" %*ld ", NbChiffresNbElements, n - 1); SortieMotFormate(n, Longueur); printf(" | %*lu | %*lu | %*lu\n", NbChiffresRLclasses, Table2[n].Dclasse, NbChiffresRLclasses, Table2[n].Rclasse, NbChiffresRLclasses, Table2[n].Lclasse); } printf("\n"); } /************************/ void SortieRang(void) { unsigned short k = NbEtats; unsigned short Longueur = 0; numero n = IDENTITE; for (n = IDENTITE; n != DernierMot; ) { n = Table[n].Suivant; if (Table2[n].Dclasse == k) { Longueur = Table[n].Longueur; printf("Mot de rang %d de longueur %d : ", k, Longueur); SortieMotFormate(n, Longueur); k--; printf("\n"); } } }