IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Conversion simple en C : km ↔ miles


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80

    Informations forums :
    Inscription : Mars 2005
    Messages : 28
    Points : 10
    Points
    10
    Par défaut Conversion simple en C : km ↔ miles
    Bonjour à tous,

    Je suis en train d'apprendre le C, et j'ai fait ce petit programme. Comme je n'ai (encore) rien pour contrôler, je vous demande de bien vouloir m'aider. En entrée, je donne le nombre de km, de 4.8 km, et je dois recevoir le nombre de Miles américains en retour.

    Voici le code :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include "stdio.h"
     
    int main(){
        double kilometres;
        double miles;
        double konstante = 0.621371;
     
        scanf("nombre de km %lf ", &kilometres);
        printf("%lf Km cela fait %lf Miles", kilometres, kilometres * konstante);
        return 0;
    }

  2. #2
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Bonjour,
    Outre le fait que tu aurais pu utiliser la balise code (le bouton #), il y a plusieurs soucis simples, et d'autres où je n'ai pas de réponses (je fais plutôt du C++)

    konstante n'est pas une variable constante et son nom n'indique rien de son rôle.
    Il y a plein de constantes: 0, 1, 3.14159265358, 299 792 458. Ce sont respectivement, zero, un, pi et c (vitesse de la lumière dans le vide, en m/s).
    Comme tu le vois, ce n'est pas leur nature constante ou leur valeur qui sont utiles, mais leur usage.
    Dans ton cas, c'est le facteur de conversion des kilomètres en miles terrestres américains. Je te propose de la déclarer ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double const km_to_miles = 0.621371;
    De même, ta variable miles n'est pas utilisée.
    C'est une bonne chose, parce qu'effectivement, pour le moment, tu n'en as pas vraiment besoin.
    La valeur ne sert qu'une seule fois, tu as eu raison de la calculer à ce moment-là uniquement.

    Mais du coup, ce n'est pas la peine de conserver une variable inutile.

    Autre note, ton message affiché serait plus clair si tu écrivais "%lf km valent %lf miles".

    Enfin, il y a un autre problème plus conséquent (celui où je n'ai pas de réponse).
    scanf permet de faire une lecture d'après un format. Or, un utilisateur peut saisir n'importe quoi.
    scanf n'est pas adaptée, à moins de procéder à beaucoup de controle.

    Je laisse un autre participant te donner la solution recommandée.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80

    Informations forums :
    Inscription : Mars 2005
    Messages : 28
    Points : 10
    Points
    10
    Par défaut
    Bonjour leternel

    Merci pour ta reponse
    je sui un cours " FUN MinesTelecom ABC du langage C", ce cours et fermé, il ne m'est pas possible de poser mes questions. Pour l'instant, la securitée ne joue aucun rolle, l'exercisse doit seulement mettre en evidence la manipulation des chiffres avec virgule.

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par leternel Voir le message
    Enfin, il y a un autre problème plus conséquent (celui où je n'ai pas de réponse).
    scanf permet de faire une lecture d'après un format. Or, un utilisateur peut saisir n'importe quoi.
    Bonjour

    Une des solutions possibles est de récupérer tout ce que tape l'utilisateur dans une chaine, puis de traiter cette chaine via sscanf() en testant son retour (il renvoie le nombre d'éléments réellement récupérés donc on peut comparer ce nombre au nombre d'éléments attendus)

    Exemple
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #include <stdio.h>
     
    double saisie_double(char *prompt)
    {
    	char saisie[1024];
    	double val;
     
    	while (1) {
    		fputs(prompt, stdout);
    		fgets(saisie, 1024, stdin);
    		if (sscanf(saisie, "%lf", &val) == 1) break;
    		fputs("Saisie incorrecte - Recommencez !!!\n", stdout);
    	}
    	return val;
    }
     
    int main(){
    	double kilometres;
    	const double mile_par_km=0.621371;
     
    	kilometres=saisie_double("nombre de km :");
    	printf("%lf Km font %lf Miles\n", kilometres, kilometres * mile_par_km);
    	return 0;   
    }
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 471
    Points : 6 109
    Points
    6 109
    Par défaut
    Le rapport entre un mile terrestre américain et un kilomètre n'est pas 0.621371, mais environ 1.609347.

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Pyramidev Voir le message
    Le rapport entre un mile terrestre américain et un kilomètre n'est pas 0.621371, mais environ 1.609347.
    Oui, dans le sens "combien de km pour un mile". Le PO, lui, veut une conversion dans l'autre sens (combien de miles pour un km). Et, je te le donne en mille (c'est le cas de le dire), si tu calcules 1/1.609347, devines combien tu trouves...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 471
    Points : 6 109
    Points
    6 109
    Par défaut
    Oups. C'est vrai. Étourderie.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80

    Informations forums :
    Inscription : Mars 2005
    Messages : 28
    Points : 10
    Points
    10
    Par défaut
    Merci a tous pour vos reponses, mais comme je le disai plus haut, sans autres methodes, je dois entré les Km et je dois récuperer les Miles à la sortie. Comme je n'ais pas (pour l'instant) la possibilité de verifier mon code, je voulais savoir:

    1. en suposant que mon entré est bien de 4,5 (km)
    2. Si ma sorti me donne bien le resulta de (2.485484 Miles) en sortie?

    Pour le reste ca vient encore.
    Merci
    Claude

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Claude 3573 Voir le message
    1. en suposant que mon entré est bien de 4,5 (km)
    2. Si ma sorti me donne bien le resulta de (2.485484 Miles) en sortie?
    Ben pour ça t'as pas besoin de nous. Tu te prends une calculatrice et tu te multiplies 4.5 par 0.621371 (ou bien, pour faire plaisir à Pyramidev qui n'était pas tout à fait dans le faux avec son nombre, tu divises par 1.609347) et tu verras ce que ça donne. Et si t'as pas de calculatrice, tu te prends un papier et un crayon.
    Et (pas de bol), le résultat n'est pas 2.485484 (ça c'est le nb de miles nautiques pour 4.5km et non le nb de miles américains).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/06/2015, 15h26
  2. [XL-2003] Conversion d'une heure en seconde par simple calcul
    Par paquita66 dans le forum Excel
    Réponses: 4
    Dernier message: 07/10/2014, 17h52
  3. simple conversion de type
    Par flyeric dans le forum jQuery
    Réponses: 2
    Dernier message: 06/02/2012, 09h07
  4. Réponses: 1
    Dernier message: 22/04/2009, 17h06
  5. pb simple de conversion d'ascii
    Par dev0077 dans le forum C++
    Réponses: 3
    Dernier message: 29/10/2007, 20h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo