Closed PBYetml closed 1 year ago
Comme indiqué pour les commentaires du .h, j'ai retiré le struct qui ne devait pas être dans mes paramètres d'entrée de ma fonction, car la structure est définie dans le .h j'aurai du donc l'écrire de cette manière :
void InitInfoPontDiviseur(str_pontDiviseur* pt_demoPontDiv)
pour ma première fonction, j'avais mal compris l'énoncé, j'ai donc rajouté mon scanf permettant de récupéré la valeur entrée par l'utilisateur, mais également de pouvoir vérifier que celle-ci soit bien un chiffre et non un mot.
voici la première fonction correcte :
void InitInfoPontDiviseur(str_pontDiviseur* pt_demoPontDiv) { int retourScanF = 0; int valeurUtilisateur;
do
{
printf("Veuillez inserer le nombre de resistances possible dans votre pont diviseur : ");
retourScanF = scanf_s("%d", &valeurUtilisateur);
while ((getchar() != '\n') && (getchar() != EOF));
if (retourScanF == 0)
{
printf("!!! ERREUR !!! \n");
}
} while (retourScanF == 0);
if (valeurUtilisateur > NB_MAX_RESISTANCES)
{
printf("la valeur minimum est de %d resistance, le nombre de resistance va etre ajuste a %d\n\n", NB_MAX_RESISTANCES, NB_MAX_RESISTANCES);
valeurUtilisateur = NB_MAX_RESISTANCES;
}
else if (valeurUtilisateur <= 0)
{
printf("la valeur minimum est de 1 resistance, le nombre de resistance va etre ajuste a 1\n\n");
valeurUtilisateur = 1;
}
pt_demoPontDiv->nbResistances = valeurUtilisateur; //Stock la valeur de valeurUtilisateur dans la struc dans la variable nbResistances
int indexResistance; //variable pour la boucle for
for (indexResistance = 0; indexResistance < valeurUtilisateur; indexResistance++)
{
printf("Veuillez inserer une valeur de resistance allant de %1.1lf a %.0lfMohm pour R%d: ", VALEUR_MIN_RESISTANCE, VALEUR_MAX_RESISTANCE / 10e6, indexResistance + 1);
retourScanF = scanf_s("%lf", &pt_demoPontDiv->tb_valResistances[indexResistance]); // modifie les valeurs du tableau valReistance à la première itération ce sera la case0, la 2ème case1, etc..
//-- s'assure que le buffer est vidé pour refaire une nouvelle demande --//
while ((getchar() != '\n') && (getchar() != EOF));
if (retourScanF == 0 || pt_demoPontDiv->tb_valResistances[indexResistance] < VALEUR_MIN_RESISTANCE || pt_demoPontDiv->tb_valResistances[indexResistance] > VALEUR_MAX_RESISTANCE)
{
printf("!!! Erreur de valeur !!! \n");
indexResistance--; //retourne dans la boucle for avec avec la valeur avant le message d'erreur, répètera la même itération de la boucle
}
}
printf("\n");
do { printf("Veuillez inserer la tension d'alimentation du montage : "); retourScanF = scanf_s("%d", &valeurUtilisateur); while ((getchar() != '\n') && (getchar() != EOF)); if (retourScanF == 0) { printf("!!! ERREUR !!! \n"); } } while (retourScanF == 0); printf("\n");
if (valeurUtilisateur > TENSION_MAX_PONTDIV)
{
printf("la valeur maximum de tension autorisee est de %d[V], la tension va etre ajustee a %d\n\n", TENSION_MAX_PONTDIV, TENSION_MAX_PONTDIV);
valeurUtilisateur = TENSION_MAX_PONTDIV;
}
else if (valeurUtilisateur < 1)
{
printf("la valeur minimum de tension autorisee est de %d[V], la tension va etre ajustee\n\n", TENSION_MAX_PONTDIV);
valeurUtilisateur = 1;
}
pt_demoPontDiv->tensionAlimVe = valeurUtilisateur; //Stock la valeur dans la variable tensionAlimVe
}
ma deuxième fonction est également fausse, car je n'avais pas compris la donnée. j'ai cru qu'on devait refaire la même fonction que la première.
voici ce que j'aurai du faire :
void CalculTensionPontDiviseur(str_pontDiviseur* pt_demoPontDiv)
{
double sommeResistances = 0; //correspond à mon diviseur
int indexResistances;
for (indexResistances = 0; indexResistances < pt_demoPontDiv->nbResistances; indexResistances++)
{
sommeResistances = pt_demoPontDiv->tb_valResistances[indexResistances] + sommeResistances;
}
int u; //Index
double tensionBorneResistance; //variable pour VpontRu
for (u = 0; u < pt_demoPontDiv->nbResistances; u++)
{
tensionBorneResistance = pt_demoPontDiv->tensionAlimVe * (pt_demoPontDiv->tb_valResistances[u] / sommeResistances); //tensionResistanceU = VpontRu
pt_demoPontDiv->tb_tensionAuBornes[u] = tensionBorneResistance;
}
int indexTension;
double resistances = sommeResistances;
for (indexTension = 0; indexTension < pt_demoPontDiv->nbResistances; indexTension++)
{
resistances -= pt_demoPontDiv->tb_valResistances[indexTension]; //la variable résistance correspond aux résistance qui seront au numérateur de la formule
pt_demoPontDiv->tb_tentionEntreResistances[indexTension] = pt_demoPontDiv->tensionAlimVe * (resistances / sommeResistances); //Calcul du pont diviseur
}
}
Pour ma dernière fonction je n'avais pas écris avec la forme scientifique, de plus je lisais la valeur aux bornes des résistances, j'ai rajouté un complément pour connaitre la tension entre les résistances. De plus j'ai rajouté la tension GND pour connaitre le sens des tensions :
void AffichageTensionPontDiviseur(str_pontDiviseur demoPontDiv) { int indexResistance; int indexTensionVs; for (indexResistance = 0; indexResistance < demoPontDiv.nbResistances; indexResistance++) { printf("Tension sur la resistance R%d vaut %.2e[V]\n", indexResistance + 1, demoPontDiv.tb_tensionAuBornes[indexResistance]); } printf("\n");
for (indexTensionVs = 0; indexTensionVs < demoPontDiv.nbResistances; indexTensionVs++)
{
if (((demoPontDiv.nbResistances - 1) - indexTensionVs) == 0)
{
printf("Tension sur la tension GND vaut %.2e[V]\n", demoPontDiv.tb_tentionEntreResistances[indexTensionVs]);
}
else
{
printf("Tension sur la tension VS%d vaut %.2e[V]\n", ((demoPontDiv.nbResistances - 1) - indexTensionVs), demoPontDiv.tb_tentionEntreResistances[indexTensionVs]);
}
}
}
OKI, bien pour l'adaptation et l'amélioration du code !!!
voici un listing des points à améliorer/corriger dans le fichier
fonctionPontDiv.c
=> voir fichier vidéo lien vidéo