Liste chaînée

Résolu
NoNo1111 Messages postés 3 Date d'inscription lundi 19 mai 2014 Statut Membre Dernière intervention 20 mai 2014 - Modifié par Whismeril le 19/05/2014 à 15:01
NoNo1111 Messages postés 3 Date d'inscription lundi 19 mai 2014 Statut Membre Dernière intervention 20 mai 2014 - 20 mai 2014 à 21:18
Bonjour à tous,
Je dois faire un programme pour un projet d'école avec en autres l'utilisation des listes chaînées .. Mon programme est de réaliser des calculs de piles électrochimiques. Et je voudrais en autres utiliser les listes chaînées pour encoder les différents résultats et ensuite classer les différents potentiels de piles par ordre croissant .. le soucis c'est que j'arrive à faire les différent fonctions pour les listes ( insertion, affichage,...) mais ma liste ne s'affiche pas à la fin du programme. Je n'arrive pas à trouver mon erreur...
Pourriez-vous m'aider, ce serait bien aimable de votre part :)
Un grand merci d'avance.
Voici mon programme :

PS: Je n'ai réaliser la chaîne que pour le premier case pour l'instant.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>


void Clean_String(char *ProgInput);


typedef struct PILEListe
{
  float *Ereaction;
  struct PILEListe *suivant;
}PILE;


typedef struct ListeRepere
{
  PILE *debut;
  PILE *fin;
  int taille;
}Liste;

void initialisation (Liste * liste,int taille);
int ins_dans_liste_vide (Liste *liste, float *Ereaction);
int ins_debut_liste (Liste * liste,float *Ereaction);
int ins_fin_liste (Liste *liste, PILE *courant, float *Ereaction);
int supp_debut (Liste *liste);
void affiche ( Liste *Liste );

