#include #include #include struct elmt { char nom[3]; int num; float mass; struct elmt *suivant; struct elmt *precedent; }; main() { void source_utilisateur(struct elmt**); void source_fichier(FILE*,struct elmt**); void ordrealpha(struct elmt*, struct elmt**); void afficher_liste(struct elmt **); void sauver_liste(struct elmt **); struct elmt *tete=0; char a,rep='y'; int modif=0; FILE *source_mend; source_mend = fopen("source_mendeleiev.txt","r" ); source_fichier(source_mend,&tete); printf("Apres la lecture du ficher source\n"); afficher_liste(&tete); printf("Desirez vous entrer de nouveaux elements? y or n\n"); scanf("%s",&rep); if (rep=='y'){modif=1;} while(rep=='y') { source_utilisateur(&tete); printf("Desirez vous entrer de nouveaux elements? y or n\n"); scanf("%s",&rep); } if (modif==1) { printf("Desirez vous affichier la nouvelle liste? y or n\n"); scanf("%s",&rep); if (rep=='y'){afficher_liste(&tete);} printf("Desirez vous sauvegarder cette liste dans un fichier: y or n\n"); scanf("%s",&rep); if (rep=='y'){sauver_liste(&tete);} } printf("fin du programme appuyer sur entrer"); getchar(); scanf("%c",&a); } void source_utilisateur(struct elmt **head) { void ordrealpha(struct elmt*, struct elmt**); struct elmt *nouv; nouv=malloc(sizeof(struct elmt)); printf("Nom de l'element?(2 caracteres max)\n"); scanf("%3s",&nouv->nom); printf("N atomitique de l'element?\n"); scanf("%d",&nouv->num); printf("Masse atomitique de l'element?\n"); scanf("%f",&nouv->mass); ordrealpha(nouv,head); }; void source_fichier(FILE *source,struct elmt **head) { void ordrealpha(struct elmt*, struct elmt**); struct elmt *nouv; do { nouv=malloc(sizeof(struct elmt)); fscanf(source,"%d",&nouv->num); printf("%d ",nouv->num); fscanf(source,"%c"); fscanf(source,"%2s",&nouv->nom); printf("%2s ",nouv->nom); fscanf(source,"%f",&nouv->mass); printf("%f \n",nouv->mass); //organisation ds la liste ordrealpha(nouv,head); } while (!feof(source)); }; void ordrealpha(struct elmt *nouv,struct elmt **head) { void afficher_liste(struct elmt **head) ; //printf("vous utilisez la fonction ordrealpha\n"); struct elmt *courant; int ok; if (*head==0) { *head=nouv; nouv->precedent=0; nouv->suivant=0; } else { courant=(*head); ok=0; if (strcmp(nouv->nom,courant->nom)==0) {printf("cet element est deja dans la liste, dsl");} //printf("numero atomique courant %d",courant->num); //printf("numero atomique nouv %d",nouv->num); //if (nouv->num==courant->num) {printf("ce numero atomique est deja associe a un l'element %3s, dsl",courant->nom);} if (strcmp( nouv->nom,courant->nom)<0) { nouv->suivant=courant; courant->precedent=nouv; nouv->precedent=0; *head=nouv; ok=1; } while(ok==0) { if (strcmp(nouv->nom,courant->nom)==0) {printf("cet element est deja dans la liste, dsl..\n");} //if (nouv->num==courant->num) {printf("ce numero atomique est deja associe a un l'element %3s, dsl",courant->nom);} if(strcmp( nouv->nom,courant->nom)<0) { nouv->suivant=courant; nouv->precedent=courant->precedent; courant->precedent->suivant=nouv; courant->precedent=nouv; ok=1; } else { if(courant->suivant==0) { courant->suivant=nouv; nouv->suivant=0; nouv->precedent=courant; ok=1; } else{courant=courant->suivant;ok=0;} } } } } void afficher_liste(struct elmt **head) { //affichage struct elmt *courant; int j=0; printf("voici les elements du taleau de mendeleiev present dans la liste\n"); courant=*head; if(*head==0) printf("la liste est vide\n"); else { while(courant->suivant!=0) { printf("%3s ",courant->nom); printf("%d ",courant->num); printf("%f \n",courant->mass); courant=courant->suivant; j=j+1; } printf("%3s ",courant->nom); printf("%d ",courant->num); printf("%f \n",courant->mass); } } void sauver_liste(struct elmt **head) { FILE *fichier; char filename[20]; printf("indiquez le nom du ficher dans lequel vous souhaitez enregistrer ces données\n"); scanf("%20s", filename); fichier=fopen(filename,"w"); struct elmt *courant; int j=0; courant=*head; if(*head==0) printf("la liste est vide\n"); else { while(courant->suivant!=0) { fprintf(fichier,"%3s ",courant->nom); fprintf(fichier,"%d ",courant->num); fprintf(fichier,"%f \n",courant->mass); courant=courant->suivant; j=j+1; } fprintf(fichier,"%3s ",courant->nom); fprintf(fichier,"%d ",courant->num); fprintf(fichier,"%f \n",courant->mass); courant=courant->suivant; } fclose(fichier); }