je suis un bg de fou

master
parent 048603513f
commit 9fc5959924

BIN
SAE2

Binary file not shown.

@ -43,6 +43,9 @@ Léon Grosse
Murs
illiCO travaux
37, bis Avenue Marx Dormoy 63000 Clermont-Ferrand
6200
102
2000
Finitions
SGP finition
4, Rue de Chignat 63000 Clermont-Ferrand

@ -15,11 +15,12 @@ Precedence *loadPrec(int *tmax, int *tlog);
int rechTravaux(char *travauxName, Offre **tabTravaux);
void minTravaux(Offre **tabTravaux);
void freeListeDevis(ListeDevis *ldevis);
void fusionDevisElements(ListeDevis *R, int *tlogR, ListeDevis *S, int *tlogS, ListeDevis *mergedList, ListeDevis *last, int *k);
void gestionElementsRestants(ListeDevis *mergedList, ListeDevis *last, ListeDevis *source, int *tlogSource, int *k);
void fusionMaillonDevis(ListeDevis R, int tlogR, ListeDevis S, int tlogS, ListeDevis *T);
void triFusionListeDevis(ListeDevis ldevis, int tlog);
void freeListeDevis(ListeDevis *ldevis);
void fusionDevisElements(ListeDevis *R, int *tlogR, ListeDevis *S, int *tlogS, ListeDevis *mergedList, ListeDevis *last, int *k);
void gestionElementsRestants(ListeDevis *mergedList, ListeDevis *last, ListeDevis *source, int *tlogSource, int *k);
void fusionMaillonDevis(ListeDevis R, int tlogR, ListeDevis S, int tlogS, ListeDevis *T);
void triFusionListeDevis(ListeDevis *ldevis, int tlog);
// Fonctions de base