int main (void)
{
    char ProgInput[100];
    char MenuInput[4];
    int DataSize, taille;
    FILE*PileCuivreZinc;
    FILE*PileCuivrePlomb;
    FILE*PileCuivreArgent;
    FILE*PileZincPlomb;
    FILE*PileZincArgent;
    FILE*PilePlombArgent;
    char *nom;

    float concCu,concZn,concPb,concAg;
    float Cu,Zn,Pb,Ag;
    float Ereaction,Ecathode,Eanode,EreactionCuZn,EreactionCuPb;
    int choix;
    char cont [4];


    do
    {   printf("Que voulez-vous faire ?");
        printf ("\n1.Pile Cuivre-Zinc\n");
        printf ("2.Pile Cuivre-Plomb\n");
        printf ("3.Pile Cuivre-Argent\n");
        printf ("4.Pile Zinc-plomb\n");
        printf ("5.Pile Zinc-Argent\n");
        printf ("6.Pile Plomb-Argent\n");
        printf ("------------------------\n");
        printf("\nVotre choix: ");
        //scanf ("%d",&choix);
        fgets(MenuInput,sizeof choix,stdin);
        Clean_String(MenuInput);
        sscanf(MenuInput,"%d",&choix);

        switch (choix)
        {
            case 1 :    printf("Pile Cuivre-Zinc\n");
                        printf("-------------------------\n");
                        PileCuivreZinc=fopen("PileCuivreZinc.txt","w");

                        if(PileCuivreZinc!=NULL)
                        {
                            fputs("--PileCuivreZinc--\n",PileCuivreZinc);
                            fputs("Eo Cu++/Cu=+0,34V\n",PileCuivreZinc);
                            fputs("Eo Zn++/Zn=-0,76V\n",PileCuivreZinc);
                            fgets(ProgInput,sizeof ProgInput, PileCuivreZinc);
                        }
                            if(strcmp(ProgInput,"--PileCuivreZinc--\n")==0)
                        {
                            fgets(ProgInput,sizeof ProgInput,PileCuivreZinc);
                            sscanf(ProgInput,"%d",&DataSize);
                        }
                            fclose(PileCuivreZinc);
                            printf("\n");
                            puts("---Text File read!---");
                            printf("\n");
                            PileCuivreZinc=fopen("PileCuivreZinc.txt","r");
                            if(PileCuivreZinc!=NULL)
                        {
                            while(fgets(ProgInput,sizeof ProgInput,PileCuivreZinc)!=NULL)
                            {
                                printf("%s",ProgInput);
                            }

                            fclose(PileCuivreZinc);
                        }
                            printf("\n");
                            puts("---Text File write!---\n");

                            printf("Calcul du potentiel electrochimique de cette pile (equation de Nernst)\n");
                            printf("----------------------------------------------------------------------\n");
                            printf("Ereaction=Ecathode-Enode\n");
                            printf("Ecathode=E0 Cu++/Cu - (0,059/2)*log(1/[Cu++])\n");
                            printf("Eanode=E0 Zn++/Zn - (0,059/2)*log(1/[Zn++])\n");
                            printf("-------------------------------------------\n");
                            printf("Entrez la valeur du couple d'oxydo-reduction de Cu++/Cu compris dans le fichier precedent\n");
                            scanf("%f",&Cu);
                            printf("Entrez la valeur du couple d'oxydo-reduction de Zn++/Zn compris dans le fichier precedent\n");
                            scanf("%f",&Zn);
                            printf("Entrez la valeur de la concentration en Cu++\n");
                            scanf("%f",&concCu);
                            printf("Entrez la valeur de la concentration en Zn++\n");
                            scanf("%f",&concZn);
                            Ecathode=(Cu-(0.59/2)* log10(1/concCu));
                            printf("Ecathode :%f Volts\n",Ecathode);
                            Eanode=(Zn-(0.59/2)* log10(1/concZn));
                            printf("Eanode :%f Volts\n",Eanode);
                            EreactionCuZn=Ecathode-Eanode;
                            printf("Ereaction :%f Volts\n",EreactionCuZn);

                            Ereaction=EreactionCuZn;
void  initialisation ();
int ins_debut_liste ();
void affiche ();
printf ("\n Creation de la premiere pile:\n");





                            break;
            case 2 :        printf("Pile Cuivre-Plomb\n");
                        printf("-------------------------\n");
                        PileCuivrePlomb=fopen("PileCuivrePlomb.txt","w");

                        if(PileCuivrePlomb!=NULL)
                        {
                            fputs("--PileCuivrePlomb--\n",PileCuivrePlomb);
                            fputs("Eo Cu++/Cu=+0,34V\n",PileCuivrePlomb);
                            fputs("Eo Pb++/Pb=-0.13V\n",PileCuivrePlomb);
                            fgets(ProgInput,sizeof ProgInput, PileCuivrePlomb);
                        }
                            if(strcmp(ProgInput,"--PileCuivrePlomb--\n")==0)
                        {
                            fgets(ProgInput,sizeof ProgInput,PileCuivrePlomb);
                            sscanf(ProgInput,"%d",&DataSize);
                        }
                            fclose(PileCuivrePlomb);
                            printf("\n");
                            puts("---Text File read!---");
                            printf("\n");
                            PileCuivrePlomb=fopen("PileCuivrePlomb.txt","r");
                            if(PileCuivrePlomb!=NULL)
                        {
                            while(fgets(ProgInput,sizeof ProgInput,PileCuivrePlomb)!=NULL)
                            {
                                printf("%s",ProgInput);
                            }

                            fclose(PileCuivrePlomb);
                        }
                            printf("\n");
                            puts("---Text File write!---\n");

                            printf("Calcul du potentiel electrochimique de cette pile (equation de Nernst)\n");
                            printf("----------------------------------------------------------------------\n");
                            printf("Ereaction=Ecathode-Enode\n");
                            printf("Ecathode=E0 Cu++/Cu - (0,059/2)*log(1/[Cu++])\n");
                            printf("Eanode=E0 Pb++/Pb - (0,059/2)*log(1/[Pb++])\n");
                            printf("-------------------------------------------\n");
                            printf("Entrez la valeur du couple d'oxydo-reduction de Cu++/Cu compris dans le fichier precedent\n");
                            scanf("%f",&Cu);
                            printf("Entrez la valeur du couple d'oxydo-reduction de Pb++/Pb compris dans le fichier precedent\n");
                            scanf("%f",&Pb);
                            printf("Entrez la valeur de la concentration en Cu++\n");
                            scanf("%f",&concCu);
                            printf("Entrez la valeur de la concentration en Pb++\n");
                            scanf("%f",&concPb);
                            Ecathode=(Cu-(0.59/2)* log10(1/concCu));
                            printf("Ecathode :%f Volts\n",Ecathode);
                            Eanode=(Pb-(0.59/2)* log10(1/concPb));
                            printf("Eanode :%f Volts\n",Eanode);
                            EreactionCuPb=Ecathode-Eanode;
                            printf("Ereaction :%f Volts\n",EreactionCuPb);






                        break;
            case 3 :        printf("Pile Cuivre-Argent\n");
                        printf("-------------------------\n");
                        PileCuivreArgent=fopen("PileCuivreArgent.txt","w");

                        if(PileCuivreArgent!=NULL)
                        {
                            fputs("--PileCuivreArgent--\n",PileCuivreArgent);
                            fputs("Eo Cu++/Cu=+0,34V\n",PileCuivreArgent);
                            fputs("Eo Ag+/Ag=+0,80V\n",PileCuivreArgent);
                            fgets(ProgInput,sizeof ProgInput, PileCuivreArgent);
                        }
                            if(strcmp(ProgInput,"--PileCuivreArgent--\n")==0)
                        {
                            fgets(ProgInput,sizeof ProgInput,PileCuivreArgent);
                            sscanf(ProgInput,"%d",&DataSize);
                        }
                            fclose(PileCuivreArgent);
                            printf("\n");
                            puts("---Text File read!---");
                            printf("\n");
                            PileCuivreArgent=fopen("PileCuivreArgent.txt","r");
                            if(PileCuivreArgent!=NULL)
                        {
                            while(fgets(ProgInput,sizeof ProgInput,PileCuivreArgent)!=NULL)
                            {
                                printf("%s",ProgInput);
                            }

                            fclose(PileCuivreArgent);
                        }
                            printf("\n");
                            puts("---Text File write!---\n");

                            printf("Calcul du potentiel electrochimique de cette pile (equation de Nernst)\n");
                            printf("----------------------------------------------------------------------\n");
                            printf("Ereaction=Ecathode-Enode\n");
                            printf("Ecathode=E0 Ag+/Ag - (0,059/2)*log(1/[Ag+])\n");
                            printf("Eanode=E0 Cu++/Cu - (0,059/2)*log(1/[Cu++])\n");
                            printf("-------------------------------------------\n");
                            printf("Entrez la valeur du couple d'oxydo-reduction de Cu++/Cu compris dans le fichier precedent\n");
                            scanf("%f",&Cu);
                            printf("Entrez la valeur du couple d'oxydo-reduction de Ag+/Ag compris dans le fichier precedent\n");
                            scanf("%f",&Ag);
                            printf("Entrez la valeur de la concentration en Cu++\n");
                            scanf("%f",&concCu);
                            printf("Entrez la valeur de la concentration en Ag+\n");
                            scanf("%f",&concAg);
                            Ecathode=(Ag-(0.59/2)* log10(1/concAg));
                            printf("Ecathode :%f Volts\n",Ecathode);
                            Eanode=(Cu-(0.59/2)* log10(1/concCu));
                            printf("Eanode :%f Volts\n",Eanode);
                            Ereaction=Ecathode-Eanode;
                            printf("Ereaction :%f Volts\n",Ereaction);
                            break;
            case 4 :        printf("Pile Zinc-Plomb\n");
                        printf("-------------------------\n");
                        PileZincPlomb=fopen("PileZincPlomb.txt","w");

                        if(PileZincPlomb!=NULL)
                        {
                            fputs("--PileZincPlomb--\n",PileZincPlomb);
                            fputs("Eo Zn++/Zn=-0,76V\n",PileZincPlomb);
                            fputs("Eo Pb++/Pb=-0,13V\n",PileZincPlomb);
                            fgets(ProgInput,sizeof ProgInput, PileZincPlomb);
                        }
                            if(strcmp(ProgInput,"--PileZincPlomb--\n")==0)
                        {
                            fgets(ProgInput,sizeof ProgInput,PileZincPlomb);
                            sscanf(ProgInput,"%d",&DataSize);
                        }
                            fclose(PileZincPlomb);
                            printf("\n");
                            puts("---Text File read!---");
                            PileZincPlomb=fopen("PileZincPlomb.txt","r");
                            if(PileZincPlomb!=NULL)
                        {
                            while(fgets(ProgInput,sizeof ProgInput,PileZincPlomb)!=NULL)
                            {
                                printf("%s",ProgInput);
                            }

                            fclose(PileZincPlomb);
                        }
                            printf("\n");
                            puts("---Text File write!---\n");

                            printf("Calcul du potentiel electrochimique de cette pile (equation de Nernst)\n");
                            printf("----------------------------------------------------------------------\n");
                            printf("Ereaction=Ecathode-Enode\n");
                            printf("Ecathode=E0 Pb++/Pb - (0,059/2)*log(1/[Pb++])\n");
                            printf("Eanode=E0 Zn++/Zn - (0,059/2)*log(1/[Zn++])\n");
                            printf("-------------------------------------------\n");
                            printf("Entrez la valeur du couple d'oxydo-reduction de Zn++/Zn compris dans le fichier precedent\n");
                            scanf("%f",&Zn);
                            printf("Entrez la valeur du couple d'oxydo-reduction de Pb++/Pb compris dans le fichier precedent\n");
                            scanf("%f",&Pb);
                            printf("Entrez la valeur de la concentration en Zn++\n");
                            scanf("%f",&concZn);
                            printf("Entrez la valeur de la concentration en Pb++\n");
                            scanf("%f",&concPb);
                            Ecathode=(Pb-(0.59/2)* log10(1/concPb));
                            printf("Ecathode :%f Volts\n",Ecathode);
                            Eanode=(Zn-(0.59/2)* log10(1/concZn));
                            printf("Eanode :%f Volts\n",Eanode);
                            Ereaction=Ecathode-Eanode;
                            printf("Ereaction :%f Volts\n",Ereaction);
                            break;

            case 5 :        printf("Pile Zinc-Argent\n");
                        printf("-------------------------\n");
                        PileZincArgent=fopen("PileZincArgent.txt","w");

                        if(PileZincArgent!=NULL)
                        {
                            fputs("--PileZincArgent--\n",PileZincArgent);
                            fputs("Eo Zn++/Zn=-0,76V\n",PileZincArgent);
                            fputs("Eo Ag+/Ag=+0,80V\n",PileZincArgent);
                            fgets(ProgInput,sizeof ProgInput, PileZincArgent);
                        }
                            if(strcmp(ProgInput,"--PileZincArgent--\n")==0)
                        {
                            fgets(ProgInput,sizeof ProgInput,PileZincArgent);
                            sscanf(ProgInput,"%d",&DataSize);
                        }
                            fclose(PileZincArgent);
                            printf("\n");
                            puts("---Text File read!---");
                            printf("\n");
                            PileZincArgent=fopen("PileZincArgent.txt","r");
                            if(PileZincArgent!=NULL)
                        {
                            while(fgets(ProgInput,sizeof ProgInput,PileZincArgent)!=NULL)
                            {
                                printf("%s",ProgInput);
                            }

                            fclose(PileZincArgent);
                        }
                            printf("\n");
                            puts("---Text File write!---\n");

                            printf("Calcul du potentiel electrochimique de cette pile (equation de Nernst)\n");
                            printf("----------------------------------------------------------------------\n");
                            printf("Ereaction=Ecathode-Enode\n");
                            printf("Ecathode=E0 Ag+/Ag - (0,059/2)*log(1/[Ag+])\n");
                            printf("Eanode=E0 Zn++/Zn - (0,059/2)*log(1/[Zn++])\n");
                            printf("-------------------------------------------\n");
                            printf("Entrez la valeur du couple d'oxydo-reduction de Zn++/Zn compris dans le fichier precedent\n");
                            scanf("%f",&Zn);
                            printf("Entrez la valeur du couple d'oxydo-reduction de Ag+/Ag compris dans le fichier precedent\n");
                            scanf("%f",&Ag);
                            printf("Entrez la valeur de la concentration en Zn++\n");
                            scanf("%f",&concZn);
                            printf("Entrez la valeur de la concentration en Pb++\n");
                            scanf("%f",&concAg);
                            Ecathode=(Ag-(0.59/2)* log10(1/concAg));
                            printf("Ecathode :%f Volts\n",Ecathode);
                            Eanode=(Zn-(0.59/2)* log10(1/concZn));
                            printf("Eanode :%f Volts\n",Eanode);
                            Ereaction=Ecathode-Eanode;
                            printf("Ereaction :%f Volts\n",Ereaction);
                            break;
            case 6 :        printf("Pile Plomb-Argent\n");
                        printf("-------------------------\n");
                        PilePlombArgent=fopen("PilePlombArgent.txt","w");

                        if(PilePlombArgent!=NULL)
                        {
                            fputs("--PilePlombArgent--\n",PilePlombArgent);
                            fputs("Eo Pb++/Pb=-0,13V\n",PilePlombArgent);
                            fputs("Eo Ag+/Ag=+0,80V\n",PilePlombArgent);
                            fgets(ProgInput,sizeof ProgInput, PilePlombArgent);
                        }
                            if(strcmp(ProgInput,"--PilePlombArgent--\n")==0)
                        {
                            fgets(ProgInput,sizeof ProgInput,PilePlombArgent);
                            sscanf(ProgInput,"%d",&DataSize);
                        }
                            fclose(PilePlombArgent);
                            printf("\n");
                            puts("---Text File read!---");
                            printf("\n");
                            PilePlombArgent=fopen("PilePlombArgent.txt","r");
                            if(PilePlombArgent!=NULL)
                        {
                            while(fgets(ProgInput,sizeof ProgInput,PilePlombArgent)!=NULL)
                            {
                                printf("%s",ProgInput);
                            }

                            fclose(PilePlombArgent);
                        }
                            printf("\n");
                            puts("---Text File write!---\n");

                            printf("Calcul du potentiel electrochimique de cette pile (equation de Nernst)\n");
                            printf("----------------------------------------------------------------------\n");
                            printf("Ereaction=Ecathode-Enode\n");
                            printf("Ecathode=E0 Ag+/Ag - (0,059/2)*log(1/[Ag+])\n");
                            printf("Eanode=E0 Pb++/Pb - (0,059/2)*log(1/[Pb++])\n");
                            printf("-------------------------------------------\n");
                            printf("Entrez la valeur du couple d'oxydo-reduction de Zn++/Zn compris dans le fichier precedent\n");
                            scanf("%f",&Pb);
                            printf("Entrez la valeur du couple d'oxydo-reduction de Ag+/Ag compris dans le fichier precedent\n");
                            scanf("%f",&Ag);
                            printf("Entrez la valeur de la concentration en Zn++\n");
                            scanf("%f",&concPb);
                            printf("Entrez la valeur de la concentration en Pb++\n");
                            scanf("%f",&concAg);
                            Ecathode=(Ag-(0.59/2)* log10(1/concAg));
                            printf("Ecathode :%f Volts\n",Ecathode);
                            Eanode=(Pb-(0.59/2)* log10(1/concPb));
                            printf("Eanode :%f Volts\n",Eanode);
                            Ereaction=Ecathode-Eanode;
                            printf("Ereaction :%f Volts\n",Ereaction);
                            break;
            default : printf ("choix incorrect ! \n");
        }
        printf ("\n\nContinuer (oui//non) ? ");
        scanf ("%s",cont);
    }

    while ((strcmp(cont,"oui")==0 )|| (strcmp (cont,"oui")==0));
    system("pause");
    return 0;
}




