Salut
J'aimerais savoir si il est possible de de faire un pointeur sur un tableau de structure. Le prof nous a donné cet exercice :
énoncé dit : Exo2 : Reprendre l’exo 2 du TD 2 pour créer le menu suivant:
1 - Chargement manuel
2 - Chargement depuis un fichier
3 - Affichage de la demi équation redox, de l’équation de Nernst, Calcul du potentiel apparent.
4 - Affichage du diagramme.
5 - Enregistrement des résultats dans un fichier.
6 - Chargement des résultats depuis un fichier sauvegardé.
Q - Quitter.
Votre choix ?
Lorsque le menu sera au point, il faudra créer la procédure pour l’option n°1 (Chargement_manuel) sous forme de fonction en s’appuyant sur le programme de l’exo précédent (demande du nombre de couples, tableau de structures…).
Je pense que cet énoncé ne vous aidera pas trop alors je vous mets le programme que j'ai fait :
#include <stdio.h>
#include <stdlib.h>
#include <math.h> //bibliothèque contenant les fonctions log, log10 et pow dont on a besoin
const double R=8.314;
const long F=96500;
struct couple
{
double pot;
char ox[10];
double C_ox;
char red[10];
double C_red;
long x1;
long x2;
long x3;
long x4;
long n;
char acide[10];
double C_acide;
char base[10];
double C_base;
double pka;
}; //ne pas oublier le point virgule apres l'accolade fermante d'une structure!!!!
void chargement_manuel(struct couple *pointeur_redox, long i)
{ //void car ne revoie aucune valeur avec la fonction return
printf("Quel est le nombre d'electrons ?\n");
scanf("%ld", pointeur_redox[i].n);
if ((*pointeur_redox).n ==0) //si couple acido-basique
{
printf("Quel est l'acide?\n");
scanf("%s", pointeur_redox[i].acide);
printf("Quel est la concentration de l'acide?\n");
scanf("%lf", pointeur_redox[i].C_acide);
printf("Quel est la base?\n");
scanf("%s", pointeur_redox[i].base);
printf("Quel est la concentration de la base?\n");
scanf("%lf", pointeur_redox[i].C_base);
printf("Quel est le pka du couple?\n");
scanf("%lf", pointeur_redox[i].pka);
}
else // sinon couple redox
{
printf("Quel est le potentiel redox?\n");
scanf("%lf", pointeur_redox[i].pot);
printf("Quel est l'oxydant? (n'oubliez pas d'indiquer la charge et sans espace)\n");
scanf("%s", pointeur_redox[i].ox);
printf("Quelle est la concentration de l'oxydant (en mol/L)?\n");
scanf("%lf", pointeur_redox[i].C_ox);
printf("Quel est le reducteur? (n'oubliez pas d'indiquer la charge et sans espace)\n");
scanf("%s", pointeur_redox[i].red);
printf("Quelle est la concentration du reducteur (en mol/L)?\n");
scanf("%lf", pointeur_redox[i].C_red);
printf("Quel est le coefficient stoechiometrique de H+ ?\n");
scanf("%ld", pointeur_redox[i].x1);
printf("Quel est le coefficient stoechiometrique de l'oxydant ?\n");
scanf("%ld", pointeur_redox[i].x2);
printf("Quel est le coefficient stoechiometrique du reducteur ?\n");
scanf("%ld", pointeur_redox[i].x3);
printf("Quel est le coefficient stoechiometrique de l'eau ?\n");
scanf("%ld", pointeur_redox[i].x4);
}
}
int main()
{
long choix, menu=1;
double T=0, var=0;
long pH=0;
while (menu)
{
printf("=== Menu ===\n\n");
printf("1. Chargement manuel\n");
printf("2. Chargement depuis un fichier\n");
printf("3. Affichage de l'equation redox et calcul du potentiel apparent\n");
printf("4. Affichage du diagramme\n");
printf("5. Enregistrement des resultats dans un fichier\n");
printf("6. Chargement des resultats depuis un fichier sauvegarde\n");
printf("7. Quitter\n");
printf("\nVotre choix : ");
scanf("%ld", &choix);
printf("\n");
switch (choix)
{
case 1:
printf("\n === Chargement manuel ===\n\n");
long i=0, j=0;
printf ("Quel est le nombre de couples? : ");
scanf ("%ld", &j);
printf ("Quelle est la temperature? : ");
scanf ("%lf", &T);
var = (R*T*log(10))/F;
struct couple redox[j]; // creation d'un tableau de structure.
for (i=0;i<=j-1;i++)
{
printf("\n== Parametres pour le couple numero %ld ==\n",i+1);
chargement_manuel(&redox[i], i);
//verification;
if (redox[i].n == 0)
{
printf("l'acide est %s, la base est %s et le pka du couple est %.2lf\n", redox[i].acide, redox[i].base, redox[i].pka);
}
else
{
printf("l'oxydant est %s, le reducteur est %s et coefficient de l'eau est %ld\n", redox[i].ox, redox[i].red, redox[i].x4);
}
}
break ;
case 2:
printf("\n === Chargement depuis un fichier ===\n\n");
break;
case 3:
printf("\n === Affichage de la demi equation redox et calcul du potentiel apparent ===\n\n");
break;
case 4:
printf("\n === Affichage du diagramme ===\n\n");
break;
case 5:
printf("\n === Enregistrement des resultats dans un fichier ===\n\n");
break;
case 6:
printf("\n === Chargement des resultats depuis un fichier sauvegarde ===\n\n");
break;
case 7:
printf("\n === Quitter ===\n\n");
menu=0;
break;
default:
printf("\nVotre choix n'est pas correct.\n");
break;
}
printf("\n\n");
}
system("PAUSE");
}
J'aimerais savoir si il possible de le faire avec un pointeur sur le tableau de structures? J'ai écris ce code mais il ne marche pas et je ne sais pas comment faire...
#include <stdio.h>
#include <stdlib.h>
#include <math.h> //bibliothèque contenant les fonctions log, log10 et pow dont on a besoin
const double R=8.314;
const long F=96500;
struct couple
{
double pot;
char ox[10];
double C_ox;
char red[10];
double C_red;
long x1;
long x2;
long x3;
long x4;
long n;
char acide[10];
double C_acide;
char base[10];
double C_base;
double pka;
}; //ne pas oublier le point virgule apres l'accolade fermante d'une structure!!!!
void chargement_manuel(struct couple *pointeur_redox, long i)
{ //void car ne revoie aucune valeur avec la fonction return
printf("Quel est le nombre d'electrons ?\n");
scanf("%ld", pointeur_redox[i].n);
if ((*pointeur_redox).n ==0) //si couple acido-basique
{
printf("Quel est l'acide?\n");
scanf("%s", pointeur_redox[i].acide);
printf("Quel est la concentration de l'acide?\n");
scanf("%lf", pointeur_redox[i].C_acide);
printf("Quel est la base?\n");
scanf("%s", pointeur_redox[i].base);
printf("Quel est la concentration de la base?\n");
scanf("%lf", pointeur_redox[i].C_base);
printf("Quel est le pka du couple?\n");
scanf("%lf", pointeur_redox[i].pka);
}
else // sinon couple redox
{
printf("Quel est le potentiel redox?\n");
scanf("%lf", pointeur_redox[i].pot);
printf("Quel est l'oxydant? (n'oubliez pas d'indiquer la charge et sans espace)\n");
scanf("%s", pointeur_redox[i].ox);
printf("Quelle est la concentration de l'oxydant (en mol/L)?\n");
scanf("%lf", pointeur_redox[i].C_ox);
printf("Quel est le reducteur? (n'oubliez pas d'indiquer la charge et sans espace)\n");
scanf("%s", pointeur_redox[i].red);
printf("Quelle est la concentration du reducteur (en mol/L)?\n");
scanf("%lf", pointeur_redox[i].C_red);
printf("Quel est le coefficient stoechiometrique de H+ ?\n");
scanf("%ld", pointeur_redox[i].x1);
printf("Quel est le coefficient stoechiometrique de l'oxydant ?\n");
scanf("%ld", pointeur_redox[i].x2);
printf("Quel est le coefficient stoechiometrique du reducteur ?\n");
scanf("%ld", pointeur_redox[i].x3);
printf("Quel est le coefficient stoechiometrique de l'eau ?\n");
scanf("%ld", pointeur_redox[i].x4);
}
}
int main()
{
long choix, menu=1;
double T=0, var=0;
long pH=0;
while (menu)
{
printf("=== Menu ===\n\n");
printf("1. Chargement manuel\n");
printf("2. Chargement depuis un fichier\n");
printf("3. Affichage de l'equation redox et calcul du potentiel apparent\n");
printf("4. Affichage du diagramme\n");
printf("5. Enregistrement des resultats dans un fichier\n");
printf("6. Chargement des resultats depuis un fichier sauvegarde\n");
printf("7. Quitter\n");
printf("\nVotre choix : ");
scanf("%ld", &choix);
printf("\n");
switch (choix)
{
case 1:
printf("\n === Chargement manuel ===\n\n");
long i=0, j=0;
printf ("Quel est le nombre de couples? : ");
scanf ("%ld", &j);
printf ("Quelle est la temperature? : ");
scanf ("%lf", &T);
var = (R*T*log(10))/F;
struct couple redox[j]; // creation d'un tableau de structure.
for (i=0;i<=j-1;i++)
{
printf("\n== Parametres pour le couple numero %ld ==\n",i+1);
chargement_manuel(&redox[i], i);
//verification;
if (redox[i].n == 0)
{
printf("l'acide est %s, la base est %s et le pka du couple est %.2lf\n", redox[i].acide, redox[i].base, redox[i].pka);
}
else
{
printf("l'oxydant est %s, le reducteur est %s et coefficient de l'eau est %ld\n", redox[i].ox, redox[i].red, redox[i].x4);
}
}
break ;
case 2:
printf("\n === Chargement depuis un fichier ===\n\n");
break;
case 3:
printf("\n === Affichage de la demi equation redox et calcul du potentiel apparent ===\n\n");
break;
case 4:
printf("\n === Affichage du diagramme ===\n\n");
break;
case 5:
printf("\n === Enregistrement des resultats dans un fichier ===\n\n");
break;
case 6:
printf("\n === Chargement des resultats depuis un fichier sauvegarde ===\n\n");
break;
case 7:
printf("\n === Quitter ===\n\n");
menu=0;
break;
default:
printf("\nVotre choix n'est pas correct.\n");
break;
}
printf("\n\n");
}
system("PAUSE");
}
Je te fais quelques modifications (j'ai pas pu tester par contre donc j'espère ne pas m'être planté xD) donc tu peux tester ça :
#include <stdio.h>
#include <stdlib.h>
#include <math.h> //bibliothèque contenant les fonctions log, log10 et pow dont on a besoin
const double R=8.314;
const long F=96500;
struct couple
{
double pot;
char ox[10];
double C_ox;
char red[10];
double C_red;
long x1;
long x2;
long x3;
long x4;
long n;
char acide[10];
double C_acide;
char base[10];
double C_base;
double pka;
}; //ne pas oublier le point virgule apres l'accolade fermante d'une structure!!!!
void chargement_manuel(struct couple *pointeur_redox, long i)
{ //void car ne revoie aucune valeur avec la fonction return
printf("Quel est le nombre d'electrons ?\n");
scanf("%ld", pointeur_redox[i].n);
if ((*pointeur_redox).n ==0) //si couple acido-basique
{
printf("Quel est l'acide?\n");
scanf("%s", pointeur_redox[i].acide);
printf("Quel est la concentration de l'acide?\n");
scanf("%lf", pointeur_redox[i].C_acide);
printf("Quel est la base?\n");
scanf("%s", pointeur_redox[i].base);
printf("Quel est la concentration de la base?\n");
scanf("%lf", pointeur_redox[i].C_base);
printf("Quel est le pka du couple?\n");
scanf("%lf", pointeur_redox[i].pka);
}
else // sinon couple redox
{
printf("Quel est le potentiel redox?\n");
scanf("%lf", pointeur_redox[i].pot);
printf("Quel est l'oxydant? (n'oubliez pas d'indiquer la charge et sans espace)\n");
scanf("%s", pointeur_redox[i].ox);
printf("Quelle est la concentration de l'oxydant (en mol/L)?\n");
scanf("%lf", pointeur_redox[i].C_ox);
printf("Quel est le reducteur? (n'oubliez pas d'indiquer la charge et sans espace)\n");
scanf("%s", pointeur_redox[i].red);
printf("Quelle est la concentration du reducteur (en mol/L)?\n");
scanf("%lf", pointeur_redox[i].C_red);
printf("Quel est le coefficient stoechiometrique de H+ ?\n");
scanf("%ld", pointeur_redox[i].x1);
printf("Quel est le coefficient stoechiometrique de l'oxydant ?\n");
scanf("%ld", pointeur_redox[i].x2);
printf("Quel est le coefficient stoechiometrique du reducteur ?\n");
scanf("%ld", pointeur_redox[i].x3);
printf("Quel est le coefficient stoechiometrique de l'eau ?\n");
scanf("%ld", pointeur_redox[i].x4);
}
}
int main()
{
long choix, menu=1;
double T=0, var=0;
long pH=0;
while (menu)
{
printf("=== Menu ===\n\n");
printf("1. Chargement manuel\n");
printf("2. Chargement depuis un fichier\n");
printf("3. Affichage de l'equation redox et calcul du potentiel apparent\n");
printf("4. Affichage du diagramme\n");
printf("5. Enregistrement des resultats dans un fichier\n");
printf("6. Chargement des resultats depuis un fichier sauvegarde\n");
printf("7. Quitter\n");
printf("\nVotre choix : ");
scanf("%ld", &choix);
printf("\n");
long i=0, j=0;
switch (choix)
{
case 1:
printf("\n === Chargement manuel ===\n\n");
printf ("Quel est le nombre de couples? : ");
scanf ("%ld", &j);
printf ("Quelle est la temperature? : ");
scanf ("%lf", &T);
var = (R*T*log(10))/F;
struct couple* redox = (struct couple*)malloc(j*sizeof *redox);; // creation d'un tableau de structure.
for (i=0;i<=j-1;i++)
{
printf("\n== Parametres pour le couple numero %ld ==\n",i+1);
chargement_manuel(redox, i);
//verification;
if (redox[i].n == 0)
printf("l'acide est %s, la base est %s et le pka du couple est %.2lf\n", redox[i].acide, redox[i].base, redox[i].pka);
else
printf("l'oxydant est %s, le reducteur est %s et coefficient de l'eau est %ld\n", redox[i].ox, redox[i].red, redox[i].x4);
}
break ;
case 2:
printf("\n === Chargement depuis un fichier ===\n\n");
break;
case 3:
printf("\n === Affichage de la demi equation redox et calcul du potentiel apparent ===\n\n");
break;
case 4:
printf("\n === Affichage du diagramme ===\n\n");
break;
case 5:
printf("\n === Enregistrement des resultats dans un fichier ===\n\n");
break;
case 6:
printf("\n === Chargement des resultats depuis un fichier sauvegarde ===\n\n");
break;
case 7:
printf("\n === Quitter ===\n\n");
menu=0;
break;
default:
printf("\nVotre choix n'est pas correct.\n");
break;
}
printf("\n\n");
}
system("PAUSE");
}
En fait je pense que le problème c'est que tu envoyais qu'une case de ton tableau de couple... de plus j'ai fait une allocation dynamique... c'est plus propre dans ce cas.
__________________________
............ Curtis: RTS 3D .............. ......
........... TeamMoteurProg...........
salut
merci pour ta reponse!
Ton programme plante quand il me demande le nombre d'electrons.
De plus, je suis etudiant en chimie,la programmation n'est qu'un module de 30h donc le cours de programmation n'est pas poussé (tu as dû t'en rendre compte en voyant le code), on ne va donc pas voir l'allocution dynamique, ce n'est pas possible de faire sans?
merci
autant pour moi je n'avais pas fait attention au contenu de la fonction chargement_manuel();
Je pense que en changeant ainsi :
#include <stdio.h>
#include <stdlib.h>
#include <math.h> //bibliothèque contenant les fonctions log, log10 et pow dont on a besoin
const double R=8.314;
const long F=96500;
struct couple
{
double pot;
char ox[10];
double C_ox;
char red[10];
double C_red;
long x1;
long x2;
long x3;
long x4;
long n;
char acide[10];
double C_acide;
char base[10];
double C_base;
double pka;
}; //ne pas oublier le point virgule apres l'accolade fermante d'une structure!!!!
void chargement_manuel(struct couple *pointeur_redox, long i)
{ //void car ne revoie aucune valeur avec la fonction return
printf("Quel est le nombre d'electrons ?\n");
scanf("%ld", pointeur_redox[i].n);
if (pointeur_redox[i].n ==0) //si couple acido-basique
{
printf("Quel est l'acide?\n");
scanf("%s", pointeur_redox[i].acide);
printf("Quel est la concentration de l'acide?\n");
scanf("%lf", pointeur_redox[i].C_acide);
printf("Quel est la base?\n");
scanf("%s", pointeur_redox[i].base);
printf("Quel est la concentration de la base?\n");
scanf("%lf", pointeur_redox[i].C_base);
printf("Quel est le pka du couple?\n");
scanf("%lf", pointeur_redox[i].pka);
}
else // sinon couple redox
{
printf("Quel est le potentiel redox?\n");
scanf("%lf", pointeur_redox[i].pot);
printf("Quel est l'oxydant? (n'oubliez pas d'indiquer la charge et sans espace)\n");
scanf("%s", pointeur_redox[i].ox);
printf("Quelle est la concentration de l'oxydant (en mol/L)?\n");
scanf("%lf", pointeur_redox[i].C_ox);
printf("Quel est le reducteur? (n'oubliez pas d'indiquer la charge et sans espace)\n");
scanf("%s", pointeur_redox[i].red);
printf("Quelle est la concentration du reducteur (en mol/L)?\n");
scanf("%lf", pointeur_redox[i].C_red);
printf("Quel est le coefficient stoechiometrique de H+ ?\n");
scanf("%ld", pointeur_redox[i].x1);
printf("Quel est le coefficient stoechiometrique de l'oxydant ?\n");
scanf("%ld", pointeur_redox[i].x2);
printf("Quel est le coefficient stoechiometrique du reducteur ?\n");
scanf("%ld", pointeur_redox[i].x3);
printf("Quel est le coefficient stoechiometrique de l'eau ?\n");
scanf("%ld", pointeur_redox[i].x4);
}
}
int main()
{
long choix, menu=1;
double T=0, var=0;
long pH=0;
while (menu)
{
printf("=== Menu ===\n\n");
printf("1. Chargement manuel\n");
printf("2. Chargement depuis un fichier\n");
printf("3. Affichage de l'equation redox et calcul du potentiel apparent\n");
printf("4. Affichage du diagramme\n");
printf("5. Enregistrement des resultats dans un fichier\n");
printf("6. Chargement des resultats depuis un fichier sauvegarde\n");
printf("7. Quitter\n");
printf("\nVotre choix : ");
scanf("%ld", &choix);
printf("\n");
long i=0, j=0;
switch (choix)
{
case 1:
printf("\n === Chargement manuel ===\n\n");
printf ("Quel est le nombre de couples? : ");
scanf ("%ld", &j);
printf ("Quelle est la temperature? : ");
scanf ("%lf", &T);
var = (R*T*log(10))/F;
struct couple redox [j]; // creation d'un tableau de structure.
for (i=0;i<=j-1;i++)
{
printf("\n== Parametres pour le couple numero %ld ==\n",i+1);
chargement_manuel(redox, i);
//verification;
if (redox[i].n == 0)
printf("l'acide est %s, la base est %s et le pka du couple est %.2lf\n", redox[i].acide, redox[i].base, redox[i].pka);
else
printf("l'oxydant est %s, le reducteur est %s et coefficient de l'eau est %ld\n", redox[i].ox, redox[i].red, redox[i].x4);
}
break ;
case 2:
printf("\n === Chargement depuis un fichier ===\n\n");
break;
case 3:
printf("\n === Affichage de la demi equation redox et calcul du potentiel apparent ===\n\n");
break;
case 4:
printf("\n === Affichage du diagramme ===\n\n");
break;
case 5:
printf("\n === Enregistrement des resultats dans un fichier ===\n\n");
break;
case 6:
printf("\n === Chargement des resultats depuis un fichier sauvegarde ===\n\n");
break;
case 7:
printf("\n === Quitter ===\n\n");
menu=0;
break;
default:
printf("\nVotre choix n'est pas correct.\n");
break;
}
printf("\n\n");
}
system("PAUSE");
}
ça devrait le faire ;) faudrait tester ;)
P.S. pour l'allocation dynamique ce n'est pas nécessaire mais conseillé...
__________________________
............ Curtis: RTS 3D .............. ......
........... TeamMoteurProg...........
pas de problème... à la semaine prochaine ;)
__________________________
............ Curtis: RTS 3D .............. ......
........... TeamMoteurProg...........
je ne sais pas si c'est possible mais il serait plus simple de faire la fonction chargement_manuel en lui disant de renvoyer au int(main) directement la structure avec la commande return mais lors de la déclaration de la fonction, il faut lui indiquer en type le type de ce que l'on renvoie; c-a-d ici une structure mais on ne peut pas écrire :
struct chargement_manuel(struct couple redox) // type struct n'existe pas pour les fonctions!!!
{
printf("Quel est le nombre d'electrons ?\n");
scanf("%ld", &redox.n);
if (redox.n ==0) //si couple acido-basique
{
printf("Quel est l'acide?\n");
scanf("%s", &redox.acide);
printf("Quel est la concentration de l'acide?\n");
scanf("%lf", &redox.acide);
printf("Quel est la base?\n");
scanf("%s", &redox.base);
printf("Quel est la concentration de la base?\n");
scanf("%lf", &redox.base);
printf("Quel est le pka du couple?\n");
scanf("%lf", &redox.pka);
}
else // sinon couple redox
{
printf("Quel est le potentiel redox?\n");
scanf("%lf", &redox.pot);
printf("Quel est l'oxydant? (n'oubliez pas d'indiquer la charge et sans espace)\n");
scanf("%s", redox.ox);
printf("Quelle est la concentration de l'oxydant (en mol/L)?\n");
scanf("%lf", &redox.C_ox);
printf("Quel est le reducteur? (n'oubliez pas d'indiquer la charge et sans espace)\n");
scanf("%s", redox.red);
printf("Quelle est la concentration du reducteur (en mol/L)?\n");
scanf("%lf", &redox.C_red);
printf("Quel est le coefficient stoechiometrique de H+ ?\n");
scanf("%ld", &redox.x1);
printf("Quel est le coefficient stoechiometrique de l'oxydant ?\n");
scanf("%ld", &redox.x2);
printf("Quel est le coefficient stoechiometrique du reducteur ?\n");
scanf("%ld", &redox.x3);
printf("Quel est le coefficient stoechiometrique de l'eau ?\n");
scanf("%ld", &redox.x4);
}
return redox;
}
c'est une simple question que je me pose pendant mes vacances...
as-tu essayé : struct couple chargement_manuel(struct couple redox){...}
Je pense que ça peut marcher : tu vas ensuite retourner une variable struct couple alors...
__________________________
............ Curtis: RTS 3D .............. ......
........... TeamMoteurProg...........
salut
j'ai essayé ça mais ça ne marche pas, la compile est bonne mais lors du printf("l'oxydant est %s, le reducteur est %s et coefficient de l'eau est ld\n", redox[i].ox, redox[i].red, redox[i].x4); il m'ecrit n'importe quoi.
#include <stdio.h>
#include <stdlib.h>
#include <math.h> //bibliothèque contenant les fonctions log, log10 et pow dont on a besoin
const double R=8.314;
const long F=96500;
struct couple
{
double pot;
char ox[10];
double C_ox;
char red[10];
double C_red;
long x1;
long x2;
long x3;
long x4;
long n;
char acide[10];
double C_acide;
char base[10];
double C_base;
double pka;
};
struct couple chargement_manuel(struct couple redox)
{
printf("Quel est le nombre d'electrons ?\n");
scanf("%ld", &redox.n);
if (redox.n ==0) //si couple acido-basique
{
printf("Quel est l'acide?\n");
scanf("%s", &redox.acide);
printf("Quel est la concentration de l'acide?\n");
scanf("%lf", &redox.acide);
printf("Quel est la base?\n");
scanf("%s", &redox.base);
printf("Quel est la concentration de la base?\n");
scanf("%lf", &redox.base);
printf("Quel est le pka du couple?\n");
scanf("%lf", &redox.pka);
}
else // sinon couple redox
{
printf("Quel est le potentiel redox?\n");
scanf("%lf", &redox.pot);
printf("Quel est l'oxydant? (n'oubliez pas d'indiquer la charge et sans espace)\n");
scanf("%s", redox.ox);
printf("Quelle est la concentration de l'oxydant (en mol/L)?\n");
scanf("%lf", &redox.C_ox);
printf("Quel est le reducteur? (n'oubliez pas d'indiquer la charge et sans espace)\n");
scanf("%s", redox.red);
printf("Quelle est la concentration du reducteur (en mol/L)?\n");
scanf("%lf", &redox.C_red);
printf("Quel est le coefficient stoechiometrique de H+ ?\n");
scanf("%ld", &redox.x1);
printf("Quel est le coefficient stoechiometrique de l'oxydant ?\n");
scanf("%ld", &redox.x2);
printf("Quel est le coefficient stoechiometrique du reducteur ?\n");
scanf("%ld", &redox.x3);
printf("Quel est le coefficient stoechiometrique de l'eau ?\n");
scanf("%ld", &redox.x4);
}
return redox;
}
int main()
{
long choix, menu=1;
double T=0, var=0;
long pH=0;
while (menu)
{
printf("=== Menu ===\n\n");
printf("1. Chargement manuel\n");
printf("2. Chargement depuis un fichier\n");
printf("3. Affichage de l'equation redox et calcul du potentiel apparent\n");
printf("4. Affichage du diagramme\n");
printf("5. Enregistrement des resultats dans un fichier\n");
printf("6. Chargement des resultats depuis un fichier sauvegarde\n");
printf("7. Quitter\n");
printf("\nVotre choix : ");
scanf("%ld", &choix);
printf("\n");
switch (choix)
{
case 1:
printf("\n === Chargement manuel ===\n\n");
long i=0, j=0;
printf ("Quel est le nombre de couples? : ");
scanf ("%ld", &j);
printf ("Quelle est la temperature? : ");
scanf ("%lf", &T);
var = (R*T*log(10))/F;
struct couple redox[5]; // creation d'un tableau de structure.
for (i=0;i<=j-1;i++)
{
printf("\n== Parametres pour le couple numero %ld ==\n",i+1);
chargement_manuel(redox[i]);
//verification;
if (redox[i].n == 0)
{
printf("l'acide est %s, la base est %s et le pka du couple est %.2lf\n", redox[i].acide, redox[i].base, redox[i].pka);
}
else
{
printf("l'oxydant est %s, le reducteur est %s et coefficient de l'eau est ld\n", redox[i].ox, redox[i].red, redox[i].x4);
}
}
break;
case 2:
printf("\n === Chargement depuis un fichier ===\n\n");
break;
case 3:
printf("\n === Affichage de la demi equation redox et calcul du potentiel apparent ===\n\n");
break;
case 4:
printf("\n === Affichage du diagramme ===\n\n");
break;
case 5:
printf("\n === Enregistrement des resultats dans un fichier ===\n\n");
break;
case 6:
printf("\n === Chargement des resultats depuis un fichier sauvegarde ===\n\n");
break;
case 7:
printf("\n === Quitter ===\n\n");
menu=0;
break;
default:
printf("\nVotre choix n'est pas correct.\n");
break;
}
printf("\n\n");
}
system("PAUSE");
}