next up previous
suivant: À propos de ce

Examen de TD n°2


$\textstyle \parbox{120mm}{%%
La durée de l'examen est de 60 minutes, les notes...
...uement à titre indicatif. Il pourra être modifié
lors de la notation finale. }$


Cet examen porte sur la représentation de graphes orientés en C. Un graphe orienté $G=(S,A)$ est constitué d'un ensemble $S$ de sommets et d'un ensemble $A$ d'arêtes (c'est à dire de couples de sommets). On peut donc considérer qu'un sommet est connecté à un ensemble d'autres sommets (voir figure 1).

Figure: Un exemple de graphe orienté
\begin{figure}\centering \includepstex[width=.3\linewidth]{graphe}
\end{figure}

Sur le graphe de la figure 1, les voisins du sommet étiqueté par $3$ sont donc lui-même, le sommet étiqueté par $2$ et le sommet étiqueté par $4$.

Les types utilisés dans cette épreuve seront les suivants:

typedef struct s_sommet_maillon *p_sommet_maillon_t;
typedef p_sommet_maillon_t       sommet_liste_t;
typedef sommet_liste_t          *p_sommet_liste_t;
typedef struct s_sommet         *sommet_t;

typedef struct s_sommet_maillon {
  sommet_t noeud;
  sommet_liste_t suivant;
} sommet_maillon_t;

typedef struct s_sommet {
  int etiquette;
  sommet_liste_t voisins;
} s_sommet_t;

Un sommet est donc composé d'une étiquette de type int et d'une liste de sommets qui sont ses voisins.


\begin{Question}\textbf{(0.5 points)}
Écrire une fonction en \textsf{C}\xspace ...
...e_t nil()\end{Verbatim} et qui renvoie une liste de sommets vide.
\end{Question}

\begin{Reponse}
\begin{Verbatim}sommet_liste_t nil()
{
return NULL;
}\end{Verbatim}\end{Reponse}

\begin{Question}\textbf{(1 points)}
Écrire une fonction en \textsf{C}\xspace \t...
... les éléments suivants sont ceux de la
liste passée en argument.
\end{Question}

\begin{Reponse}
\begin{Verbatim}sommet_liste_t cons(sommet_t sommet, sommet_l...
...et;
tete->suivant = sommet_liste;
}
return tete;
}\end{Verbatim}\end{Reponse}

\begin{Question}\textbf{(1 points)}
Écrire une fonction en \textsf{C}\xspace \t...
...e et qui affiche un message
d'erreur et sort du programme sinon.
\end{Question}

\begin{Reponse}
\begin{Verbatim}sommet_t car(sommet_liste_t liste)
{
if(list...
...errible !!\n'');
exit(1);
}
return liste->noeud;
}\end{Verbatim}\end{Reponse}


\begin{Question}\textbf{(1 points)}
Écrire une fonction en \textsf{C}\xspace \t...
...à la liste vide
et la liste privée de son premier élément sinon.
\end{Question}

\begin{Reponse}
\begin{Verbatim}sommet_liste_t cdr(sommet_liste_t liste)
{
i...
... !\n'');
return(nil());
}
return liste->suivant;
}\end{Verbatim}\end{Reponse}


\begin{Question}\textbf{(1.5 points)}
Écrire une fonction en \textsf{C}\xspace ...
...ar la valeur passée en argument et
qui ne possède pas de voisin.
\end{Question}

\begin{Reponse}
\begin{Verbatim}sommet_t new_sommet(int etiquette) {
sommet_...
...te = etiquette;
new->voisins = nil();
return new;
}\end{Verbatim}\end{Reponse}


\begin{Question}\textbf{(2 points)}
Écrire une fonction en \textsf{C}\xspace \t...
...texttt{voisin} à la liste des voisins
du sommet \texttt{sommet}.
\end{Question}

\begin{Reponse}
\begin{Verbatim}void add_voisin(sommet_t sommet,sommet_t vois...
...sin devrait modifier un sommet vide\n'');
exit(1);
}\end{Verbatim}\end{Reponse}


\begin{Question}\textbf{(2 points)}
Écrire une fonction en \textsf{C}\xspace \t...
...\lq :'' puis les étiquettes de ses voisins séparées par des espaces.
\end{Question}

\begin{Reponse}
\begin{Verbatim}
void affiche_voisins(sommet_t sommet) {
som...
...uette);
voisin=cdr(voisin);
}
printf(''\n'');
}
}\end{Verbatim}\end{Reponse}

\begin{Question}
% latex2html id marker 134
\textbf{(1 points)}
Écrire une fonc...
...eux qui sont capables de m'écrire ce que leur programme affiche.}
\end{Question}

\begin{Reponse}
\begin{Verbatim}int main()
{
sommet_t s1,s2,s3,s4;s1=new_...
... ./graphe
1 : 3 1
2 : 4 1
3 : 4 3 2
4 : 4 3 2\end{verbatim}\par\end{Reponse}





Arnaud Legrand 2001-12-20