Aide pour programmer en c

Signaler
Messages postés
2
Date d'inscription
mardi 15 avril 2008
Statut
Membre
Dernière intervention
15 avril 2008
-
Messages postés
2
Date d'inscription
mardi 15 avril 2008
Statut
Membre
Dernière intervention
15 avril 2008
-
Bonjour

Voila un exercice que j'ai réalisé mais que je n'arrive pas à finir. Quelqu'un pourrait-il m'aider.
Donc c'est un programme qui permet à un utilisateur de rentré une valeur d'une résistance et ce programme va l'informé comment il doit monter ces résistances (parallèle ou série) en fonction de ce qu'il dispose en stock.

Mon problème est donc que je n'arrive pas à insérer cette fonction dans mon programme :

"Pour les résistances disponibles on peut considérer avoir à disposition un assortiment de résistance de la série E12. En effet, il existe plusieurs série de résistances, en fonction de leur précision. Les plus répandues sont la E12 et la E24. Les tolérances sont de 10% pour la série E12 et 5% pour la série E24, E12 signifie que sur une décades (par ex : 10 à 100 ohms), on trouve 12 valeurs possibles. Ces valeurs sont : 10 - 12 - 15 - 18 - 22 - 27- 33 - 39 - 47 - 56 - 68- 82 ohms.
Pour les résistances dons la valeur est comprise entre 100k et 1000k nous aurons : 100 - 120 - 150 - 180 - 220 - 270 - 330 -390 - 470 - 560 - 680 - 820 ohms. "

Voici le programme :








#include <stdio.h>

<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>












#include <stdlib.h>













#include <math.h>

















 
typedef


enum
TYPE_MONTAGE










{ SERIE, PARALLELE }









TypeMontage;









 









void
triBulle (
int
*tableau,
int
nbElems)










{










  

int
curseur = nbElems -
1
;











  

int
tmp;










 










  

while
(curseur >
0
)











   {










     

int
index =
0
;











     

while
(index < curseur)











      {










        

if
(tableau[index] > tableau[index +
1
])











         {










            tmp = tableau[index +
1
];











            tableau[index +
1
] = tableau[index];











            tableau[index] = tmp;










         }










         index++;










      }










      curseur--;










  

}










}









 
int
trouveMeilleureAssociation (
int
*resistances,
int
nbResistances,
int
valeurRecherchee,











                                 TypeMontage * typeMontage,
int
resultat[])










{










  

int
curseur1 =
0
;











  

int
curseur2 = curseur1 +
1
;











  

int
meilleureValeur =
0
;











  

int
trouve =
0
;











  

int
continuer =
1
;










 










  

while
(curseur1 < nbResistances -
1
)











   {










     

while
(continuer && curseur2 < nbResistances)











      {










        

int
valeurSerie = resistances[curseur1] + resistances[curseur2];











        

int
valeurParallele = (resistances[curseur1] * resistances[curseur2]) / (resistances[curseur1] + resistances[curseur2])










 










        

if
((meilleureValeur ==
0
|| valeurSerie < meilleureValeur)











             && valeurSerie >= valeurRecherchee)










         {










        
   meilleureValeur = valeurSerie;










            *typeMontage = SERIE;










            resultat[
0
] = resistances[curseur1];











            resultat[
1
] = resistances[curseur2];











            trouve =
1
;











         }









 










        

if
((meilleureValeur ==
0
|| valeurParallele < meilleureValeur)











             && valeurParallele >= valeurRecherchee)










         {










            meilleureValeur = valeurParallele;










            *typeMontage = PARALLELE;










            resultat[
0
] = resistances[curseur1];











            resultat[
1
] = resistances[curseur2];











            trouve =
1
;











         } 










        

/* Inutile de continuer à parcourir le tableau, on ne trouvera pas mieux */














        

if
(valeurSerie >= valeurRecherchee











             && valeurParallele >= valeurRecherchee)










         {










            continuer =
0
;











         }










        

else














            curseur2++;










      }









       curseur1++;










      curseur2 = curseur1 +
1
;











      continuer =
1
;











   }









   
return
trouve;










}









 









int
main (
void
)










{










  

int
nbResistances =
0
;











   printf (
"Nombre de resistances en stock : "
);











   scanf (
"%d"
, &nbResistances);










 










  

int
*resistances = (
int
*) malloc (nbResistances *
sizeof
(
int
));











  

int
i;











  

for
(i =
0
; i < nbResistances; i++)











  

{











      printf (
"
\n
Saisir valeur résistance %d : "
, i);











     

scanf (
"%d"
, &resistances[i]);











 
 

}










 










  

int
valeurSouhaitee =
0
;











   printf (
"
\n
Valeur souhaitée : "
);











   scanf (
"%d"
, &valeurSouhaitee);










 










   triBulle (resistances, nbResistances);









 










   TypeMontage typeMontage;










 

int
resultat[
2
];











   

int

  ok=trouveMeilleureAssociation (resistances, nbResistances, valeurSouhaitee,











                                 

&typeMontage, resultat);










   
if
(ok)











  

{











     

char


const
*montage typeMontage SERIE ?
"série"
:
"paralèlle"
;











      printf (
"Les deux meilleurs résistances sont R1=%d et R2=%d lorsqu'elles sont montées en %s"
, resultat[
0
], resultat[
1
], montage);











   }










  

else














      printf (
"Aucune association de résistances n'a pu être trouvée"
);










    getchar (); 










  

return


0
;









}

