diff --git a/code/p1e1.c b/code/p1e1.c index 9a2f9d0..22e8759 100644 --- a/code/p1e1.c +++ b/code/p1e1.c @@ -1,6 +1,6 @@ /** * SAE 2.02 - Exploration algorithmique d’un problème - * Prtie 1 / Exercice _ + * Prtie 1 / Exercice 1 * Extrait code C */ @@ -11,6 +11,7 @@ typedef struct pointCaracteristique { char nom[NAME_MAX_LEN]; struct pointCaracteristique **tPtsCaract; -} PointCaracteristique; + int nbPtsCaract; +} PointCaracteristique, *Rue; PointCaracteristique *reseau[NB_PTS_CARACT_MAX]; diff --git a/code/p1e3.c b/code/p1e3.c new file mode 100644 index 0000000..29c49b7 --- /dev/null +++ b/code/p1e3.c @@ -0,0 +1,31 @@ +/** + * SAE 2.02 - Exploration algorithmique d’un problème + * Prtie 1 / Exercice 3 + * Extrait code C + */ + +#define NAME_MAX_LEN 40 +#define NB_PTS_CARACT_MAX 10 + +typedef struct pointCaracteristique { + char nom[NAME_MAX_LEN]; + struct pointCaracteristique **tPtsCaract; + int nbPtsCaract; +} PointCaracteristique, *Rue; + +PointCaracteristique *reseau[NB_PTS_CARACT_MAX]; + + +// BUT: Savoir si B est directement accessible depuis A + +int isAccessDirect(PointCaracteristique A, PointCaracteristique B) +{ + for (int i = 0; i < A.nbPtsCaract; i++) + { + if (A.tPtsCaract[i] == &B) + { + return 1; + } + } + return 0; +} \ No newline at end of file diff --git a/code/p1e4.c b/code/p1e4.c new file mode 100644 index 0000000..2f3feaa --- /dev/null +++ b/code/p1e4.c @@ -0,0 +1,89 @@ +/** + * SAE 2.02 - Exploration algorithmique d’un problème + * Prtie 1 / Exercice 4 + * Extrait code C + */ + +#define NAME_MAX_LEN 40 +#define NB_PTS_CARACT_MAX 10 + +typedef struct pointCaracteristique { + char nom[NAME_MAX_LEN]; + struct pointCaracteristique **tPtsCaract; + int nbPtsCaract; +} PointCaracteristique, *Rue; + +PointCaracteristique *reseau[NB_PTS_CARACT_MAX]; + + +// BUT: Savoir si B est directement accessible depuis A + +int isAccessDirect(PointCaracteristique *A, PointCaracteristique *B) +{ + for (int i = 0; i < A->nbPtsCaract; i++) + { + if (A->tPtsCaract[i] == B) + { + return 1; + } + } + return 0; +} + + +// BUT: Savoir si B est accessible depuis A + +// version récusrive +int isAccessREC(PointCaracteristique *A, PointCaracteristique *B) +{ + for (int i = 0; i < A->nbPtsCaract; i++) + { + if (isAccessDirect(A, B)) + { + return 1; + } + else + { + return isAccessREC(A->tPtsCaract[i], B); + } + } + return 0; +} + +// version itérative +int isAccessITE(PointCaracteristique *A, PointCaracteristique *B) +{ + int i = 0; + + PointCaracteristique *ptsMarque[NB_PTS_CARACT_MAX]; + int nbPtsMarque = 0; + + PointCaracteristique *ptsTest = A; + + // pour tout les points du point testé + for (i = 0; i < ptsTest->nbPtsCaract; i++) + { + // test si point déjà testé + for (int j = 0; j < nbPtsMarque; j++) + { + if (ptsTest == ptsMarque[j]) + { + break; + } + } + + // test si pour ce point le chemin est direct + if (isAccessDirect(ptsTest, B)) + { + return 1; + } + + // le point viens d'être testé, il entre dans la liste + ptsMarque[nbPtsMarque++] = ptsTest; + + // on teste ensuite le prochain + ptsTest = ptsTest->tPtsCaract[i]; + } + + return 0; +} \ No newline at end of file diff --git a/sections/partie1.tex b/sections/partie1.tex index e6c87d3..9469363 100644 --- a/sections/partie1.tex +++ b/sections/partie1.tex @@ -6,18 +6,33 @@ \begin{document} \section{Partie 1} + \subsection{Question 1} \quad Pour représenter ce réseaux, je propose la structure de données suivante : - - \lstinputlisting[language=C,firstline=8,lastline=16]{code/p1e1.c} + \lstinputlisting[language=C,firstline=8,lastline=17]{code/p1e1.c} \par\quad La structure du point se compose de son nom et d'un tableau de pointeurs sur d'autre points. Le réseau est ainsi composé d'un tableau de pointeur sur des structures `pointsCaracteristique', elles-même pointant sur une un ou plusieurs point de la liste. \par\quad Le réseau est caractérisé par ses points caractéristiques. Chaque point connaît les points accessibles de manière direct. Cela permet de représenter les rues et leur sens. Prenons par exemple, une rue qui part du point A et qui a pour destination le point B. Elle sera caractérisée par la présence du point B dans la liste des points accessibles du point A. De cette manière on peut facilement dessiner le réseau et calculer les trajets à suivre. En somme, les pointeurs servent à caractériser les rues et leurs sens. + \subsection{Question 2} \par\quad Le choix d'une telle structure est fait sur la base de la simplicité d'implémentation. En effet, cette structure est relativement simple. Elle ne travaille quasiment que sur de la manipulation de pointeurs. Le parcours des points caractéristiques est donc facile. \par\quad De plus, si on se penche sur la complexité de l'implémentation, le nombre d'opérations requise pour le parcours du réseau est proportionnel au nombre de points que l'on parcours. Au pire, tout les points seront parcouru : c'est-à-dire que la complexité maximale s'élève au nombre de point qui compose le réseaux. + + \subsection{Question 3} + \par\quad + + + \subsection{Question 4} + \par\quad + + + \subsection{Question 5} + \par\quad + + + \end{document} \ No newline at end of file