#include "SAEl.h" ListeDept creerListeDept(void) { return NULL; } VilleIUT **chargementVille(char *nomFich, int tphys, int *tailleL) { int i = 0, nbDept; FILE *flot; VilleIUT **tabV; tabV = (VilleIUT **)malloc(sizeof(VilleIUT*) * tphys); if (tabV == NULL) { printf("Erreur malloc tab!\n"); exit(1); } flot = fopen(nomFich, "r"); if (flot == NULL) { printf("Problème ouverture du fichier !\n"); exit(1); } *tailleL = 0; tabV[*tailleL] = (VilleIUT *)malloc(sizeof(VilleIUT)); if (tabV[*tailleL] == NULL) { printf("Erreur malloc ville!\n"); fclose(flot); exit(1); } *(tabV[*tailleL]) = lireVille(flot); while (!feof(flot)) { fscanf(flot, "%d", &nbDept); printf("Nombre de dep : %d\n",nbDept); tabV[*tailleL]->idDept = creerListeDept(); while (i < nbDept) { tabV[*tailleL]->idDept = traiterDept(tabV[*tailleL]->idDept, flot); i += 1; } i = 0; *tailleL += 1; tabV[*tailleL] = (VilleIUT *)malloc(sizeof(VilleIUT)); if (tabV[*tailleL] == NULL) { printf("Erreur malloc ville!\n"); fclose(flot); exit(1); } *(tabV[*tailleL]) = lireVille(flot); } if (tailleL == 0) printf("Fichier vide !\n"); fclose(flot); return tabV; } VilleIUT lireVille(FILE *flot) { VilleIUT v; fgets(v.ville, 30, flot); v.ville[strlen(v.ville) - 1] = '\0'; return v; } ListeDept traiterDept(ListeDept l, FILE *flot) { char nom[30], dept[30]; int nbPlaces; fscanf(flot,"%s %d",dept,&nbPlaces); fgets(nom, 30, flot); nom[strlen(nom) - 1] = '\0'; printf("Nom du départ : %s\n",dept); l = insererDept(l, dept, nom, nbPlaces); return l; } ListeDept ajouterEnTeteDept(ListeDept l, char *dept, char *nom, int nbP) { MaillonDept *nouv; nouv = (MaillonDept *)malloc(sizeof(MaillonDept)); if (nouv == NULL) { printf("Erreur malloc !\n"); exit(1); } strcpy(nouv->departement,dept); nouv->nbPlaces = nbP; strcpy(nouv->nom,nom); nouv->suiv = l; return nouv; } void affichageListeDept(ListeDept l) // itératif { while (l != NULL) { printf("- %s :\n|%d places\t%s\n\t", l->departement, l->nbPlaces, l->nom); l = l->suiv; } } ListeDept insererDept(ListeDept l, char *dept, char *nom, int nbP) { // récursif if (l == NULL) return ajouterEnTeteDept(l, dept, nom, nbP); if ((strcmp(dept,l->departement)) < 0) return ajouterEnTeteDept(l, dept, nom, nbP); if ((strcmp(dept,l->departement)) == 0) return l; l->suiv = insererDept(l->suiv, dept, nom, nbP); return l; } ListeDept supprimerEnTêteDept(ListeDept l) { MaillonDept *aux; if (l == NULL) { printf("suppression interdite\n"); exit(1); } if (l->suiv == NULL) return NULL; aux = l; l = l->suiv; free(aux); return l; } ListeDept supprimerDept(ListeDept l, char *code) { if (l == NULL) return l; if ((strcmp(code,l->departement)) < 0) return l; if ((strcmp(code,l->departement)) == 0) return supprimerEnTêteDept(l); l->suiv = supprimerDept(l->suiv, code); return l; } /* void affichageListeDeptR(ListeDept l) { if (l->suiv == NULL) printf("%d\n", l->v); printf("%d =>", l->v); affichageListeDeptR(l->suiv); } int tete(ListeDept l) { if (l == NULL) { printf("opération interdite\n"); exit(1); } return l->v; } */ bool vide(ListeDept l) { if (l == NULL) return true; // 1 return false; // 0 } /* int longueur(ListeDept l) { int cpt = 0; while (l != NULL) { cpt + 1; l = l->suiv; } return cpt; } */ ListeDept rechercheDept(ListeDept l, char code[]) { if (l == NULL) return NULL; if ((strcmp(code,l->departement)) < 0) return NULL; if (strcmp(code,l->departement)==0) return l; return rechercheDept(l->suiv, code); } /* ListeDept ajouterEnQueue(ListeDept l, int x) { if (l == NULL) return ajouterEnTête(l, x); l->suiv = ajouterEnQueue(l->suiv, x); return l; } */