void Clean_String(char*ProgInput)
{
    char*p;
    char c  ;
    p = strchr(ProgInput,'\n');
    if(p!=NULL)
    {
        *p='\0';

    }
    else
    {
        do
        {
            c=getchar();
        }while(c!='\n');
    }
}


void initialisation (Liste *liste,int taille)
{
  liste->debut = NULL;
  liste->fin = NULL;
  taille = 0;
}

int ins_dans_liste_vide (Liste * liste, float *Ereaction)
{
  PILE *nouveau_PILE;
  if ((nouveau_PILE = (PILE *) malloc (sizeof (PILE))) == NULL)
    return -1;
  if ((nouveau_PILE->Ereaction = (float *) malloc (50 * sizeof (float)))
      == NULL)
    return -1;
  nouveau_PILE->Ereaction=Ereaction;

  nouveau_PILE->suivant = NULL;
  liste->debut = nouveau_PILE;
  liste->fin = nouveau_PILE;
  liste->taille++;
  return 0;
}

int ins_debut_liste (Liste * liste, float *Ereaction){
  PILE *nouveau_PILE;
  if ((nouveau_PILE = (PILE *) malloc (sizeof (PILE))) == NULL)
    return -1;
  if ((nouveau_PILE->Ereaction = (float*) malloc (50 * sizeof (float)))
      == NULL)
    return -1;
  nouveau_PILE->Ereaction=Ereaction;

  nouveau_PILE->suivant = liste->debut;
  liste->debut = nouveau_PILE;
  liste->taille++;
  return 0;
}

