// cours_15_02_2003.cpp : structures à composition variable / fichiers / pointeurs / tri
#include <stdafx.h>
#include <string.h>
#include <ctype.h>
struct cel
{ char nomVille[20];
int nbHab;
cel * voisin;
};
struct cel *tliste, *fliste;
struct cel *surf;
FILE *PF;
char nom_fich[20];
void ouvrir_fichier ()
{
printf("\n Donnez le nom du fichier à traiter :");
scanf("%s",nom_fich);
printf("\n fichier à ouvrir -> %s",nom_fich);
PF=fopen(nom_fich,"r");
if (PF==NULL) {printf("\n *** erreur ouverture %s",nom_fich) ;}
else {printf("\n ok, fichier %s ouvert",nom_fich);};
};
void lire_fichier(FILE *ppf,char nom_fichier[20])
{
char nville[20];
int nb;
printf("\n Ouverture du fichier:%s ",nom_fichier);
while (!feof(ppf))
{
fscanf(ppf,"%s %i",nville,&nb);
printf("\n ville:%s Nombre d 'habitant :%i ",nville,nb);
if (fliste==NULL)
{tliste = new cel;
strcpy (tliste ->nomVille,nville);
tliste ->nbHab = nb;
tliste ->voisin =NULL;
fliste=tliste;}
else
{
surf = new cel;
strcpy (surf ->nomVille,nville);
surf ->nbHab = nb;
surf ->voisin =NULL;
fliste ->voisin=surf;
fliste=surf;};
}
fclose(ppf);
surf =tliste;
while(surf !=NULL)
{
printf("\n ville:%s Nombre d 'habitant :%i ",surf ->nomVille,surf->nbHab);
surf=surf->voisin;}
};
char * majuscule (char chaine[20])
{
char temp_chaine[20];
for (int i=0;i<(strlen(chaine));i++)
{temp_chaine[i]=toupper(chaine[i]};
strcopy(temp_chaine, );
return temp_chaine;
}
void trier_alpha()
{ int non_trie=1;
char temp_ville[20];
int temp_nbHab;
struct cel *surf1, *surf2;
printf("\n tri");
while (non_trie==1)
{ surf1=tliste;
non_trie=0;
while(surf1->voisin!=NULL)
{ surf2=surf1->voisin;
printf("\n tri %s %s",surf1->nomVille,surf2->nomVille);
if (strcmp(majuscule(surf1->nomVille),majuscule(surf2->nomVille))>0)
{
strcpy(temp_ville,surf1->nomVille);
temp_nbHab=surf1->nbHab;
strcpy(surf1->nomVille,surf2->nomVille);
surf1->nbHab=surf2->nbHab;
strcpy(surf2->nomVille,temp_ville);
surf2->nbHab=temp_nbHab;
non_trie=1;
};
surf1=surf2;
};
};
};
void ouvrir_fichier_en_ecriture ()
{
printf("\n Donnez le nom du fichier à traiter :");
scanf("%s",nom_fich);
printf("\n fichier à ouvrir -> %s",nom_fich);
PF=fopen(nom_fich,"w");
if (PF==NULL) {printf("\n *** erreur ouverture %s",nom_fich) ;}
else {printf("\n ok, fichier %s ouvert",nom_fich);};
};
void sauvegarder_liste()
{
printf("\n sauv liste");
if (tliste==NULL)
{printf("\n-- la liste est vide --");}
else
{
ouvrir_fichier_en_ecriture();
surf=tliste;
while (surf != NULL)
{
fprintf(PF,"%s %i\n",surf->nomVille,surf->nbHab);
surf=surf->voisin;
};
fclose(PF);
};
};
void main()
{
ouvrir_fichier ();
lire_fichier( PF, nom_fich);
trier_alpha();
sauvegarder_liste();
}