@ -1,6 +1,3 @@
// on ne nous a pas donner de longueur pour la chaine de char de nomE
// il faudrait utiliser la meme methode que pour adresse
typedef struct
{
char *nomE;

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -5,7 +5,6 @@
// initialisation des travaux
Offre **initTabTravaux(void)
{
printf("\n*-*-* INITTABTRAVAUX *-*-*\n");
Offre **tabTravaux;
tabTravaux = (Offre **)malloc(TMAXTRAV* sizeof(Offre *));
@ -33,68 +32,57 @@ Offre **initTabTravaux(void)
// Chargement d'une chaine de caracteres depuis un fichier
char *readFromFile(FILE *file)
{
printf("\n*-*-* READFROMFILE *-*-*\n");
char *str, *buf, s[6];
int i=0, tmax = 5;
str = (char *)malloc(tmax*sizeof(char));
if (str == NULL)
{
printf("\033[0;31mErreur: \033[0mmalloc readFromFile");
char *str;
char *buf;
int len = 0;
int size = 5;
int add = 5;
str = (char *)malloc(size * sizeof(char));
if (!str)
exit(1);
}
fgets(str, tmax, file);
while(str[strlen(str)-1]!='\n')
while (str[len] != '\n')
{
if (i==tmax)
len = strlen(str);
if (len >= size - 1)
{
tmax+=5;
buf=realloc(str, tmax*sizeof(char));
if (buf==NULL)
size += add;
buf = realloc(str, size);
if (!buf)
{
printf("\033[0;31mErreur: \033[0mrealloc readFromFile");
free(str);
exit(1);
}
fgets(s, 5, file);
strcat(str, s);
str = buf;
}
i++;
fgets(str + len, size - len, file);
len = strlen(str) - 1;
}
str[strlen(str)-1] = '\0';
return str;
str[len] = '\0';
return (str);
}
// Chargement d'un devis depuis un fichier
void loadDevis(FILE *devisFile, Offre **tabTravaux)
{
printf("\n*-*-* LOADDEVIS *-*-*\n");
int index;
char *travaux;
Devis d;
MaillonDevis *nouveauMaillon;
travaux = readFromFile(devisFile);
index = rechTravaux(travaux, tabTravaux);
if (index == -1)
exit(1);
nouveauMaillon = (MaillonDevis *)malloc(sizeof(MaillonDevis));
if (!nouveauMaillon)
{
printf("\033[0;31mErreur: \033[0mallocation mémoire pour nouveauMaillon\n");
exit(1);
}
d.nomE = readFromFile(devisFile);
d.adresse = readFromFile(devisFile);
fscanf(devisFile, "%d\n%d\n%d%*c", &d.capital, &d.duree, &d.prix);
nouveauMaillon->dev = d;
tabTravaux[index]->ldevis = insert(tabTravaux[index]->ldevis, d);
}
// Chagement des offres depuis le fichier devis.txt
Offre **loadOffre(void)
{
printf("\n*-*-* LOADOFFRE *-*-*\n");
Offre **tabTravaux = initTabTravaux();
FILE *devisFile;

@ -7,8 +7,7 @@ int main()
tabTravaux = loadOffre();
for (int i = 0; i < TMAXTRAV; i++)
{
displayOffre(tabTravaux[i]);
printf("\n");
triFusionListeDevis(&tabTravaux[i]->ldevis, lenListeDevis(tabTravaux[i]->ldevis));
}
minTravaux(tabTravaux);

@ -6,7 +6,6 @@
// Retourne l'indice de l'offre dans le tableau si elle est trouvée, sinon retourne -1
int rechTravaux(char *travauxName, Offre **tabTravaux)
{
printf("\n*-*-* RECHTRAVAUX *-*-*\n");
//On utilise la taille max de travaux car travaux est un tableau constant, sa taille max est égale à sa taille logique.
int deb=0, end=TMAXTRAV-1, mid;
@ -29,39 +28,39 @@ int rechTravaux(char *travauxName, Offre **tabTravaux)
// Affiche chaque offre gardee avec le devis ayant le prix le plus bas
void minTravaux(Offre *tabTravaux[])
{
printf("\n*-*-* MINTRAVAUX *-*-*\n");
int i;
MaillonDevis *minDev, *md, *s;
for(i=0; i<TMAXTRAV; i++)
{
md = tabTravaux[i]->ldevis;
minDev=md;
while(minDev->suiv != NULL)
{
if ((md->dev).prix < (minDev->dev).prix)
{
s=minDev;
minDev=md;
}
else if ((md->dev).prix > (minDev->dev).prix)
s=md;
else
{
if ((md->dev).capital < (minDev->dev).capital)
{
s=minDev;
minDev=md;
}
else // On met else et pas else if car on ne peut pas garder 2 égaux, il faut qd même en supprimer un
s=md;
}
md=md->suiv;
del(s);
displayOffre(tabTravaux[i]);
}
displayOffre(tabTravaux[i]);
}
int i;
MaillonDevis *minDev, *md, *s;
for (i = 0; i < TMAXTRAV; i++)
{
md = NULL;
s = NULL;
minDev = tabTravaux[i]->ldevis;
if (!md && minDev->suiv)
md = minDev->suiv;
while (md)
{
if ((md->dev).prix < (minDev->dev).prix || (((md->dev).prix == (minDev->dev).prix) && ((md->dev).capital > (minDev->dev).capital)))
{
s = minDev;
minDev = md;
md = md->suiv;
}
else if ((md->dev).prix == (minDev->dev).prix && ((md->dev).capital == (minDev->dev).capital))
{
printf("deux offres minimales !!!\n");
exit (1);
}
else
{
s = md;
md = md->suiv;
}
del(s);
}
minDev->suiv = NULL;
tabTravaux[i]->ldevis = minDev;
displayOffre(tabTravaux[i]);
}
}
@ -73,7 +72,6 @@ void minTravaux(Offre *tabTravaux[])
// Libère la mémoire d'une liste de devis
void freeListeDevis(ListeDevis *ldevis)
{
printf("\n*-*-* FREELISTEDEVIS *-*-*\n");
ListeDevis current = *ldevis;
ListeDevis next;
@ -89,7 +87,6 @@ void freeListeDevis(ListeDevis *ldevis)
// Boucle principale de fusion de listes de devis
void fusionDevisElements(ListeDevis *R, int *tlogR, ListeDevis *S, int *tlogS, ListeDevis *mergedList, ListeDevis *last, int *k)
{
printf("\n*-*-* FUSIONDEVISELEMENTS *-*-*\n");
ListeDevis *current;
while (*tlogR > 0 && *tlogS > 0)
@ -124,7 +121,6 @@ void fusionDevisElements(ListeDevis *R, int *tlogR, ListeDevis *S, int *tlogS, L
// Gère les éléments restants après les itérations principales de fusion
void gestionElementsRestants(ListeDevis *mergedList, ListeDevis *last, ListeDevis *source, int *tlogSource, int *k)
{
printf("\n*-*-* GESTIONELEMENTSRESTANTS *-*-*\n");
while (*tlogSource > 0)
{
if (!*mergedList)
@ -145,7 +141,6 @@ void gestionElementsRestants(ListeDevis *mergedList, ListeDevis *last, ListeDevi
// Fusionne deux listes de devis triées en une seule liste triée
void fusionMaillonDevis(ListeDevis R, int tlogR, ListeDevis S, int tlogS, ListeDevis *T)
{
printf("\n*-*-* FUSIONMAILLONDEVIS *-*-*\n");
ListeDevis last;
ListeDevis mergedList;
int k;
@ -161,14 +156,13 @@ void fusionMaillonDevis(ListeDevis R, int tlogR, ListeDevis S, int tlogS, ListeD
}
// Tri fusion sur une liste de devis
void triFusionListeDevis(ListeDevis ldevis, int tlog)
void triFusionListeDevis(ListeDevis *ldevis, int tlog)
{
printf("\n*-*-* TRIFUSIONLISTEDEVIS *-*-*\n");
ListeDevis p;
ListeDevis q;
ListeDevis qTemp;
p = ldevis;
p = *ldevis;
q = p->suiv;
if (tlog <= 1)
return;
@ -180,8 +174,8 @@ void triFusionListeDevis(ListeDevis ldevis, int tlog)
qTemp = p->suiv;
p->suiv = NULL;
triFusionListeDevis(ldevis, tlog / 2);
triFusionListeDevis(qTemp, tlog - tlog / 2);
triFusionListeDevis(&qTemp, tlog - tlog / 2);
ListeDevis mergedList = NULL;
fusionMaillonDevis(ldevis, tlog / 2, qTemp, tlog - tlog / 2, &mergedList);
ldevis = mergedList;
}
fusionMaillonDevis(*ldevis, tlog / 2, qTemp, tlog - tlog / 2, &mergedList);
*ldevis = mergedList;
}

@ -5,14 +5,12 @@
// Initialise une liste de devis
ListeDevis newListeDevis(void)
{
printf("\n*-*-* NEWLISTEDEVIS *-*-*\n");
return NULL;
}
// Initialise une nouvelle offre
Offre *newOffre(char *travauxName)
{
printf("\n*-*-* NEWOFFRE *-*-*\n");
Offre *o;
o = (Offre *)malloc(sizeof(Offre));
strcpy(o->travaux, travauxName);
@ -23,7 +21,6 @@ Offre *newOffre(char *travauxName)
// Initialise une liste (pour les successeurs)
Liste newListe(void)
{
printf("\n*-*-* NEWLISTE *-*-*\n");
return NULL;
}
@ -32,14 +29,12 @@ Liste newListe(void)
// Verifie l'integrite d'une liste de devis
Booleen emptyListe(ListeDevis l)
{
printf("\n*-*-* EMPTYLISTE *-*-*\n");
return l==NULL;
}
// Vérifie l'intégrité de l'offre
Booleen emptyOffre(Offre *o)
{
printf("\n*-*-* EMPTYOFFRE *-*-*\n");
return emptyListe(o->ldevis);
}
@ -48,7 +43,6 @@ Booleen emptyOffre(Offre *o)
// Insere un devis en tete de la liste des devis
ListeDevis insert(ListeDevis l, Devis d)
{
printf("\n*-*-* INSERT *-*-*\n");
MaillonDevis *md;
md = (MaillonDevis *)malloc(sizeof(MaillonDevis));
if (md == NULL)
@ -65,7 +59,6 @@ ListeDevis insert(ListeDevis l, Devis d)
Liste insertSucc(Liste l, char travaux[])
{
printf("\n*-*-* INSERTSUCC *-*-*\n");
MaillonSucc *ms;
ms = (MaillonSucc *)malloc(sizeof(MaillonSucc));
if (ms == NULL)
@ -84,35 +77,37 @@ Liste insertSucc(Liste l, char travaux[])
// Supprime le premier maillon de la liste de devis
ListeDevis del(ListeDevis l)
{
printf("\n*-*-* DEL *-*-*\n");
MaillonDevis *md;
if (l==NULL)
{
printf("\033[0;31mErreur: \033[0msuppression dans une liste vide\n");
exit(1);
}
if (l->suiv==NULL)
return newListeDevis();
md=l;
l=l->suiv;
free(md->dev.nomE);
free(md->dev.adresse);
free(md);
md=NULL;
printf("\n\nADRESSE md %s\n", md->dev.adresse);
printf("\n\nNOM md %s\n", md->dev.nomE);
printf("\n\nADRESSE l %s\n", l->dev.adresse);
printf("\n\nNOM l %s\n", l->dev.nomE);
return l;
MaillonDevis *md;
if (l == NULL)
{
printf("\033[0;31mErreur: \033[0msuppression dans une liste vide\n");
exit(1);
}
md = l;
l = l->suiv;
if (md->suiv == NULL)
{
free(md->dev.nomE);
free(md->dev.adresse);
free(md);
return newListeDevis();
}
free(md->dev.nomE);
free(md->dev.adresse);
free(md);
return l;
}
/*---------------calculs----------------*/
// Calcule la longueur de la liste de devis
int lenListeDevis(ListeDevis l)
{
printf("\n*-*-* LENLISTEDEVIS *-*-*\n");
int len=0;
while (l)
{
@ -124,7 +119,6 @@ int lenListeDevis(ListeDevis l)
int lenMaxNomEntreprise(ListeDevis ldevis)
{
printf("\n*-*-* LENMAXNOMENTREPRISE *-*-*\n");
int maxLen;
int len;
@ -142,7 +136,6 @@ int lenMaxNomEntreprise(ListeDevis ldevis)
// Calcule le nombre de precedences pour un travail donne
int nombrePred(char travaux[], Precedence prec[], int tlog)
{
printf("\n*-*-* NOMBREPRED *-*-*\n");
int nbPred = 0, i;
for (i=0; i<tlog; i++)
if (strcmp(travaux, prec[i].travauxSucc)==0)
@ -155,7 +148,6 @@ int nombrePred(char travaux[], Precedence prec[], int tlog)
// Retourne une liste des successeurs pour un travail donne
Liste lstSucc(char travaux[], Precedence prec[], int tlog)
{
printf("\n*-*-* LSTSUCC *-*-*\n");
Liste succ = newListe();
int i;
for (i=0; i<tlog; i++)
@ -169,22 +161,19 @@ Liste lstSucc(char travaux[], Precedence prec[], int tlog)
// Affiche les details d'un devis
void displayDevis(Devis d)
{
printf("\n*-*-* DISPLAYDEVIS *-*-*\n");
printf("%s\t%s\t%d\t%d\t%d\n", d.nomE, d.adresse, d.capital, d.duree, d.prix);
printf("\t%s\t%s\t%d\t%d\t%d\n", d.nomE, d.adresse, d.capital, d.duree, d.prix);
}
// Affiche les details de l'offre et sa liste de devis
void displayOffre(Offre *o)
{
printf("\n*-*-* DISPLAYOFFRE *-*-*\n");
printf("\n%s\n\t", o->travaux);
printf("\n%s\n", o->travaux);
displayListeDevis(o->ldevis);
}
// Affiche les details de la liste de devis
void displayListeDevis(ListeDevis l)
{
printf("\n*-*-* DISPLAYLISTEDEVIS *-*-*\n");
while(l != NULL)
{
displayDevis(l->dev);
@ -195,7 +184,6 @@ void displayListeDevis(ListeDevis l)
// Fonction pour afficher le devis d'une entreprise donnée pour un type de travaux donné
void afficherDevisEntreprise(Offre **tabTravaux)
{
printf("\n*-*-* AFFICHERDEVISENTREPRISE *-*-*\n");
int indiceTravaux;
int maxlen;
char typeTravaux[30];

Loading…
Cancel
Save