int ins_fin_liste (Liste * liste, PILE * courant, float *Ereaction)
{
  PILE *nouveau_PILE;
  if ((nouveau_PILE = (PILE *) malloc (sizeof (PILE))) == NULL)
    return -1;
  if ((nouveau_PILE->Ereaction = (float *) malloc (50 * sizeof (float)))
      == NULL)
    return -1;
  nouveau_PILE->Ereaction=Ereaction;

  courant->suivant = nouveau_PILE;
  nouveau_PILE->suivant = NULL;

  liste->fin = nouveau_PILE;

  liste->taille++;
  return 0;
}


int supp_debut (Liste * liste){
  if (liste->taille == 0)
    return -1;
  PILE *supp_PILE;
  supp_PILE = liste->debut;
  liste->debut = liste->debut->suivant;
  if (liste->taille == 1)
    liste->fin = NULL;
  free (supp_PILE->Ereaction);
  free (supp_PILE);
  liste->taille--;
  return 0;
}

void affiche (Liste * liste)
{
  PILE *courant;
  courant = liste->debut;
  while (courant != NULL)
    {
      printf ("%d - %f\n", courant, courant->Ereaction);
      courant = courant->suivant;
    }
}

6 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
19 mai 2014 à 14:46
Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du
code sur le forum.
Explications disponibles ici :
http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
19 mai 2014 à 15:02
Coloration ajoutée, voir le message de Jordane
0
NoNo1111 Messages postés 3 Date d'inscription lundi 19 mai 2014 Statut Membre Dernière intervention 20 mai 2014
19 mai 2014 à 15:46
ok Je veillerai à faire ça la prochaine fois.

je cherche toujours après mes erreurs ...
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
20 mai 2014 à 15:59
Bonjour.

Ce n'est pas très clair (d'où l'absence de réponses). Quel est le comportement attendu ? Quel est le comportement obtenu ?
Quel est précisement le souci ?

__________________________________________________________________________________________________
Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
20 mai 2014 à 20:07
Bonsoir, c'est très bien de marquer son sujet résolu.
C'est encore mieux, pour ceux qui se sont penchés sur ton problème de mettre la solution.
0
NoNo1111 Messages postés 3 Date d'inscription lundi 19 mai 2014 Statut Membre Dernière intervention 20 mai 2014
Modifié par cptpingu le 21/05/2014 à 01:16
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

void Clean_String(char *ProgInput);

typedef struct element element;
struct element
{
    float Ereaction;
    char choixpile [10];
    struct element *nxt;
};

typedef element* llist;

llist ajouterEnTete(llist liste, float Ereaction, char *choixpile);
llist ajouterEnFin(llist liste, float Ereaction, char *choixpile);
void afficherListe(llist liste);

