From 6ccd2ebf276198eb5f868cefa534bf22e8695466 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?H=C3=A9l=C3=A8ne=20TRAN?= <helene.tran@ensiie.fr>
Date: Wed, 27 Dec 2017 14:08:59 +0100
Subject: [PATCH] =?UTF-8?q?Probl=C3=A8me=20de=20SIZE=20r=C3=A9gl=C3=A9=20+?=
 =?UTF-8?q?=20rajout=20de=20quelques=20r=C3=A8gles=20RS?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Labgen/a.out    | Bin 13464 -> 13656 bytes
 Labgen/labgen.c | 159 ++++++++++++++++++++++++++++++++++++++----------
 Labgen/labgen.h |  12 ++--
 3 files changed, 134 insertions(+), 37 deletions(-)

diff --git a/Labgen/a.out b/Labgen/a.out
index 9afc3faa27b9fecef4426a5efd8435c6cd41ce9b..26c1cd3880170181255f8f5deff8e44319d3e462 100755
GIT binary patch
delta 3488
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

delta 2453
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

diff --git a/Labgen/labgen.c b/Labgen/labgen.c
index 1f520ba..62d4a14 100644
--- a/Labgen/labgen.c
+++ b/Labgen/labgen.c
@@ -1,37 +1,42 @@
 #include "labgen.h"
-point size; /*Attention c'est la taille réelle de la matrice*/
+Point size; /*Attention c'est la taille de l'énoncé. */
 /* char *** matrice = NULL ; */
 int in,out;
 variables listevars;
 
 