2 réponses

Messages postés
338
Date d'inscription
samedi 3 février 2007
Statut
Membre
Dernière intervention
4 janvier 2011

Bonjour,

Ton code ne contient que des ligne vide? Oo

SI c'est le cas c'est normal que cela ne fonctionne pas... :)

-------------------------------------------------------------------
La recherche est ton amie ! Promis elle ne te mordra pas...
Enjoy
Don't forget accept
Messages postés
2
Date d'inscription
mardi 15 avril 2008
Statut
Membre
Dernière intervention
15 avril 2008

Non il devrait fonctionner.
Je l'ai juste mal inséré dans le forum.
Voila le programme :

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
typedef enum TYPE_MONTAGE
{ SERIE, PARALLELE }
TypeMontage;
 
void triBulle (int *tableau, int nbElems)
{
   int curseur = nbElems - 1;
   int tmp;
 
   while (curseur > 0)
   {
      int index = 0;
      while (index < curseur)
      {
         if (tableau[index] > tableau[index + 1])
         {
            tmp = tableau[index + 1];
            tableau[index + 1] = tableau[index];
            tableau[index] = tmp;
         }
         index++;
      }
      curseur--;
   }
}
 
int trouveMeilleureAssociation (int *resistances, int nbResistances,
                                 int valeurRecherchee,
                                 TypeMontage * typeMontage, int resultat[])
{
   int curseur1 = 0;
   int curseur2 = curseur1 + 1;
   int meilleureValeur = 0;
   int trouve = 0;
   int continuer = 1;
 
   while (curseur1 < nbResistances - 1)
   {
      while (continuer && curseur2 < nbResistances)
      {
         int valeurSerie = resistances[curseur1] + resistances[curseur2];
         int valeurParallele = (resistances[curseur1]*resistances[curseur2])/(resistances[curseur1] + resistances[curseur2]);
  
         if ((meilleureValeur == 0 || valeurSerie < meilleureValeur)
             && valeurSerie >= valeurRecherchee)
         {
            meilleureValeur = valeurSerie;
            *typeMontage = SERIE;
            resultat[0] = resistances[curseur1];
            resultat[1] = resistances[curseur2];
            trouve = 1;
         }
 
         if ((meilleureValeur == 0 || valeurParallele < meilleureValeur)
             && valeurParallele >= valeurRecherchee)
         {
            meilleureValeur = valeurParallele;
            *typeMontage = PARALLELE;
            resultat[0] = resistances[curseur1];
            resultat[1] = resistances[curseur2];
            trouve = 1;
         }
 
         /* Inutile de continuer à parcourir le tableau, on ne trouvera pas mieux */
         if (valeurSerie >= valeurRecherchee
             && valeurParallele >= valeurRecherchee)
         {
            continuer = 0;
         }
         else
            curseur2++;
      }
 
      curseur1++;
      curseur2 = curseur1 + 1;
      continuer = 1;
   }
 
   return trouve;
}
 
int main (void)
{
   int nbResistances = 0;
   printf ("Nombre de resistances en stock : ");
   scanf ("%d", &nbResistances);
 
   int *resistances = (int *) malloc (nbResistances * sizeof (int));
   int i;
   for (i = 0; i < nbResistances; i++)
   {
      printf ("\nSaisir valeur résistance %d : ", i);
      scanf ("%d", &resistances[i]);
   }
 
   int valeurSouhaitee = 0;
   printf ("\nValeur souhaitée : ");
   scanf ("%d", &valeurSouhaitee);
 
   triBulle (resistances, nbResistances);
 
   TypeMontage typeMontage;
  int resultat[2];
    int  ok=trouveMeilleureAssociation (resistances, nbResistances, valeurSouhaitee,
                                  &typeMontage, resultat);
 
   if (ok)
   {      char const *montage typeMontage SERIE ? "série" : "paralèlle";
      printf
         ("Les deux meilleurs résistances sont R1=%d et R2=%d lorsqu'elles sont montées en %s",
          resultat[0], resultat[1], montage);
          system("pause");
   }
   else
      printf ("Aucune association de résistances n'a pu être trouvée");
 system("pause");
   getchar ();
 
   return 0;
}