int main ()
{
    char ProgInput[100];
    char MenuInput[4];
    FILE*PileCuivreZinc;
    FILE*PileCuivrePlomb;
    FILE*PileCuivreArgent;
    FILE*PileZincPlomb;
    FILE*PileZincArgent;
    FILE*PilePlombArgent;
    struct element*comparaison = NULL;

    float concCu,concZn,concPb,concAg,concAg2;
    float Cu,Zn,Pb,Ag;
    float Ereaction,Ecathode,Eanode,EreactionCuZn,EreactionCuPb,EreactionCuAg,EreactionPbZn,EreactionAgZn,EreactionAgPb;
    int choix,DataSize;
    char cont [4];


    do
    {   printf("Que voulez-vous faire ?");
        printf ("\n1.Pile Cuivre-Zinc\n");
        printf ("2.Pile Cuivre-Plomb\n");
        printf ("3.Pile Cuivre-Argent\n");
        printf ("4.Pile Zinc-plomb\n");
        printf ("5.Pile Zinc-Argent\n");
        printf ("6.Pile Plomb-Argent\n");
        printf ("------------------------\n");
        printf("\nVotre choix: ");
        scanf ("%d",&choix);
        fgets(MenuInput,sizeof choix,stdin);
        Clean_String(MenuInput);
        sscanf(MenuInput,"%d",&choix);

        switch (choix)
        {
            case 1 :
                        printf("Pile Cuivre-Zinc\n");
                        printf("-------------------------\n");
                        PileCuivreZinc=fopen("PileCuivreZinc.txt","w");

                        if(PileCuivreZinc!=NULL)
                        {
                            fputs("--PileCuivreZinc--\n",PileCuivreZinc);
                            fputs("Eo Cu++/Cu=+0,34V\n",PileCuivreZinc);
                            fputs("Eo Zn++/Zn=-0,76V\n",PileCuivreZinc);
                            fgets(ProgInput,sizeof ProgInput, PileCuivreZinc);
                        }
                            if(strcmp(ProgInput,"--PileCuivreZinc--\n")==0)
                        {
                            fgets(ProgInput,sizeof ProgInput,PileCuivreZinc);
                            sscanf(ProgInput,"%d",&DataSize);
                        }
                            fclose(PileCuivreZinc);
                            printf("\n");
                            puts("---Text File read!---");
                            printf("\n");
                            PileCuivreZinc=fopen("PileCuivreZinc.txt","r");
                            if(PileCuivreZinc!=NULL)
                        {
                            while(fgets(ProgInput,sizeof ProgInput,PileCuivreZinc)!=NULL)
                            {
                                printf("%s",ProgInput);
                            }

                            fclose(PileCuivreZinc);
                        }
                            printf("\n");
                            puts("---Text File write!---\n");

                            printf("Calcul du potentiel electrochimique de cette pile (equation de Nernst)\n");
                            printf("----------------------------------------------------------------------\n");
                            printf("Ereaction=Ecathode-Enode\n");
                            printf("Ecathode=E0 Cu++/Cu - (0,059/2)*log([Cu++])\n");
                            printf("Eanode=E0 Zn++/Zn - (0,059/2)*log([Zn++])\n");
                            printf("-------------------------------------------\n");
                            printf("Entrez la valeur du couple d'oxydo-reduction de Cu++/Cu compris dans le fichier precedent:");
                            scanf("%f",&Cu);
                            printf("Entrez la valeur du couple d'oxydo-reduction de Zn++/Zn compris dans le fichier precedent:");
                            scanf("%f",&Zn);
                            printf("Entrez la valeur de la concentration en Cu++:");
                            scanf("%f",&concCu);
                            printf("Entrez la valeur de la concentration en Zn++:");
                            scanf("%f",&concZn);
                            Ecathode=(Cu-(0.059/2)* log10(concCu));
                            printf("Ecathode :%f Volts\n",Ecathode);
                            Eanode=(Zn-(0.059/2)* log10(concZn));
                            printf("Eanode :%f Volts\n",Eanode);
                            EreactionCuZn=Ecathode-Eanode;
                            printf("Ereaction :%f Volts\n",EreactionCuZn);

                            if (EreactionCuZn > Ereaction)
                            {
                                Ereaction=EreactionCuZn;
                                char choixpile [10]="Pile CuZn";

                                comparaison = ajouterEnTete(comparaison, Ereaction,choixpile);
                            printf ("\n Comparaison des potentiels des differentes piles :\n");

                            afficherListe(comparaison);


                            }
                            else
                            {
                                Ereaction=EreactionCuZn;
                                char choixpile [10]="Pile CuZn";
                            comparaison = ajouterEnFin(comparaison, Ereaction,choixpile);
                            printf ("\n Comparaison des potentiels des differentes piles :\n");
                            afficherListe(comparaison);


                            }
                            break;
            case 2 :        printf("Pile Cuivre-Plomb\n");
                        printf("-------------------------\n");
                        PileCuivrePlomb=fopen("PileCuivrePlomb.txt","w");

                        if(PileCuivrePlomb!=NULL)
                        {
                            fputs("--PileCuivrePlomb--\n",PileCuivrePlomb);
                            fputs("Eo Cu++/Cu=+0,34V\n",PileCuivrePlomb);
                            fputs("Eo Pb++/Pb=-0.13V\n",PileCuivrePlomb);
                            fgets(ProgInput,sizeof ProgInput, PileCuivrePlomb);
                        }
                            if(strcmp(ProgInput,"--PileCuivrePlomb--\n")==0)
                        {
                            fgets(ProgInput,sizeof ProgInput,PileCuivrePlomb);
                            sscanf(ProgInput,"%d",&DataSize);
                        }
                            fclose(PileCuivrePlomb);
                            printf("\n");
                            puts("---Text File read!---");
                            printf("\n");
                            PileCuivrePlomb=fopen("PileCuivrePlomb.txt","r");
                            if(PileCuivrePlomb!=NULL)
                        {
                            while(fgets(ProgInput,sizeof ProgInput,PileCuivrePlomb)!=NULL)
                            {
                                printf("%s",ProgInput);
                            }

                            fclose(PileCuivrePlomb);
                        }
                            printf("\n");
                            puts("---Text File write!---\n");

                            printf("Calcul du potentiel electrochimique de cette pile (equation de Nernst)\n");
                            printf("----------------------------------------------------------------------\n");
                            printf("Ereaction=Ecathode-Enode\n");
                            printf("Ecathode=E0 Cu++/Cu - (0,059/2)*log([Cu++])\n");
                            printf("Eanode=E0 Pb++/Pb - (0,059/2)*log([Pb++])\n");
                            printf("-------------------------------------------\n");
                            printf("Entrez la valeur du couple d'oxydo-reduction de Cu++/Cu compris dans le fichier precedent:");
                            scanf("%f",&Cu);
                            printf("Entrez la valeur du couple d'oxydo-reduction de Pb++/Pb compris dans le fichier precedent:");
                            scanf("%f",&Pb);
                            printf("Entrez la valeur de la concentration en Cu++:");
                            scanf("%f",&concCu);
                            printf("Entrez la valeur de la concentration en Pb++:");
                            scanf("%f",&concPb);
                            Ecathode=(Cu-(0.059/2)* log10(concCu));
                            printf("Ecathode :%f Volts\n",Ecathode);
                            Eanode=(Pb-(0.059/2)* log10(concPb));
                            printf("Eanode :%f Volts\n",Eanode);
                            EreactionCuPb=Ecathode-Eanode;
                            printf("Ereaction :%f Volts\n",EreactionCuPb);

                            if (EreactionCuPb > Ereaction)
                            {
                                Ereaction=EreactionCuPb;
                                char choixpile [10]="Pile CuPb";
                                comparaison = ajouterEnTete(comparaison, Ereaction,choixpile);
                            printf ("\n Comparaison des potentiels des differentes piles :\n");
                            afficherListe(comparaison);
                            printf("(Pile CuPb) > ");
                            }
                            else
                            {
                                Ereaction=EreactionCuPb;
                                char choixpile [10]="Pile CuPb";
                            comparaison = ajouterEnFin(comparaison, Ereaction,choixpile);
                            printf ("\n Comparaison des potentiels des differentes piles :\n");
                            afficherListe(comparaison);
                            printf("(Pile CuPb) > ");
                            }
                            break;
            case 3 :        printf("Pile Cuivre-Argent\n");
                        printf("-------------------------\n");
                        PileCuivreArgent=fopen("PileCuivreArgent.txt","w");

                        if(PileCuivreArgent!=NULL)
                        {
                            fputs("--PileCuivreArgent--\n",PileCuivreArgent);
                            fputs("Eo Cu++/Cu=+0,34V\n",PileCuivreArgent);
                            fputs("Eo Ag+/Ag=+0,80V\n",PileCuivreArgent);
                            fgets(ProgInput,sizeof ProgInput, PileCuivreArgent);
                        }
                            if(strcmp(ProgInput,"--PileCuivreArgent--\n")==0)
                        {
                            fgets(ProgInput,sizeof ProgInput,PileCuivreArgent);
                            sscanf(ProgInput,"%d",&DataSize);
                        }
                            fclose(PileCuivreArgent);
                            printf("\n");
                            puts("---Text File read!---");
                            printf("\n");
                            PileCuivreArgent=fopen("PileCuivreArgent.txt","r");
                            if(PileCuivreArgent!=NULL)
                        {
                            while(fgets(ProgInput,sizeof ProgInput,PileCuivreArgent)!=NULL)
                            {
                                printf("%s",ProgInput);
                            }

                            fclose(PileCuivreArgent);
                        }
                            printf("\n");
                            puts("---Text File write!---\n");

                            printf("Calcul du potentiel electrochimique de cette pile (equation de Nernst)\n");
                            printf("----------------------------------------------------------------------\n");
                            printf("Ereaction=Ecathode-Enode\n");
                            printf("Ecathode=E0 Ag+/Ag - (0,059/2)*log([Cu++])\n");
                            printf("Eanode=E0 Cu++/Cu - (0,059/2)*log([Ag+]^2)\n");
                            printf("-------------------------------------------\n");
                            printf("Entrez la valeur du couple d'oxydo-reduction de Cu++/Cu compris dans le fichier precedent:");
                            scanf("%f",&Cu);
                            printf("Entrez la valeur du couple d'oxydo-reduction de Ag+/Ag compris dans le fichier precedent:");
                            scanf("%f",&Ag);
                            printf("Entrez la valeur de la concentration en Cu++:");
                            scanf("%f",&concCu);
                            printf("Entrez la valeur de la concentration en Ag+:");
                            scanf("%f",&concAg);
                            Ecathode=(Ag-(0.059/2)* log10(concCu));
                            printf("Ecathode :%f Volts\n",Ecathode);
                            concAg2=pow(concAg,2);
                            Eanode=(Cu-(0.059/2)* log10(concAg2));
                            printf("Eanode :%f Volts\n",Eanode);
                            EreactionCuAg=Ecathode-Eanode;
                            printf("Ereaction :%f Volts\n",EreactionCuAg);

                            if (EreactionCuAg > Ereaction)
                            {
                                Ereaction=EreactionCuAg;
                                char choixpile [10]="Pile CuAg";
                                comparaison = ajouterEnTete(comparaison, Ereaction,choixpile);
                            printf ("\n Comparaison des potentiels des differentes piles :\n");
                            afficherListe(comparaison);

                            }
                            else
                            {
                                Ereaction=EreactionCuAg;
                                char choixpile [10]="Pile CuAg";
                            comparaison = ajouterEnFin(comparaison, Ereaction,choixpile);
                            printf ("\n Comparaison des potentiels des differentes piles :\n");
                            afficherListe(comparaison);

                            }
                            break;
            case 4 :        printf("Pile Zinc-Plomb\n");
                        printf("-------------------------\n");
                        PileZincPlomb=fopen("PileZincPlomb.txt","w");

                        if(PileZincPlomb!=NULL)
                        {
                            fputs("--PileZincPlomb--\n",PileZincPlomb);
                            fputs("Eo Zn++/Zn=-0,76V\n",PileZincPlomb);
                            fputs("Eo Pb++/Pb=-0,13V\n",PileZincPlomb);
                            fgets(ProgInput,sizeof ProgInput, PileZincPlomb);
                        }
                            if(strcmp(ProgInput,"--PileZincPlomb--\n")==0)
                        {
                            fgets(ProgInput,sizeof ProgInput,PileZincPlomb);
                            sscanf(ProgInput,"%d",&DataSize);
                        }
                            fclose(PileZincPlomb);
                            printf("\n");
                            puts("---Text File read!---");
                            PileZincPlomb=fopen("PileZincPlomb.txt","r");
                            if(PileZincPlomb!=NULL)
                        {
                            while(fgets(ProgInput,sizeof ProgInput,PileZincPlomb)!=NULL)
                            {
                                printf("%s",ProgInput);
                            }

                            fclose(PileZincPlomb);
                        }
                            printf("\n");
                            puts("---Text File write!---\n");

                            printf("Calcul du potentiel electrochimique de cette pile (equation de Nernst)\n");
                            printf("----------------------------------------------------------------------\n");
                            printf("Ereaction=Ecathode-Enode\n");
                            printf("Ecathode=E0 Pb++/Pb - (0,059/2)*log([Zn++])\n");
                            printf("Eanode=E0 Zn++/Zn - (0,059/2)*log([Pb++])\n");
                            printf("-------------------------------------------\n");
                            printf("Entrez la valeur du couple d'oxydo-reduction de Zn++/Zn compris dans le fichier precedent:");
                            scanf("%f",&Zn);
                            printf("Entrez la valeur du couple d'oxydo-reduction de Pb++/Pb compris dans le fichier precedent:");
                            scanf("%f",&Pb);
                            printf("Entrez la valeur de la concentration en Zn++:");
                            scanf("%f",&concZn);
                            printf("Entrez la valeur de la concentration en Pb++:");
                            scanf("%f",&concPb);
                            Ecathode=(Pb-(0.059/2)* log10(concZn));
                            printf("Ecathode :%f Volts\n",Ecathode);
                            Eanode=(Zn-(0.059/2)* log10(concPb));
                            printf("Eanode :%f Volts\n",Eanode);
                            EreactionPbZn=Ecathode-Eanode;
                            printf("Ereaction :%f Volts\n",EreactionPbZn);

                            if (EreactionPbZn > Ereaction)
                            {
                                Ereaction=EreactionPbZn;
                                char choixpile [10]="Pile PbZn";
                                comparaison = ajouterEnTete(comparaison, Ereaction,choixpile);
                            printf ("\n Comparaison des potentiels des differentes piles :\n");
                            afficherListe(comparaison);
                            printf("(Pile ZnPb) > ");
                            }
                            else
                            {
                                Ereaction=EreactionPbZn;
                                char choixpile [10]="Pile PbZn";
                            comparaison = ajouterEnFin(comparaison, Ereaction,choixpile);
                            printf ("\n Comparaison des potentiels des differentes piles :\n");
                            afficherListe(comparaison);
                            printf("(Pile ZnPb) > ");
                            }
                            break;

            case 5 :        printf("Pile Zinc-Argent\n");
                        printf("-------------------------\n");
                        PileZincArgent=fopen("PileZincArgent.txt","w");

                        if(PileZincArgent!=NULL)
                        {
                            fputs("--PileZincArgent--\n",PileZincArgent);
                            fputs("Eo Zn++/Zn=-0,76V\n",PileZincArgent);
                            fputs("Eo Ag+/Ag=+0,80V\n",PileZincArgent);
                            fgets(ProgInput,sizeof ProgInput, PileZincArgent);
                        }
                            if(strcmp(ProgInput,"--PileZincArgent--\n")==0)
                        {
                            fgets(ProgInput,sizeof ProgInput,PileZincArgent);
                            sscanf(ProgInput,"%d",&DataSize);
                        }
                            fclose(PileZincArgent);
                            printf("\n");
                            puts("---Text File read!---");
                            printf("\n");
                            PileZincArgent=fopen("PileZincArgent.txt","r");
                            if(PileZincArgent!=NULL)
                        {
                            while(fgets(ProgInput,sizeof ProgInput,PileZincArgent)!=NULL)
                            {
                                printf("%s",ProgInput);
                            }

                            fclose(PileZincArgent);
                        }
                            printf("\n");
                            puts("---Text File write!---\n");

                            printf("Calcul du potentiel electrochimique de cette pile (equation de Nernst)\n");
                            printf("----------------------------------------------------------------------\n");
                            printf("Ereaction=Ecathode-Enode\n");
                            printf("Ecathode=E0 Ag+/Ag - (0,059/2)*log([Ag+]^2)\n");
                            printf("Eanode=E0 Zn++/Zn - (0,059/2)*log([Zn++])\n");
                            printf("-------------------------------------------\n");
                            printf("Entrez la valeur du couple d'oxydo-reduction de Zn++/Zn compris dans le fichier precedent:");
                            scanf("%f",&Zn);
                            printf("Entrez la valeur du couple d'oxydo-reduction de Ag+/Ag compris dans le fichier precedent:");
                            scanf("%f",&Ag);
                            printf("Entrez la valeur de la concentration en Zn++\n");
                            scanf("%f",&concZn);
                            printf("Entrez la valeur de la concentration en Pb++\n");
                            scanf("%f",&concAg);
                            concAg2=pow(concAg,2);
                            Ecathode=(Ag-(0.059/2)* log10(concAg2));
                            printf("Ecathode :%f Volts\n",Ecathode);
                            Eanode=(Zn-(0.059/2)* log10(concZn));
                            printf("Eanode :%f Volts\n",Eanode);
                            EreactionAgZn=Ecathode-Eanode;
                            printf("Ereaction :%f Volts\n",EreactionAgZn);

                            if (EreactionAgZn > Ereaction)
                            {
                                Ereaction=EreactionAgZn;
                                char choixpile [10]="Pile AgZn";
                                comparaison = ajouterEnTete(comparaison, Ereaction,choixpile);
                            printf ("\n Comparaison des potentiels des differentes piles :\n");
                            afficherListe(comparaison);

                            }
                            else
                            {
                                Ereaction=EreactionAgZn;
                                char choixpile [10]="Pile AgZn";
                            comparaison = ajouterEnFin(comparaison, Ereaction,choixpile);
                            printf ("\n Comparaison des potentiels des differentes piles :\n");
                            afficherListe(comparaison);

                            }
                            break;
            case 6 :        printf("Pile Plomb-Argent\n");
                        printf("-------------------------\n");
                        PilePlombArgent=fopen("PilePlombArgent.txt","w");

                        if(PilePlombArgent!=NULL)
                        {
                            fputs("--PilePlombArgent--\n",PilePlombArgent);
                            fputs("Eo Pb++/Pb=-0,13V\n",PilePlombArgent);
                            fputs("Eo Ag+/Ag=+0,80V\n",PilePlombArgent);
                            fgets(ProgInput,sizeof ProgInput, PilePlombArgent);
                        }
                            if(strcmp(ProgInput,"--PilePlombArgent--\n")==0)
                        {
                            fgets(ProgInput,sizeof ProgInput,PilePlombArgent);
                            sscanf(ProgInput,"%d",&DataSize);
                        }
                            fclose(PilePlombArgent);
                            printf("\n");
                            puts("---Text File read!---");
                            printf("\n");
                            PilePlombArgent=fopen("PilePlombArgent.txt","r");
                            if(PilePlombArgent!=NULL)
                        {
                            while(fgets(ProgInput,sizeof ProgInput,PilePlombArgent)!=NULL)
                            {
                                printf("%s",ProgInput);
                            }

                            fclose(PilePlombArgent);
                        }
                            printf("\n");
                            puts("---Text File write!---\n");

                            printf("Calcul du potentiel electrochimique de cette pile (equation de Nernst)\n");
                            printf("----------------------------------------------------------------------\n");
                            printf("Ereaction=Ecathode-Enode\n");
                            printf("Ecathode=E0 Ag+/Ag - (0,059/2)*log([Ag+]^2)\n");
                            printf("Eanode=E0 Pb++/Pb - (0,059/2)*log([Pb++])\n");
                            printf("-------------------------------------------\n");
                            printf("Entrez la valeur du couple d'oxydo-reduction de Zn++/Zn compris dans le fichier precedent:");
                            scanf("%f",&Pb);
                            printf("Entrez la valeur du couple d'oxydo-reduction de Ag+/Ag compris dans le fichier precedent:");
                            scanf("%f",&Ag);
                            printf("Entrez la valeur de la concentration en Zn++\n");
                            scanf("%f",&concPb);
                            printf("Entrez la valeur de la concentration en Pb++\n");
                            scanf("%f",&concAg);
                            concAg2=pow(concAg,2);
                            Ecathode=(Ag-(0.059/2)* log10(concAg2));
                            printf("Ecathode :%f Volts\n",Ecathode);
                            Eanode=(Pb-(0.059/2)* log10(concPb));
                            printf("Eanode :%f Volts\n",Eanode);
                            EreactionAgPb=Ecathode-Eanode;
                            printf("Ereaction :%f Volts\n",EreactionAgPb);

                            if (EreactionAgPb > Ereaction)
                            {
                                Ereaction=EreactionAgPb;
                                char choixpile [10]="Pile AgPb";
                                comparaison = ajouterEnTete(comparaison, Ereaction,choixpile);
                            printf ("\n Comparaison des potentiels des differentes piles :\n");
                            afficherListe(comparaison);

                            }
                            else
                            {
                                Ereaction=EreactionAgPb;
                                char choixpile [10]="Pile AgPb";
                            comparaison = ajouterEnFin(comparaison, Ereaction,choixpile);
                            printf ("\n Comparaison des potentiels des differentes piles :\n");
                            afficherListe(comparaison);

                            }
                            break;
            default : printf ("choix incorrect ! \n");
        }
        printf ("\n\nContinuer (oui//non) ? ");
        scanf ("%s",cont);
    }

    while ((strcmp(cont,"oui")==0 )|| (strcmp (cont,"oui")==0));
    system("pause");
    return 0;
}




