diff --git a/.DS_Store b/.DS_Store index 22434fd..ce61a28 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/TP1/a.out b/TP1/a.out new file mode 100755 index 0000000..3f0620e Binary files /dev/null and b/TP1/a.out differ diff --git a/TP1/analyse_lexicale.c b/TP1/analyse_lexicale.c new file mode 100644 index 0000000..85b1bf0 --- /dev/null +++ b/TP1/analyse_lexicale.c @@ -0,0 +1,15 @@ +#include "analyse_lexicale.h" +#include "automate.h" +#include + +int main() { + FILE *pFile; + + pFile = fopen("fichier.html", "rt"); // ouvre le fichier html + if(pFile != NULL){ + getNextChar(pFile); + fclose (pFile); + } + else printf("Erreur d'ouverture du fichier\n"); + return 0; +} diff --git a/TP1/analyse_lexicale.h b/TP1/analyse_lexicale.h new file mode 100644 index 0000000..13b7e36 --- /dev/null +++ b/TP1/analyse_lexicale.h @@ -0,0 +1,8 @@ +#ifndef TP1_ANALYSE_LEXICALE_H +#define TP1_ANALYSE_LEXICALE_H + +#endif //TP1_ANALYSE_LEXICALE_H + +char* lectureFile(); + + diff --git a/TP1/analyse_lexicale.h.gch b/TP1/analyse_lexicale.h.gch new file mode 100644 index 0000000..2b727ad Binary files /dev/null and b/TP1/analyse_lexicale.h.gch differ diff --git a/TP1/automate.c b/TP1/automate.c new file mode 100644 index 0000000..e31efc4 --- /dev/null +++ b/TP1/automate.c @@ -0,0 +1,61 @@ +#include "automate.h" + +enum Etats curEtat = EtatDeb; // initialisation de curEtat +char string[20] = ""; // initialisation de string contenant la balise +int pos = 0; // initialisation de pos +bool tagFermant = false; // initialisation de tagFermant +struct Pile *pile=NULL; // initialisation de la pile +int error = 0; // initialisation de error + +void changeEtat(char c ){ + if(pile==NULL){ + pile = pileInit(); + } // Création de la pile si elle est NULL + switch (curEtat) { + case EtatDeb : + if (c=='<'){ + curEtat = EtatBalise; + } // si une balise ouvrante est détectée, on passe à l'état suivant + break; + case EtatBalise : + if (c=='/'){ + tagFermant = true; + } // si un / est détecté, on passe le tagFermant à true : signifie qu'on a trouvé le tag fermant du tag dans lequel on se trouve + else { + if (c == ' ' || c == '>') { + if (tagFermant) { + char *stringFerm = pilePop(pile); // si on ne détecte pas de / mais un espace ou une balise fermante, et si le tagFermant est à true, on définit un nouveau char stringFerm qui prend la dernière valeur mise dans la pile + if (strcmp(stringFerm, string) != 0) { + printf("Erreur mauvaise parenthèse fermante à : %s\n", stringFerm); + error++; + } // si stringFerm et string ne sont pas les mêmes, on détecte une erreur car on ne retrouve pas la bonne parenthèse fermante + tagFermant = false; + } else { + pilePush(pile, string); + } // sinon, on stocke string dans la pile + memset(string, 0, 20); //vider le tableau + pos = 0; // remettre à jour pos + curEtat = EtatDeb; // se remettre à l'état initial + } else { + string[pos] = c; + pos++; + } // si on a autre chose qu'un espace ou une balise fermante, on ajoute le char dans string à la position pos et on incrémente pos + } + break; + } +} + +void getNextChar(FILE *file){ + char c; + for(c=fgetc(file);!feof(file);c=fgetc(file)){ + changeEtat(c); + } // tant que le fichier n'est pas vide, on attribue à c un caractère du fichier + // puis on applique la fonction changeEtat à c + printf("Nombre d'erreur dans le fichier : %d\n",error); +} + + + + + + diff --git a/TP1/automate.h b/TP1/automate.h new file mode 100644 index 0000000..09ccad7 --- /dev/null +++ b/TP1/automate.h @@ -0,0 +1,19 @@ +#ifndef TP1_AUTOMATE_H +#define TP1_AUTOMATE_H + +#endif //TP1_AUTOMATE_H + +#include +#include +#include +#include "pile.h" + +enum Etats { + EtatDeb, + EtatBalise +}; // énumération des différents états possibles d'avoir dans la fonction changeEtat + +void changeEtat( char c ); +void getNextChar(FILE *file); + + diff --git a/TP1/automate.h.gch b/TP1/automate.h.gch new file mode 100644 index 0000000..d799249 Binary files /dev/null and b/TP1/automate.h.gch differ diff --git a/TP1/fichier.html b/TP1/fichier.html new file mode 100644 index 0000000..8da2b48 --- /dev/null +++ b/TP1/fichier.html @@ -0,0 +1,65 @@ + + + + + + + Polytech'Nantes, école d'ingénieurs de l'université de Nantes + + + +
+ +
+ +
Accédez au site
+ + + + + + + +
+ Actualités +
+ + + + + +
+ + + + + + + + + + +
   CDEFI   
