Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question#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; } }