diff --git a/relations.c b/relations.c
new file mode 100644
index 0000000000000000000000000000000000000000..d3b49d87ceaf9e282c849e4786364eb793f814c6
--- /dev/null
+++ b/relations.c
@@ -0,0 +1,253 @@
+// relations.c : definit le point d'entree pour l'application .
+//
+typedef int bool;
+#define false 0
+#define true -1
+
+#include "stdlib.h"
+#include "memory.h"
+#include "stdio.h"
+#include "string.h"
+
+////////////////////////////////////////
+// Exercice 1: Classement des Relations
+
+typedef enum{
+	FRERE = 2, COUSIN, PARENT, ONCLE, EPOUX, AMI, VIT, CONNAIT,
+	CHEF, COLLEGUE, LOCATAIRE, TRAVAILLE, PROPRIETAIRE, SITUE, DECOUVERT
+}rtype;
+
+bool est_lien_parente(rtype id){ 
+	return false; 
+}
+bool est_lien_professionel(rtype id){ 
+	return false; 
+}
+bool est_lien_connaissance(rtype id){
+	return false;
+}
+char* toStringRelation(rtype id){
+	return ""; 
+}
+
+////////////////////////////////////////
+// Exercice 2: Liste de pointeurs
+
+typedef struct s_node{
+	void *val;  // pointeur vers objet quelconque
+	struct s_node *suiv;
+}*listeg;
+
+listeg listegnouv(){
+	return NULL;
+}
+listeg adjtete(listeg lst, void *x){
+	return lst;
+}
+listeg adjqueue(listeg lst, void *x){
+	return lst;
+}
+listeg suptete(listeg lst){
+	return lst;
+}
+
+void *tete(listeg lst){
+	return NULL;
+}
+int longueur(listeg lst){
+	return -1;
+}
+bool estvide(listeg lst){
+	return false;
+}
+void detruire(listeg lst){
+	
+}
+listeg rech(listeg lst, void *x, int(*comp)(void *, void *)){
+	return NULL;
+}
+
+////////////////////////////////////////
+// Exercice 3: Construction du graphe
+
+#define LONG_NOM_MAX 64
+typedef enum{
+	PERSONNE=1, OBJET, ADRESSE, VILLE
+}etype;
+typedef struct s_entite{
+	char nom[LONG_NOM_MAX]; // le nom de l�entit� p.ex � Peugeot 106 �
+	etype ident; // l�identifiant associ�, p.ex OBJET
+}*Entite;
+//3.1 les structures de donn�es
+typedef struct s_sommet{
+	// A DEFINIR
+}*Sommet;
+
+typedef struct s_arc{
+	// A DEFINIR
+}*Arc;
+
+typedef struct s_relations{
+	// A DEFINIR
+}*Relations;
+
+//3.2 les constructeurs
+Entite creerEntite(char *s, etype e){
+	return NULL;
+}
+Sommet nouvSommet(Entite e){
+	return NULL;
+}
+Arc nouvArc(Entite e, rtype type){
+	return NULL;
+}
+void relationInit(Relations *g){
+	
+}
+void relationFree(Relations *g){
+	
+}
+
+//3.3 les comparaisons
+int compEntite(void *e, void *string){
+	return 0;
+}
+int compSommet(void *s, void *string){
+	return 0;
+}
+int compArc(void *a, void *string){
+	return 0;
+}
+
+//3.4 ajout d'entites et de relations
+void adjEntite(Relations g, char *nom, etype t){
+	
+}
+// PRE CONDITION: id doit �tre coh�rent avec les types des sommets correspondants � x et y
+//                p.ex si x est de type OBJET, id ne peut pas etre une relation de parente
+// PRE CONDITION: strcmp(nom1,nom2)!=0
+void adjRelation(Relations g, char *nom1, char *nom2, rtype id){
+	
+}
+
+////////////////////////////////////////
+// Exercice 4: Explorer les relations entre personnes
+
+// 4.1 listes de relations
+listeg en_relation(Relations g, char *x){
+	return NULL;
+}
+listeg chemin2(Relations g, char *x, char *y){
+	return NULL;
+}
+// 4.2 verifier un lien de parente
+// PRE CONDITION: strcmp(x,y)!=0
+bool ont_lien_parente(Relations g, char *x, char *y){
+	return false;
+}
+
+// 4.3 tester connaissances
+// PRE CONDITION: les sommets correspondants � x et y sont de type PERSONNE
+// PRE CONDITION: strcmp(x,y)!=0
+bool se_connaissent(Relations g, char *x, char *y){
+	return false;
+}
+// PRE CONDITION: les sommets correspondants � x et y sont de type PERSONNE
+// PRE CONDITION: strcmp(x,y)!=0
+bool se_connaissent_proba(Relations g, char *x, char *y){
+	return false;
+}
+// PRE CONDITION: les sommets correspondants � x et y sont de type PERSONNE
+// PRE CONDITION: strcmp(x,y)!=0
+bool se_connaissent_peutetre(Relations g, char *x, char *y){
+	return false;
+}
+
+////////////////////////////////////////
+// Exercice 5: Affichages
+
+void affichelg(listeg l, void(*aff)(void *)){
+	
+}
+
+void afficheEntite(void *x){
+	
+}
+void afficheArc(void *x){
+	
+}
+
+////////////////////////////////////////
+// Exercice 6: Parcours
+void affiche_degre_relations(Relations r, char *x){
+	
+}
+
+
+int main(){
+	int i,j;
+	Relations r; relationInit(&r);
+	// ajouter les entites de l'exemple
+	char *tabe[] ={"KARL","LUDOVIC","CELINE","CHLOE","GILDAS","CEDRIC","SEVERINE",
+		"PEUGEOT 106" ,"1, RUE DE LA RUE","STRASBOURG" };
+	for (i = 0; i < 7; i++) adjEntite(r, tabe[i], PERSONNE);
+	adjEntite(r, tabe[7], OBJET);
+	adjEntite(r, tabe[8], ADRESSE);
+	adjEntite(r, tabe[9], VILLE);
+	// ajouter les relations de l'exemple
+	adjRelation(r, tabe[0], tabe[1], FRERE);
+	adjRelation(r, tabe[0], tabe[2], AMI);
+	adjRelation(r, tabe[0], tabe[3], CONNAIT);
+	adjRelation(r, tabe[0], tabe[5], COUSIN);
+	adjRelation(r, tabe[0], tabe[7], PROPRIETAIRE);
+	adjRelation(r, tabe[0], tabe[8], PROPRIETAIRE);
+	adjRelation(r, tabe[3], tabe[4], VIT);
+	adjRelation(r, tabe[5], tabe[6], EPOUX);
+	adjRelation(r, tabe[5], tabe[8], LOCATAIRE);
+	adjRelation(r, tabe[7], tabe[8], DECOUVERT);
+	adjRelation(r, tabe[8], tabe[9], SITUE);
+
+	// explorer les relations
+	printf("%s est en relation avec:\n", tabe[0]);
+	affichelg(en_relation(r, tabe[0]),afficheArc);
+	printf("\n");
+
+	for (i = 0; i < 7; i++) for (j = i + 1; j < 10; j++)
+	{
+		printf("<%s> et <%s> ont les relations communes:\n", tabe[i], tabe[j]);
+		listeg ch = chemin2(r, tabe[i], tabe[j]);
+		affichelg(ch, afficheEntite);
+		printf("\n");
+		detruire(ch);
+	}
+	printf("\n\n");
+
+	for (i = 0; i < 10; i++) for (j = i + 1; j < 10; j++)
+	{
+		printf("<%s> et <%s> ont lien de parente: %s\n",
+			tabe[i], tabe[j], ont_lien_parente(r, tabe[i], tabe[j]) ? "vrai" : "faux");
+	}
+	printf("\n");
+	for (i = 0; i < 7; i++)
+	{
+		for (j = i + 1; j < 7; j++)
+		{
+			printf("<%s> et <%s> se connaissent: %s\n",
+				tabe[i], tabe[j], se_connaissent(r, tabe[i], tabe[j]) ? "vrai" : "faux");
+			printf("<%s> et <%s> se connaissent tres probablement: %s\n",
+				tabe[i], tabe[j], se_connaissent_proba(r, tabe[i], tabe[j]) ? "vrai" : "faux");
+			printf("<%s> et <%s> se connaissent peut etre: %s\n",
+				tabe[i], tabe[j], se_connaissent_peutetre(r, tabe[i], tabe[j]) ? "vrai" : "faux");
+		}
+		printf("\n");
+	}
+
+	affiche_degre_relations(r, tabe[3]);
+
+	relationFree(&r);
+
+	printf("\nPRESS RETURN\n");
+	char buff[64]; fscanf(stdin, "%s", buff);
+    return 0;
+}
+