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 :

Comment saisir des entiers et des réels


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 11
    Points : 9
    Points
    9
    Par défaut Comment saisir des entiers et des réels
    Comment je vous ai dit, voilà l'autre exercice.

    ** Je vous rappelle que je ne vous demande pas de le faire pour moi, mais de m'aider à comprendre pour que je puisse le faire. Merci à l'avance.


    La société «LA GÉNÉREUSE» prévoit donner à chacun de ses employés une prime de fin d’année de 2.00% du salaire annuel. Elle accorde une surprime de 250$ aux employés ayant moins de 5 ans d’ancienneté. Les employés ayant entre 5 et 10 ans inclusivement recevront une surprime de 565$ et les autres (plus de 10 ans) , 1000$.
    Écrivez un programme en langage C permettant
    - de saisir un réel représentant le salaire annuel et un entier pour le nombre d’années
    - de calculer la prime totale de fin d’année
    - d’afficher le salaire annuel, le nombre d’années et la prime totale.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Apparemment, c'est une bête question d'appliquer les règles données, je ne vois rien de compliqué.

    Je conseillerais de faire au moins une fonction séparée pour le calcul lui-même, en laissant au main() le soin de saisir les entrées et afficher les sorties.

    La fonction de calcul devrait avoir un prototype du genre double CalculerPrime(double salaireAnnuel, int anneesAnciennete);.

    Pour la saisie d'entiers et de réels, le plus simple c'est la fonction scanf() (ou bien, fgets() + sscanf(), mais ici ça me semble superflu).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Désolé, j'ai essayé plusieurs fois, mais je n'arrive pas à comprendre.

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 149
    Points : 28 116
    Points
    28 116
    Par défaut
    Bonjour,

    Si c'est la saisie qui te pose probleme, as-tu regarde un tutoriel comme celui-ci par exemple ?
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  5. #5
    Expert confirmé Avatar de ManusDei
    Homme Profil pro
    vilain troll de l'UE
    Inscrit en
    Février 2010
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : vilain troll de l'UE

    Informations forums :
    Inscription : Février 2010
    Messages : 1 619
    Points : 4 350
    Points
    4 350
    Par défaut
    Tu devrais essayer de "représenter" le problème d'une manière plus proche des maths. Là, on a plusieurs informations, à classer en paramètre de sortie (donc que renvoie le programme), paramètres d'entrées (fournis par l'utilisateur du programme), et paramètres internes au programme.

    Donc, là si je fais des listes :

    paramètres d'entrées :
    • ancienneté
    • salaire annuel


    paramètres de sortie :
    • nombre d'années (égal à ancienneté)
    • salaire annuel
    • prime totale


    paramètres internes :
    • pourcentage de prime (2%)
    • surprime 250$
    • surprime 565$
    • surprime 1000$

    Là, tu as la liste des "choses" que tu vas manipuler.
    Maintenant il faudrait regarder quelles manipulations tu dois faire, avec quelles fonctions C.
    http://www.traducteur-sms.com/ On ne sait jamais quand il va servir, donc il faut toujours le garder sous la main

  6. #6
    Candidat au Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Février 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2015
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Question
    Voici ce que j'ai fait

    s_Ann        Salaire annuel
    a_Anc        Année d'ancienneté
    prm_sal      Prime sur le salaire (2%)
    prm_1        Prime 1
    prm_2              2
    prm_3              3
    prm_Tot      Prime avec salaire
    Voici le codage

    Code : 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    #include <stdio.h>
    int main()
    {
     
    int PRM_1, PRM_2, PRM_3, a_Anc   ;
     
    float s_Ann, prm_sal, spp_ann, prm_Tot ;
     
    PRM_1 = 250 ;
    PRM_2 = 565 ;
    PRM_3 = 1000 ;
     
    printf(" Saisissez votre salaire annuel ainsi que votre anciennete en nombre dannee") ;
    scanf("%f%d", &s_Ann, &a_Anc) ;
     
    spp_ann = s_Ann *  2/100  + (s_Ann) ;
     
    if (s_Ann <  '5')
    {
        prm_Tot = spp_ann + PRM_1 ;
        printf("Votre salaire avec prime et anciennete\n");
        scanf("%d%f", &prm_Tot &s_Ann) ;
    } 
     
    else if (s_Ann > '5'<= 11){
        prm_Tot = spp_ann + PRM_2 ;
        printf("Votre salaire avec prime et anciennete\n");
        totSalProg = scanf("%f%d", &prm_Tot & s_Ann) ;
    } 
     
    else
        if (s_Ann >10){
            prm_Tot = spp_ann + PRM_3 ;
            printf("Votre salaire avec prime et anciennete\n");
            totSalProg = scanf("%f%d", &prm_Tot & s_Ann ;
        } 
    else
        printf("Donnees invalides \n");
    Je suis bloqué à cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf("%f%d", &prm_Tot &s_Ann) ;
    Sachant que prm_tot est le salaire totale plus les primes et que s_Ann est égal aux années d'ancienneté donc j'ai un int et un float à représenter,
    hormis quand je ''compile and run'' on m'affiche cette erreur

    Errors invalid operands to binary & (have float and float)
    j'aimerais juste savoir si je suis dans le bon chemin et aussi comment je peux trouver la solution du blocage

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Probablement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf("%f%d", &prm_Tot, &s_Ann) ;
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Mohdz86 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf("%f%d", &prm_Tot &s_Ann) ;
    Bonjour

    En dehors de la virgule manquante (relevé par Médinoc), tu devras faire attention que scanf() demande une entrée au format exact tel que demandé. Or tu colles "%f%d" donc scanf() attendra un flottant collé à un entier (style 2812.2518). Or comment fera-t-il alors pour distinguer "2812.25" de "18" ???
    Il faut être très prudent avec scanf(). C'est une fonction rapidement enseignée aux débutants pour permettre ensuite les TP mais c'est une fonction très difficile à manipuler. D'ailleurs elle n'est en fait pas du tout adaptée aux humains car ce que tape un humain est tout sauf "formaté"...
    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]

  9. #9
    Candidat au Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Février 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2015
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Merci de vos réponses

    Oui j'ai réaliser qu'en faite jai mélanger les fonctionnalité de scanf et printf, j'ai dû revoir ma syntaxe qui laissais un peu à désirer, ceci étant dit
    j,ai réussie à faire tourner le programme. Le probléme c'est que avec 10 années d'anciennete ou plus le programme n,arrive pas à assigner la constante PRM_3 qui est de 1000$ en faite le programme fait comme s'il avait traiter un individue ayant moins de 10 années d'ancienneté

    Code : 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    #include <stdio.h>
    int main()
    {
     
    int PRM_1, PRM_2, PRM_3, a_Anc, s_Ann, prm_Tot   ;
     
    float  prm_sal, spp_ann  ;
     
    PRM_1 = 250 ;
    PRM_2 = 565 ;
    PRM_3 = 1000 ;
     
    printf(" Saisissez votre salaire annuel ainsi que votre anciennete en nombre dannee \n") ;
    scanf("%d%d", &s_Ann, &a_Anc) ;
     
    spp_ann = s_Ann *  2.0/100  + (s_Ann) ;
     
    if (a_Anc < 5)
    {
    prm_Tot = spp_ann + PRM_1 ;
     
    printf("Votre salaire avec primes est de %6.2d $ par annee et vous recevez un bonus danciennete de %5.1d $", prm_Tot, PRM_1);
    } 
     
    else 
    if ( 5 < a_Anc <= 10){
     
    prm_Tot = spp_ann + PRM_2 ;
     
    printf("Votre salaire avec primes est de %d $ par annee et vous recevez un bonus danciennete de %5.1d $\n", prm_Tot, PRM_2);
     
    } 
     
    else
    if (a_Anc > 10){
    prm_Tot = spp_ann + PRM_3 ;
     
    printf("Votre salaire avec primes est de %6.2d $ par "
           "annee et vous recevez un bonus danciennete de %5.1d $\n", prm_Tot, PRM_3);
     }    
     
    else
    printf("Donnees invalides");	      
    printf("\n\n");
     
       system("pause");
     
       return 0;
     
    }



    Merci encore

  10. #10
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Citation Envoyé par Sve@r
    En dehors de la virgule manquante (relevé par Médinoc), tu devras faire attention que scanf() demande une entrée au format exact tel que demandé. Or tu colles "%f%d" donc scanf() attendra un flottant collé à un entier (style 2812.2518). Or comment fera-t-il alors pour distinguer "2812.25" de "18" ???
    Non, c'est inexact. Il accepte une entrée "2812.25 18" avec entre les nombres (et devant le premier des deux) autant de blancs que tu veux.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  11. #11
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Mohdz86 Voir le message
    Le probléme c'est que avec 10 années d'anciennete ou plus le programme n,arrive pas à assigner la constante PRM_3 qui est de 1000$ en faite le programme fait comme s'il avait traiter un individue ayant moins de 10 années d'ancienneté

    Cette syntaxe typiquement mathématique n'est pas comprise par le compilateur comme tu voudrais qu'elle le soit
    Là, il comprend "5 < a_Anc" => renvoie vrai donc 1 puis "1 <= 10" ce qui reste vrai donc même avec a_Anc =500 ce test est toujours vrai.

    Tu as un langage strict à respecter...
    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: 4
    Dernier message: 02/04/2008, 17h51
  2. Réponses: 3
    Dernier message: 13/09/2007, 18h11
  3. StringBuffer contenant des entier et des char!
    Par ranell dans le forum Langage
    Réponses: 23
    Dernier message: 08/03/2007, 05h52
  4. Manipuler des TDateTime comme des entiers?
    Par toufou25 dans le forum C++Builder
    Réponses: 8
    Dernier message: 22/06/2006, 15h52
  5. Réponses: 2
    Dernier message: 27/04/2006, 16h45

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