logo

Knowledge Is Power

 
 

- Reinit des nouveaux posts -

- Recherche -

Messages Privés - Derniers posts
S'enregistrer - Login - Liste des membres
Vous logger : Login Pass

Programmation - Langages de Programmation >> Petit problème d'exercice sur un prog en C, HELP me please ! Newtopic | Reply
poster txt
geekface
Inscrit le 31-12-2008
Posté le 01-12-2009 22:45

Bonjour,

Voila le sujet de mon programme

http://uploading.com/files/298am2d6/exo_pb.pdf/

Voila mon programme : mais il y a un problème ça ne fonctionne pas !



Code:
#include <stdio.h>

int main()
{
double vitesse;
double distarretm,distarrets,chemreac,distfreinm,distfreins;
char etatroute;
etatroute = getchar();
printf("Quelle est la vitesse de la voiture en km/h ? : \n\n");
scanf("%lf",&vitesse);

printf("Quelle est l'état de la route ? : \n");
scanf("%c",&etatroute);

chemreac = ((3*vitesse)/10);
distfreinm = ((vitesse/10)*(vitesse/10));
distfreins = ((3/4)*(distfreinm));
distarretm = (chemreac + distfreinm);
distarrets = (chemreac + distfreins);

if (etatroute=='109')
{
printf("La distance necessaire avant l'arret de la voiture sur sol mouille est de : %lf\n",distarretm);
}
else
{
printf("La distance necessaire avant l'arret de la voiture sur sol sec est de : %lf\n",distarrets);
}
}



Aidez moi s'il vous plait

[ Ce Message a été édité par: geekface le 2009-12-01 22:46 ]
profil | edit | quote
casskroot
Inscrit le 01-11-2003
Posté le 01-12-2009 23:11

j'ai pas regardé dans le détail mais en C, on met pas d'apostrophes ou de guillemets autour d'une valeur numérique:

if (etatroute=='109')
_________________________

profil | mail | edit | quote
geekface
Inscrit le 31-12-2008
Posté le 01-12-2009 23:24

je me suis trompé c'est plutôt ça que je voulait mettre :

if (etatroute=='m')

car si je met
if (etatroute=='m')
il me dit que m n'est pas défini, alors avec les cotes '' il devrait savoir que c'est un caractère.

merci, mais toujours le même problème
profil | edit | quote
clanger
Inscrit le 04-04-2007
Posté le 02-12-2009 00:02

Je vois deux erreurs :

* La première c'est d'avoir oublié que scanf ne purge pas l'entrée standard c'est à dire que les caractères '\n' (newline) restent dans le tampon. La conséquence c'est qu'au second scanf("%c"), ce n'est pas le caractère 'm' ou 's' qui est enregistré mais le '\n' du passage à la ligne lors de l'entrée de la vitesse.

La solution c'est d'indiquer à scanf de ne pas tenir compte des blancs (espace, tabulation, newline) en rajoutant un espace en début de chaine de format : scanf(" %c")

* La seconde provient du coefficient 3/4 à appliquer sur route sèche. 3/4 étant une division de deux entiers la réponse est entière et vaut ici zéro (0) au lieu de (0.75).

Une solution possible est de remplacer 3 par 3. (avec un le point final pour le faire considérer comme un float), sinon on peut avantageusement remplacer trois quarts par 0.75 directement.


PS: Par rapport à l'exercice il reste encore à faire une boucle pour recommencer d'autres calculs à volonté.
profil | edit | quote
geekface
Inscrit le 31-12-2008
Posté le 02-12-2009 00:33

Merci du coup de pouce, j'ai remplacer 3/4 par 3./4 et ça marche mieux.

Pour l'histoire de la boucle je ferai ça demain, avec des appels de fonctions, cela sera plus pratique.

Merci à bientôt.
profil | edit | quote
geekface
Inscrit le 31-12-2008
Posté le 02-12-2009 20:01

Voici mon nouveau programme.

Il fonctionne bien, mais je voudrais faire la dernière questions, dois-je faire un loop, avec un goto mainloop ?
Ou simplement un return, je suis un peu bloqué.

Code:
  #include <stdio.h>

int main()
{
float vitesse;
double distarretm,distarrets,chemreac,distfreinm,distfreins;
char etatroute;

printf("Quelle est la vitesse de la voiture en km/h ? : \n\n");
scanf("%f",&vitesse);

printf("Quelle est l'état de la route ? : \n");
scanf(" %c",&etatroute);

chemreac = ((3.*vitesse)/10);
distfreinm = ((vitesse/10)*(vitesse/10));
distfreins = ((3./4)*(distfreinm));
distarretm = (chemreac + distfreinm);
distarrets = (chemreac + distfreins);

if (etatroute=='m')
{
printf("La distance necessaire avant l'arret de la voiture sur sol mouille est de : %lf\n",distarretm);
}
else
{
printf("La distance necessaire avant l'arret de la voiture sur sol sec est de : %lf\n",distarrets);

}

system("PAUSE");
return 0;
}



profil | edit | quote
clanger
Inscrit le 04-04-2007
Posté le 02-12-2009 23:08

Le plus simple c'est de faire un : do ... while
Un truc du style suivant devrait convenir parfaitement
Code:

char demander_s_il_faut_recommencer(); /* prototype */

int main() {
char reponse;

do {
/* appel a la fonction de calcul de la distance */
calculer_la_distance_d_arret();

/* appel a la fonction demandant s'il faut recommencer */
reponse = demander_s_il_faut_recommencer();

} while (reponse == 'o');
}



PS: Il serait même plus pertinent d'avoir plutôt une fonction tester_s_il_faut_recommencer() retournant un entier/booléen (0 pour NON (faux) et 1 pour OUI (vrai))...
profil | edit | quote
geekface
Inscrit le 31-12-2008
Posté le 03-12-2009 18:21

Merci pour tout.

J'ai terminé le programme qui fonctionne à merveille avec les fonctions et les appels de fonctions, je vous publie tout ça très prochainement.

à Bientôt.
profil | edit | quote
clanger
Inscrit le 04-04-2007
Posté le 03-12-2009 21:12

Au fait, c'est quelle formation ce module I3 ?
profil | edit | quote
Newtopic | Reply

Online : Agustinwhase, DargothPr, Mazinpn, Nafalemplot, Robertbeply et 98 Guests


Retour Index NewFFR Repository : http://taz.newffr.com
Cagades à Stick : http://alcane.newffr.com
Forum HTML et Archive -> ici
ForumFR Sql/Xml (2006/04) (SF pas à jour du tout...) - Alive since 2001 Newffr.com
Pour toute plainte ou problème -> Contacter Borax, Hyatus, Tweakie ou Stick par message privé (ou Gueulez sur le forum :) )
Retour haut de page