1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
|
ligne 91 ////Traitement de la machine////
if(fichierMachine != NULL) //Ouverture du fichier reussie
{
////On cherche a connaitre la taille du tableau a reserver en memoire////
while(fgets(ligne, sizeof ligne, fichierMachine) != NULL)
{
if(ligne[0] != '$') //Ligne de commentaire
{
compteurTableauMachine++; //Incrementation du compteur
}
}
fclose(fichierMachine); //Fermeture du fichier de donnees
tableauMachine = malloc (compteurTableauMachine * sizeof *tableauMachine);
for (i = 0 ; i < compteurTableauMachine ; i++)
{
tableauMachine[i] = malloc (256 * sizeof *tableauMachine[i]);
}
////On remplit le tableau////
fichierMachine = fopen("machine.txt", "r"); //Declaration et instanciation d'un pointeur de type fichier vers la machine
i = 0; //Pour plus de clarté
while(fgets(ligne, sizeof ligne, fichierMachine) != NULL)
{ //Tant que l'on peut lire une ligne du fichier et que la variable "booleene" finDonnees est a faux
caractere = ligne[0]; //Lecture du premier caractere de la ligne
if(caractere != '$') //Ligne de commentaire
{
j = 0; //Initialisation du compteur de caracteres
while (caractere != '\n') //Verification de non fin de donnees atteinte
{
tableauMachine[i][j] = caractere; //Ajout du caractere en derniere position de la liste
j++; //Incrémentation de la position en colonne
caractere = ligne[j];
}
i++; //Incrémentation de la position en ligne
}
}
i = 0;
compteur = 0; //Reinitialisation du compteur pour le nombre de #
while((i != compteurTableauMachine+1) && (compteur < 3)) //Parcourt du tableau jusqu'aux lignes d'etat initial et etat final
{
j = 0;
while((j <256) && (tableauMachine[i][j] != NULL) && compteur < 3)
{
if(tableauMachine[i][j] == '#') //On compte le nombre de # rencontres, cela permettra de savoir si on arrive a l'etat initial et l'etat final
{
compteur++; //Incrementation du compteur
}
j++; //Incrementation du compteur colonne
}
i++; //Incrementation du compteur ligne
}
for(j=0;tableauMachine[i][j] != NULL;j++) //On instancie la variable d'etat initial
{
etatInitial[j] = tableauMachine[i][j];
}
i++;
for(j=0;tableauMachine[i][j] != NULL;j++) //On instancie la variable d'etat final
{
etatFinal[j] = tableauMachine[i][j];
}
printf("[%c%c%c]__[%c%c%c]\n", etatInitial[0], etatInitial[1], etatInitial[2], etatFinal[0], etatFinal[1], etatFinal[2]);
}
else
{
if (feof(fichierMachine)) //Fin de fichier detectee
{
puts("\nFin du fichier machine atteinte.");
}
if (ferror(fichierMachine)) //Une erreur s'est produite
{
perror("machine.txt");
}
}
fclose(fichierMachine); //Fermeture du fichier de donnees
////Fin de Traitement de la Machine
////Traitement des donnees par la machine
previewCurrent = listeDC->first->prev; //Initialisation du pointeur vers l'element precedent de l'actuel
nextCurrent = listeDC->first->next; //Initialisation du pointeur vers l'element suivant de l'actuel
strcpy(etatActuel,etatInitial); //On initialise l'état.
while(etatInitial != etatFinal)
{
i = 0; //Réinitialisation du compteur Ligne
while((i <= compteurTableauMachine) && (ligneTrouvee == 0)) //Tant que je n'ai pas trouvé la bonne transition
{
j = 0; //Réinitialisation du compteur Colonne
while(tableauMachine[i][j] != ' ') //Récupération de l'etat de la ligne
{
etatLigne[j] = tableauMachine[i][j];
j++;
}
j++;
valeur = tableauMachine[i][j]; //Valeur de test
if((strcmp(etatLigne,etatInitial) == 0) && (current->value == valeur))
{
ligneTrouvee = 1;
}
else
{
i++;
}
}
if((strcmp(etatLigne,etatInitial) == 1) || (current->value != valeur))
{
puts("Erreur, fichier donnee non valide par rapport à la machine");
}
else
{
j += 2;
current->value = tableauMachine[i][j]; //Valeur à remplacer
j += 2;
while(tableauMachine[i][j] != ' ') //Récupération de l'etat de la ligne
{
etatActuel[j] = tableauMachine[i][j];
j++;
}
j ++;
if(tableauMachine[i][j] == 'R')
{
current = current->next;
}
else
{
current = current->prev;
}
}
}
////Fin du Traitement des données par la Machine
for (i=0; i <= compteurTableauMachine; i++)
{
free(tableauMachine[i]), tableauMachine[i] = NULL;
}
free(tableauMachine), tableauMachine = NULL;
Clear(listeDC); //On vide la liste
return 0; |
Partager