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 :

Aide pour calcul d'un prix


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 17
    Points : 14
    Points
    14
    Par défaut Aide pour calcul d'un prix
    Bonsoir à tous,

    Je viens vers vous pour essayer de trouver la "meilleure" facon possible pour calculer un prix d'un petit programme que je dois faire dans le cadre de mon cours sur le C.
    Ce programme gere une liste de client d'un centre de thalasso. Ce centre propose differente cure, different soins, different hebergement et en fonction des saisons de l'année tout a un prix different.

    Mon idée était de créer une structure speciale pour calculer le prix qui enregistrait toutes les informations importantes pour le prix final.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    struct Prix
    {
        int saison;
        int c;
        int s1;
        int s2;
        int s3;
        int loge;
        int chambre;
        int suitevue;
        int confchambre;
        int vue
    };
    Avec la saison prennant les valeurs 1, 2, 3 ou 4
    c le choix de la cure 1, 2 ou 3
    s1 le soin optionnel 1 compris entre 1 et 8
    s2 soins optionne 2
    et ainsi de suite

    Ma fonction prix ressemble a ca pour le moment (j'ai juste fais pour une saison) mais je la trouve pas très élégante et aimerais trouver un meilleur moyen de faire qu'une suite de if et de switch

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
     
    void calculprix(struct Prix px){
        int prix=0;
     
     
        if (px.saison == 4){
     
            // CURE
            if(px.c==1){
                prix=440;
            } else if(px.c==2){
                prix=460;
            } else {
                prix =560;
            }
     
            // SOINS
            switch (px.s1)
            {
                case 1 :prix+=30;break;
                case 2 :prix+=35;break;
                case 3 :prix+=40;break;
                case 4 :prix+=30;break;
                case 5 :prix+=35;break;
                case 6 :prix+=40;break;
                case 7 :prix+=30;break;
                case 8 : prix+=35;break;
                case 9 : break;
            }
     
     
            switch (px.s2)
            {
                case 1 :prix+=30;break;
                case 2 :prix+=35;break;
                case 3 :prix+=40;break;
                case 4 :prix+=30;break;
                case 5 :prix+=35;break;
                case 6 :prix+=40;break;
                case 7 :prix+=30;break;
                case 8 : prix+=35;break;
                case 9 : break;
            }
     
            switch (px.s3)
            {
                case 1 :prix+=30;break;
                case 2 :prix+=35;break;
                case 3 :prix+=40;break;
                case 4 :prix+=30;break;
                case 5 :prix+=35;break;
                case 6 :prix+=40;break;
                case 7 :prix+=30;break;
                case 8 : prix+=35;break;
                case 9 : break;
            }
     
            if (px.loge==1){
     
                if(px.chambre==1){//Simple
                    if(px.confchambre==1){//SIMPLE standar
                        if(px.vue==1){
                            prix+=190;
                        } else if (px.vue==2){
                            prix+=200;
                        } else {
                            prix+=175;
                        }
                    } else {// simple confort
                        if(px.vue==1){
                            prix+=220;
                        } else if (px.vue==2){
                            prix+=230;
                        } else {
                            prix+=200;
                        }
     
                    }
                } else if (px.chambre==2){// confort
                    if(px.confchambre==1){//confort simple
                        if(px.vue==1){
                            prix+=140;
                        } else if (px.vue==2){
                            prix+=150;
                        } else {
                            prix+=125;
                        }
                    }else { // confort double
                        if(px.vue==1){
                            prix+=165;
                        } else if (px.vue==2){
                            prix+=175;
                        } else {
                            prix+=150;
                        }
                    }
                } else {
                    if(px.suitevue==1){
                        prix+=375;
                    } else {
                        prix+=400;
                    }
                }
            }
     
     
        }
     
        printf("----------%d----------\n",prix);
        }
    }
    Voila j'espere avoir été clair sur mon probleme, mon cours ce résume au langage C de base donc pas de c++ car je pense que la POO permet mieux de faire ce genre de chose..
    Merci d'avance

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Avec une flopée d'enum ... mais il faut vérifier que le compilateur veut des redondances de prix


    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
    typedef enum e_THERAPY_PRICE {
        PRICE_THERAPY_C1 = 440,
        PRICE_THERAPY_C2 = 460,
        PRICE_THERAPY_C3 = 560
    } THERAPY_PRICE;
     
     
    typedef enum e_CARE_PRICE {
        PRICE_CARE_NONE = 0,
        PRICE_CARE_1 = 30,
        PRICE_CARE_2 = 35,
        PRICE_CARE_3 = 40,
        PRICE_CARE_4 = 30,
        PRICE_CARE_5 = 35,
        PRICE_CARE_6 = 40,
        PRICE_CARE_7 = 30,
        PRICE_CARE_8 = 35
    } CARE_PRICE;
     
     
    struct Price {
        THERAPY_PRICE therapy_price;
        CARE_PRICE option_1_price,
        CARE_PRICE option_2_price,
        CARE_PRICE option_3_price,
    };
     
     
    void print_total(struct Price price) {
        printf("----------%d----------\n", (price.therapy_price + price.option_1_price + price.option_2_price + price.option_3_price));
    }

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    C'est pas mal du tout ca !!!!!
    merci beaucoup

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Mais je comprend pas bien les enum, ca ne va pas m'empecher d'enlever les if...?

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Effectivement mais cela dépend de comment tu saisies tes valeurs:
    1. Soit avec une application/ IHM et dans ce cas tu peux "taguer" tes menus, tes entrées de liste déroulante, ... avec les valeurs
    2. Soit à la console et dans ce cas c'est mort


    À la console, il faut remplir des tableaux de valeurs (et éventuellement faire des enums pour donner des noms aux index) et soit mémoriser le nombre d'éléments soit mettre une sentinelle (genre 0xFFFF).
    Et faire certaines parties (affichages par exemple) avec des boucles for.

    Pour le calcul, tu utilises directement l'index.
    Un truc du style (array_therapy_prices[price.therapy_index] + array_care_prices[price.option_1_index] + array_care_prices[price.option_2_index] + array_care_prices[price.option_3_index]).


    Et un truc spécial qui dépend du compilateur
    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
    typedef enum e_CARE_INDEX {
        INDEX_CARE_NONE = 0,
        INDEX_CARE_1,
        INDEX_CARE_2,
        INDEX_CARE_3,
        INDEX_CARE_4,
        INDEX_CARE_5,
        INDEX_CARE_6,
        INDEX_CARE_7,
        INDEX_CARE_8,
        NB_CARE_INDEXES
    } CARE_INDEX;
     
     
    const int array_care_prices[NB_CARE_INDEXES] = {
        [INDEX_CARE_NONE] = 0,
        [INDEX_CARE_1] = 30,
        [INDEX_CARE_2] = 35,
        [INDEX_CARE_3] = 40,
        [INDEX_CARE_4] = 30,
        [INDEX_CARE_5] = 35,
        [INDEX_CARE_6] = 40,
        [INDEX_CARE_7] = 30,
        [INDEX_CARE_8] = 35
    };

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Merci pour ton aide foetus mais ta solution me depasse un peu, finalement j'ai fais une suite de boucle for if et switch

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Aide pour Calcul la divergence
    Par nadjib2007 dans le forum Traitement d'images
    Réponses: 5
    Dernier message: 05/07/2007, 16h30
  2. aide pour calculer la dérivée /x et /y
    Par hapchlolo dans le forum Traitement d'images
    Réponses: 5
    Dernier message: 12/06/2007, 13h30
  3. Aide pour calcul de pourcentage.
    Par aerosim dans le forum Excel
    Réponses: 3
    Dernier message: 04/04/2007, 16h31
  4. Aide pour calcul de date
    Par pedrosystem dans le forum Access
    Réponses: 9
    Dernier message: 06/07/2006, 08h38
  5. [MySQL] Aide pour calculer une durée
    Par Sandara dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/06/2006, 17h00

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