-/* Crée un nouveau point de coordonnées (x,y) */
-point new_point(int x, int y)
+/* Crée un nouveau point de coordonnées (c,l)
+ * --> Attention : l'ordre n'est pas logique (colonne, ligne)
+ */
+Point new_point(int c, int l)
 {
-  point monpoint;
-  monpoint.x = x;
-  monpoint.y = y;
+  Point monpoint;
+  monpoint.c = c;
+  monpoint.l = l;
   return monpoint;
 }
 
 
 /* Crée une matrice de taille (s1, s2)
+ * --> Attention : l'ordre n'est pas logique (colonne, ligne)
+ * s1 est le nombre de colonnes
+ * s2 est le nombre de lignes
+ * Implémentation de la matrice en mode naturel <-------
  * /!\ Attention : toujours créer la matrice avant d'utiliser
  * les autres fonctions */
 char*** create_matrice(int s1, int s2)
 {
   int i,j;
-  char*** matrice = malloc((s1+1)*sizeof(char **));
+  char*** matrice = malloc((s2+1)*sizeof(char **));
 
-  for (i= 0; i<s1+1; i++){
-      matrice[i] = malloc((s2+1) * sizeof(char *));
-      for (j=0; j<s2+1; j++) {
+  for (i= 0; i<=s2; i++){
+      matrice[i] = malloc((s1+1) * sizeof(char *));
+      for (j=0; j<=s1; j++) {
         matrice[i][j] = malloc(sizeof(char));
         strcpy(matrice[i][j],"");
       }
   }
-  size = new_point(s1+1,s2+1);
-      /*Attention c'est la taille réelle de la matrice*/
+  size = new_point(s1,s2);
   in = 0;
   out = 0;
   return matrice;
@@ -39,40 +44,40 @@ char*** create_matrice(int s1, int s2)
 
 
 /* Renvoie la valeur de la matrice de coordonnées p */
-char* lecture(point p, char*** matrice)
+char* lecture(Point p, char*** matrice)
 {
   if (matrice == NULL){
     printf("Matrice non initialisée.\n");
   }
-  else if (p.x >= 0 && p.y >= 0 && p.x < size.x && p.y < size.y){
-    return matrice[p.x][p.y];
+  else if (p.c >= 0 && p.l >= 0 && p.c <= size.c && p.l <= size.l){
+    return matrice[p.l][p.c];
   }
   else
-    printf("Impossible de lire la valeur au point (%d,%d).\n", p.x,p.y);
+    printf("Impossible de lire la valeur au point (%d,%d).\n", p.c,p.l);
   return NULL;
 }
 
 
 /* void stock_val */
 /* Change la valeur de la matrice de coordonnées p par la valeur msg */
-void change_val_matrice(point p, char * msg, char*** matrice)
+void change_val_matrice(Point p, char * msg, char*** matrice)
 {
   if (matrice == NULL){
     printf("Matrice non initialisée.\n");
   }
 
-  else if (p.x >= 0 && p.y >= 0 && p.x < size.x && p.y < size.y) {
+  else if (p.c >= 0 && p.l >= 0 && p.c <= size.c && p.l <= size.l) {
       char * m1;
       m1 = malloc(strlen(msg)*sizeof(char));
       strcpy(m1,msg);
-      if (matrice[p.x][p.y] != NULL){
-        free(matrice[p.x][p.y]) ;
+      if (matrice[p.l][p.c] != NULL){
+        free(matrice[p.l][p.c]) ;
       }
-      matrice[p.x][p.y] = m1;
+      matrice[p.l][p.c] = m1;
   }
   else {
     printf("Impossible de changer de valeur la valeur au point (%d,%d).\n",
-      p.x,p.y);
+      p.c,p.l);
   }
 }
 
@@ -80,7 +85,7 @@ void change_val_matrice(point p, char * msg, char*** matrice)
 
 /*void ligne(){
   int	j;
-  for (j=0;j<size.y;j++)
+  for (j=0;j<size.l;j++)
     printf(" -------");
   printf("\n");
 }*/
@@ -89,8 +94,8 @@ void affichmat(char*** matrice) {
   int	i,j;
 
   /*ligne();*/
-  for(i=0;i<size.x;i++){
-    for(j=0;j<size.y;j++){
+  for(i=0;i<=size.l;i++){
+    for(j=0;j<=size.c;j++){
       printf("|%s \t",matrice[i][j]);
     }
     printf("|\n");
@@ -152,11 +157,103 @@ void create_modif_var(char* nom, int val) {
 }
 
 
-/*int main () {
-  char*** matrice = create_matrice(5,4);
+/* Règles sémantiques :
+ * Retourne 1 quand c'est correct
+ * Retourne 0 sinon */
 
-  point p1 = new_point(5,4);
-  printf("Point p1 (%d,%d)\n",p1.x,p1.y);
+/* RS1 : Le labyrinthe doit avoir au moins 2 lignes et au moins 2 colonnes */
+int RS1(Point size){
+  if (size.c >= 1 && size.l >= 1)
+    return 1;
+  printf("RS1 : Le labyrinthe doit avoir au moins 2 lignes et au moins 2 colonnes.\n");
+  return 0;
+}
+
+/* RS2_count : Le labyrinthe doit avoir une et une seule entrée */
+int RS2_count(int countE){
+  if (countE == 1)
+    return 1;
+  printf("RS2 : Le labyrinthe doit avoir une et une seule entrée.\n");
+  return 0;
+}
+
+/* RS2_check : L'entrée ne peut être ni une sortie ni une entrée de trou de vers */
+int RS2_check(){
+  /* A faire */
+  return 0;
+}
+
+/* RS3_count : Le labyrinthe doit avoir au moins une sortie */
+int RS3_count(int countS){
+  if (countS >= 1)
+    return 1;
+  printf("RS3 : Le labyrinthe doit avoir au moins une sortie.\n");
+  return 0;
+}
+
+/* RS3_check : La sortie ne peut être ni l'entrée ni une entrée de trou de vers */
+int RS3_check(){
+  /* A faire */
+  return 0;
+}
+
+/* RS4 : L'entrée et les sorties du labyrinthe doivent se situer sur la périphérie
+ * du labyrinthe */
+int RS4(Point E, Point* S, int nb_S, Point size){
+   int i;
+   Point tmp;
+
+   if (S == NULL){
+     printf("RS4 : La liste des sorties est vide.\n");
+     exit(1);
+   }
+
+   if (E.c != 0 && E.l != 0 && E.c != size.c && E.l != size.l){
+      return 0;
+   }
+
+   else {
+     for (i=0 ; i<nb_S ; i++){
+       tmp = S[i];
+       if (tmp.c != 0 && tmp.l != 0 && tmp.c != size.c && tmp.l != size.l){
+          return 0;
+       }
+     }
+   }
+   return 1;
+ }
+
+
+/*int main(){
+  Point size = new_point(5,6);
+
+  Point entree1 = new_point(0,0);
+  Point entree2 = new_point(5,6);
+  Point entree3 = new_point(5,0);
+  Point entree4 = new_point(0,5);
+
+
+  Point* listeS = NULL;
+  listeS = calloc(1,sizeof(Point));
+  listeS[0] = new_point(0,0);
+  printf("listeS[0] : (%d,%d)\n",listeS[0].c, listeS[0].l);
+
+  printf("Test entree1 : %d\n", RS4(entree1,listeS,1,size));
+  printf("Test entree2 : %d\n", RS4(entree2,listeS,1,size));
+  printf("Test entree3 : %d\n", RS4(entree3,listeS,1,size));
+  printf("Test entree4 : %d\n", RS4(entree4,listeS,1,size));
+
+
+  return 0;
+}*/
+
+
+
+int main () {
+  char*** matrice = create_matrice(5,6);
+
+  Point p1 = new_point(4,2);
+  printf("Point p1 (%d,%d)\n",p1.c,p1.l);
 
   printf("\nAppel de la fonction change_val_matrice(p1,ABC)\n");
   change_val_matrice(p1,"ABC",matrice);
@@ -165,7 +262,7 @@ void create_modif_var(char* nom, int val) {
   change_val_matrice(p1, "DEF", matrice);
   printf("Point p1 :%s\n", lecture(p1,matrice));
 
-  printf("\nTaille de la matrice : (%d,%d)\n",size.x-1,size.y-1);
+  printf("\nTaille de la matrice : (%d,%d)\n",size.c,size.l);
   printf("Matrice correspondante :\n");
   affichmat(matrice);
 
@@ -181,4 +278,4 @@ void create_modif_var(char* nom, int val) {
   printf("Deuxième valeur : %d\n",listevars.val[1]);
 
   return 0;
-}*/
+}
diff --git a/Labgen/labgen.h b/Labgen/labgen.h
index 5aeb11e..c943c52 100644
--- a/Labgen/labgen.h
+++ b/Labgen/labgen.h
@@ -4,9 +4,9 @@
 #define TAILLE 255
 
 typedef struct {
-int x;
-int y;
-} point;
+int c;
+int l;
+} Point;
 
 typedef struct {
 char* ident[TAILLE];
@@ -14,11 +14,11 @@ int val[TAILLE];
 int last;
 } variables;
 
-point new_point(int ,int);
+Point new_point(int ,int);
 
 char*** create_matrice(int,int);
-char* lecture(point,char***);
-void change_val_matrice(point,char*, char***);
+char* lecture(Point,char***);
+void change_val_matrice(Point,char*, char***);
 void affichmat(char***);
 
 void init_listevars();
-- 
GitLab