+
+ + \ No newline at end of file diff --git a/TP1/pile.c b/TP1/pile.c new file mode 100644 index 0000000..27c8b27 --- /dev/null +++ b/TP1/pile.c @@ -0,0 +1,35 @@ +#include "pile.h" + +struct Pile* pileInit(){ + struct Pile *pile = malloc(sizeof(*pile)); + pile->pos = -1; + return pile; +} // Initialisation de la pile + + +char* pilePop(struct Pile *pile){ + if(pile->pos == -1){ + printf("pilePop : ERROR PILE VIDE"); + return NULL; + } // si pos = -1, cela signifie que la pile est vide, donc on ne peut pas retirer d'éléments de la pile + pile->pos--; // on décrémente pos car on va retirer le dernier élément, donc la taille de la pile va diminuer + return pile->stack[pile->pos+1]; // on retire le dernier élément +} + +void pilePush(struct Pile *pile, char *string){ + if(pile->pos == TAILLE_PILLE){ + printf("pilePush : ERROR PILE PLEINE"); + } // si la taille de la pile est égale à la valeur dans pos, la pile est pleine, on ne peut donc pas ajouter d'éléments dedans + else { + pile->pos++; + strcpy(pile->stack[pile->pos], string); + } // sinon, on incrémente pos et on ajoute l'élément demandé grâce à la fonction strcpy +} + +char* pileTop(struct Pile *pile){ + return pile->stack[pile->pos]; +} // renvoie la dernière valeur de la pile + +int pileSize(struct Pile *pile){ + return pile->pos; +} // retourne la taille actuelle de la pile diff --git a/TP1/pile.h b/TP1/pile.h new file mode 100644 index 0000000..5e1faaa --- /dev/null +++ b/TP1/pile.h @@ -0,0 +1,23 @@ +#ifndef TP1_PILE_H +#define TP1_PILE_H + +#endif //TP1_PILE_H + +#include +#include +#include + +#define TAILLE_PILLE 1024 +#define TAILLE_CHAINE 1024 + + +struct Pile{ + char stack[TAILLE_PILLE][TAILLE_CHAINE]; + int pos; +}; + +struct Pile* pileInit(); +char* pilePop(struct Pile *pile); +void pilePush(struct Pile *pile, char *string); +char* pileTop(struct Pile *pile); +int pileSize(struct Pile *pile); \ No newline at end of file diff --git a/TP1/pile.h.gch b/TP1/pile.h.gch new file mode 100644 index 0000000..40586e6 Binary files /dev/null and b/TP1/pile.h.gch differ diff --git a/TP2/.DS_Store b/TP2/.DS_Store new file mode 100644 index 0000000..ae4afa1 Binary files /dev/null and b/TP2/.DS_Store differ diff --git a/TP2/tableau/main b/TP2/tableau/main new file mode 100755 index 0000000..96ba549 Binary files /dev/null and b/TP2/tableau/main differ diff --git a/TP2/tableau/main.c b/TP2/tableau/main.c new file mode 100644 index 0000000..0d11104 --- /dev/null +++ b/TP2/tableau/main.c @@ -0,0 +1,111 @@ +#include +#include +#include + +int *InitTab(unsigned int nbVal, int min, int max); +bool Verif(int *t, unsigned int nbVal); +void MonTri(int *t, unsigned int nbVal); +void quickSort(int *t, int left, int right); + +// if true print "true" +// if false print "false" +void printBool(bool b) +{ + if (b) + { + printf("\ntrue\n"); + } + else + { + printf("\nfalse\n"); + } +} + +int main() +{ + int *t = InitTab(10, 0, 100); + printBool(Verif(t, 10)); + // MonTri(t, 10); + quickSort(t, 0, 9); + printBool(Verif(t, 10)); + return 0; +} + +int *InitTab(unsigned int nbVal, int min, int max) +{ + int *t = (int *)malloc(nbVal * sizeof(int)); + for (int i = 0; i < nbVal; i++) + { + t[i] = rand() % (max - min + 1) + min; + } + return t; +} + +bool Verif(int *t, unsigned int nbVal) +{ + bool flg = true; + if (nbVal >= 2) + { + for (int i = 0; i < nbVal - 1 && flg; i++) + { + if (t[i] > t[i + 1]) + { + flg = false; + } + } + } + + for (int i = 0; i < nbVal; i++) + { + printf("%d ", t[i]); + } + return flg; +} + +void MonTri(int *t, unsigned int nbVal) +{ + int i, j, tmp; + for (i = 0; i < nbVal; i++) + { + for (j = i + 1; j < nbVal; j++) + { + if (t[i] > t[j]) + { + tmp = t[i]; + t[i] = t[j]; + t[j] = tmp; + } + } + } +} + +// quick sort +void quickSort(int *t, int left, int right) +{ + int i = left, j = right; + int tmp; + int pivot = t[(left + right) / 2]; + + /* partition */ + while (i <= j) + { + while (t[i] < pivot) + i++; + while (t[j] > pivot) + j--; + if (i <= j) + { + tmp = t[i]; + t[i] = t[j]; + t[j] = tmp; + i++; + j--; + } + }; + + /* recursion */ + if (left < j) + quickSort(t, left, j); + if (i < right) + quickSort(t, i, right); +} \ No newline at end of file