@ -5,8 +5,7 @@ int chargement(VilleIUT *tiut[],int *tMax)
FILE * flot ;
VilleIUT * v ;
MaillonDept * m ;
int nb = 0 , pos ;
char trouve ;
int nb = 0 , pos , trouve ;
flot = fopen ( " IUT.don " , " r " ) ;
if ( flot = = NULL )
{
@ -16,6 +15,10 @@ int chargement(VilleIUT *tiut[],int *tMax)
}
while ( ! feof ( flot ) )
{
if ( nb = = * tMax )
{
tiut = reallocation ( tiut , tMax ) ;
}
v = ( VilleIUT * ) malloc ( sizeof ( VilleIUT ) ) ;
if ( v = = NULL )
{
@ -24,6 +27,7 @@ int chargement(VilleIUT *tiut[],int *tMax)
return - 2 ;
}
fscanf ( flot , " %s " , v - > nom ) ;
printf ( " Nom de la ville : %s \n " , v - > nom ) ;
pos = rechercheIUT ( tiut , nb , v - > nom , & trouve ) ;
m = ( MaillonDept * ) malloc ( sizeof ( MaillonDept ) ) ;
if ( m = = NULL )
@ -33,19 +37,19 @@ int chargement(VilleIUT *tiut[],int *tMax)
return - 3 ;
}
* m = lireDep ( flot ) ;
if ( trouve = = ' O ' )
if ( trouve = = 1 )
{
insererDep ( tiut [ pos ] ,* m ) ;
insererDep t( * ( tiut [ pos ] ), m ) ;
}
else
{
m - > suiv = NULL ;
v - > lDept = m ;
tiut [ nb ] = v ;
nb + + ;
}
free ( v ) ;
free ( m ) ;
nb + + ;
}
return nb ;
}
@ -56,6 +60,7 @@ MaillonDept lireDep(FILE *flot)
fscanf ( flot , " %s%d " , m . dept , & m . nbP ) ;
fgets ( m . respAd , 31 , flot ) ;
m . respAd [ strlen ( m . respAd ) - 1 ] = ' \0 ' ;
afficherDep ( m ) ;
return m ;
}
@ -69,7 +74,7 @@ void afficherVille(VilleIUT v)
printf ( " %s " , v . nom ) ;
while ( v . lDept ! = NULL )
{
afficherDep ( * v . lDept ) ;
afficherDep ( * ( v . lDept ) ) ;
v . lDept = v . lDept - > suiv ;
}
}
@ -83,6 +88,76 @@ void afficherTIUT(VilleIUT *tiut[], int tLog)
}
}
int rechercheIUT ( VilleIUT * tiut [ ] , int tLog , char ville [ ] , int * trouve )
{
int inf , sup , t ;
inf = 0 ;
sup = tLog - 1 ;
while ( inf < = sup )
{
t = ( inf + sup ) / 2 ;
if ( strcmp ( ville , tiut [ t ] - > nom ) = = 0 )
{
* trouve = 1 ;
return t ;
}
if ( strcmp ( ville , tiut [ t ] - > nom ) < 0 )
{
sup = t - 1 ;
}
else
{
inf = t + 1 ;
}
}
* trouve = 0 ;
return inf ;
}
int insererDept ( VilleIUT v , MaillonDept * m )
{
int trouve ;
MaillonDept * pos ;
pos = rechercheDept ( v . lDept , & trouve , m - > dept ) ;
printf ( " Valeur de trouve : %d " , trouve ) ;
if ( trouve = = 1 )
{
printf ( " \n Département déjà présent dans cet IUT \n " ) ;
return - 1 ;
}
m - > suiv = pos ;
pos = m ;
return 1 ;
}
MaillonDept * rechercheDept ( ListeDept lDept , int * trouve , char nom [ ] )
{
while ( lDept - > suiv ! = NULL )
{
if ( strcmp ( nom , lDept - > dept ) = = 0 )
{
* trouve = 1 ;
return lDept ;
}
if ( strcmp ( nom , lDept - > dept ) < 0 )
{
* trouve = 0 ;
return lDept ;
}
lDept = lDept - > suiv ;
}
* trouve = 0 ;
return lDept ;
}
VilleIUT * * reallocation ( VilleIUT * tiut [ ] , int * tMax )
{
VilleIUT * * aux ;
aux = ( VilleIUT * * ) realloc ( tiut , ( sizeof ( VilleIUT * ) * ( * tMax ) ) + 5 ) ;
* tMax = * tMax + 5 ;
return aux ;
}
void globale ( void )
{
int tLog , tMax = 10 ;
@ -99,4 +174,5 @@ void globale(void)
printf ( " Le programme ne peut pas fonctionner \n " ) ;
exit ( 1 ) ;
}
afficherTIUT ( tiut , tLog ) ;
}