void Clean_String(char*ProgInput)
{
    char*p;
    char c  ;
    p = strchr(ProgInput,'\n');
    if(p!=NULL)
    {
        *p='\0';

    }
    else
    {
        do
        {
            c=getchar();
        }while(c!='\n');
    }
}

llist ajouterEnTete(llist liste, float Ereaction, char *choixpile)
{
    /* On crée un nouvel élément */
    element* nouvelElement = malloc(sizeof(element));

    /* On assigne la valeur au nouvel élément */
    nouvelElement->Ereaction = Ereaction;
    /* On assigne la valeur au nouvel élément */
    //nouvelElement->choixpile = choixpile;
    strcpy(nouvelElement->choixpile, choixpile);


    /* On assigne l'adresse de l'élément suivant au nouvel élément */
    nouvelElement->nxt = liste;


    /* On retourne la nouvelle liste, i.e. le pointeur sur le premier élément */
    return nouvelElement;
}

void afficherListe(llist liste)
{

    element *tmp = liste;
    /* Tant que l'on n'est pas au bout de la liste */
    while(tmp != NULL)
    {
        /* On affiche */
        printf(" > %f (%s) ", tmp->Ereaction, tmp->choixpile);
        /* On avance d'une case */
        tmp = tmp->nxt;
    }
}

llist ajouterEnFin(llist liste, float Ereaction, char *choixpile)
{
    /* On crée un nouvel élément */
    element* nouvelElement = malloc(sizeof(element));
    /* On assigne la valeur au nouvel élément */
    nouvelElement->Ereaction = Ereaction;
    /* On assigne la valeur au nouvel élément */
   // nouvelElement->choixpile = choixpile;
    strcpy(nouvelElement->choixpile, choixpile);

    /* On ajoute en fin, donc aucun élément ne va suivre */
    nouvelElement->nxt = NULL;

    if(liste == NULL)
    {
        /* Si la liste est videé il suffit de renvoyer l'élément créé */
        return nouvelElement;
    }
    else
    {
        /* Sinon, on parcourt la liste à l'aide d'un pointeur temporaire et on
        indique que le dernier élément de la liste est relié au nouvel élément */
        element* temp=liste;
        while(temp->nxt != NULL)
        {
            temp = temp->nxt;
        }
        temp->nxt = nouvelElement;

        return liste;
    }
}
0
Rejoignez-nous