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 :

Pointeur sur structure et tableau


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 7
    Par défaut Pointeur sur structure et tableau
    slt je dois rendre le projet suivant:
    On souhaite gérer une base de données d'inscriptions pour l'organisation d'un congrès qui
    dure une journée. Les organisateurs proposent aux participants de s'inscrire pour des
    repas, ainsi que pour l'hébergement en hôtel.
    Un participant peut s'inscrire indépendamment aux 2 repas proposés : déjeuner (15 euros)
    et/ou dîner (35 euros) ou aucun. Il n'est pas obligé de prendre un hôtel.
    S'il en prend un, il peut choisir parmi 2 types d'hôtels différents : 2 étoiles (75 euros) ou 3
    étoiles (100 euros).
    Un participant peut venir accompagné de son conjoint. Dans ce cas, la réservation d'hôtel
    est identique mais lorsqu'un repas est sélectionné alors il faut en compter 2.
    1)Créer un nouveau type Participant qui inclut son nom (chaîne de caractères : tableau de
    20 caractères), son prénom (chaîne de caractères : tableau de 30 caractères), ainsi que
    toutes les autres informations nécessaires à son inscription selon les critères définis ci-
    dessus. On privilégiera une structure contenant un nombre minimal de champs.
    2)Créer un nouveau type TabPart qui est un tableau de 100 éléments de type Participant.
    3)Créer une fonction Nb2Etoilesqui, pour un argument de type TabPart donné, affiche le
    nom et le prénom des personnes qui ont choisi de réserver un hôtel 2 étoiles. On
    pourra utiliser la fonction Printf avec pour format %s pour l'affichage des chaînes de
    caractères nom et prénom.
    4)Créer une fonction NbDej qui, pour un argument de type TabPart donné, retourne le
    nombre de déjeuners à prévoir.
    5)Créer une fonction Montant qui calcule, pour un Participant donné en argument, le
    montant de sa facture.

    besoin d'aide pour le pointeur qui doit pointer sur la structure et remplir le tableau tabpart
    code source:
    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
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    #include <stdlib.h>
    #include <stdio.h>
     
    #define hotel2etoil 1
    #define hotel3etoil 2
    #define aucunhotel  3
    #define p1person    4
    #define p2person    5
    #define dejeuner    6
    #define diner       7
    #define dejeuneetdiner 8
    #define aucunrepas 9
    // creation de types
    typedef struct participant Participant;
    struct participant
    {
        char nom[20];
        char prenom[30];
        unsigned int nbreclient;
        unsigned int hotel;
        unsigned int repas;
    };
     
    struct participant tab[100];
    /*typedef struct tabpart TabPart;
    struct tabpart
    {
        Participant tab[100];
    };*/
     
    // variables globales
    Participant*ptr;
    //fonctions
    void choixhotel(unsigned int hotel )
     {
         int i;
         printf("Quelle hotel choisissez vous?");
         printf("1=hotel2etoile\t 2=hotel3etoile\t 3=aucunhotel");
         scanf("%d",&i);
         switch(i)
         {
             case hotel2etoil : system(cls);
                                hotel=75;
                                print("hotel 2etoile");
                                system(cls);
                                break;
             case hotel3etoil : system(cls);
                                hotel=100;
                                printf("hotel 3etoile");
                                system(cls);
                                break;
             case aucunhotel :  system(cls);
                                hotel=0;
                                printf("aucun hotel");
                                system(cls);
                                break;
         }
     
     }
     void choixrepas(unsigned int repas,unsigned int nbreclient )
     {
         int p,r;
         printf("nobre de personne");
         scanf("%d",&p);
         switch(p)
         {
             case p1person : system(cls);
                             nbreclient=1;
                             printf("1 personne");
                             system(cls);
                             break;
             case p2person : system(cls);
                             nbreclient=2;
                             printf("2 personnes");
                             system(cls);
                             break;
         }
         printf("quelle repas desirez vous ");
         printf(" dejeune\n diner\n dejeune et diner \n aucun\n");
         scanf("%d",&r);
         switch(r)
         {
             case dejeuner : system(cls);
                             if (p==2)
                             {
                                 repas=2*15;
                             }
                             else
                             {
                                 repas=15;
                             }
                             print("dejeune");
                             system(cls);
                             break;
             case diner : system(cls);
                            if (p==2)
                             {
                                 repas=2*75;
                             }
                             else
                             {
                                 repas=75;
                             }
                             print("diner");
                             system(cls);
                             break;
             case dejeuneetdiner : system(cls);
                             if (p==2)
                             {
                                 repas=2*(15+75);
                             }
                             else
                             {
                                 repas=(15+75);
                             }
                             print("dejeune et diner");
                             system(cls);
                             break;
            case aucunrepas : system(cls);
                              repas=0;
                              printf("aucun repas");
                              system(cls);
                              break;
         }
     }
    ĵNb2Etoiles
    Nb3Etoiles
     
    int  calculMontant( unsigned int hotel,unsigned int repas)
    {
        return hotel+repas;
    }
    /*void interface0()
    {
        printf("1=inscription");
        printf("2=informations");
     
    }
    void interfaceinscription()
    {
        printf("3=reservation hotel");
        printf("4=reservation repas");
    }
    void interfaceinfos()
    {
        printf("5=afficher info client2*");
        printf("6=afficher info client3*");
        printf("7=afficher info repas");
        printf("8=montant conso");
    }
    int main()
    {
        printf("Bienvenu dans le menu des reservations");
        free();
        return 0;
    }*/

  2. #2
    Membre éprouvé

    Homme Profil pro
    autodidacte
    Inscrit en
    Mars 2011
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : autodidacte

    Informations forums :
    Inscription : Mars 2011
    Messages : 95
    Par défaut
    Citation Envoyé par jhonbouda Voir le message
    besoin d'aide pour le pointeur qui doit pointer sur la structure et remplir le tableau tabpart
    code source:
    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
     
    // creation de types
    typedef struct participant Participant;
    struct participant
    {
        char nom[20];
        char prenom[30];
        unsigned int nbreclient;
        unsigned int hotel;
        unsigned int repas;
    };
     
    struct participant tab[100];
     
    // variables globales
    Participant*ptr;
    Vaste code à rédiger...

    Comme le nom d'un tableau est aussi un pointeur sur son premier élément, tu peux déjà faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Participant *ptrParticipant=tab; /*équivalent à Participant *pParticipant=&tab[0]*/
    Puis

    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
     
    Participant constructeurParticipant (Participant *p)
    {
       char varPrenom[30];
    ...
       scanf("%s\n",varPrenom)
       strcpy(p->prenom,varPrenom);
       /*etc etc pour tous les membres de struct Participant) */
    ...
    }
     
    int main()
    { 
    ...
         for (i=0;i<100;i++)
             contructeurParticipant (ptrParticipant++);
    ...
    }
    PS: je n'ai pas testé ce code et je sens que je vais en apprendre

  3. #3
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par jhonbouda Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ...
    #define hotel2etoil 1
    #define hotel3etoil 2
    #define aucunhotel  3
    #define p1person    4
    #define p2person    5
    #define dejeuner    6
    #define diner       7
    #define dejeuneetdiner 8
    #define aucunrepas 9
    ...
    En lieu et place des #define j'utiliserais plutôt des enum :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    typedef enum {aucunhotel, hotel2etoil, hotel3etoil} hotel;
    typedef enum {p1person, p2person} personne;
    typedef enum {aucunrepas, dejeuner, diner, dejeuneretdiner} repas;
    Ceci évite des déclarations du type unsigned int hotel.

    On pourrait d'ailleurs pousser un peu l'intégration en utilisation seulement un entier sur deux octets (16 bits). Chaque bit faisant office de drapeau pour un état donné (il y a seulement 9 états). Un simple test de cet entier avec un & pour déterminer les choix à faire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // variables globales
    Participant*ptr;
    Beuuurk...

    Trouve une autre manière de procéder. Tu dois pouvoir sans trop forcer propager ce pointeur autrement qu'en tant que déclaration globale.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void choixhotel(unsigned int hotel )
    À quoi sert exactement ce paramètre dans ta fonction ?

    Toujours dans la même fonction :
    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
     switch(i)
         {
             case hotel2etoil : system(cls);
                                hotel=75;
                                print("hotel 2etoile");
                                system(cls);
                                break;
             case hotel3etoil : system(cls);
                                hotel=100;
                                printf("hotel 3etoile");
                                system(cls);
                                break;
             case aucunhotel :  system(cls);
                                hotel=0;
                                printf("aucun hotel");
                                system(cls);
                                break;
         }
    system(cls); est commun à tous les choix. Tu peux donc naturellement l'extraire et le pré-figurer en tête du switch();. Ensuite, si on reprend la définition que j'ai cité au début en enum typedef enum {aucunhotel, hotel2etoil, hotel3etoil} hotel; on peut un peu améliorer la chose sous la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef enum {aucunhotel=0, hotel2etoil=75, hotel3etoil=100} hotel;
    De cette manière on peut directement affecter à hotel la valeur de l'enum transmis. Seul l'affichage final reste à déterminer dans le switch();.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 845
    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 845
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jhonbouda Voir le message
    slt
    Ouais super. Surtout n'écris pas le mot "bonjour" en entier, ça risquerait de te fatiguer les doigts...

    Citation Envoyé par jhonbouda Voir le message
    3)Créer une fonction Nb2Etoilesqui, pour un argument de type TabPart donné, affiche le
    nom et le prénom des personnes qui ont choisi de réserver un hôtel 2 étoiles. On
    pourra utiliser la fonction Printf avec pour format %s pour l'affichage des chaînes de
    caractères nom et prénom.
    Pourquoi cette discrimination à 2 étoiles ? Créer une fonction NbHotel qui, pour un argument de type TabPart donné (à ce propos tu serais très avisé de prendre l'habitude de nommer tes types "t_xxx" plutôt que "xxx", tu verras que ça facilite la lecture du code) et un second argument de type "int" affiche le nom et le prénom des personnes qui ont chois les hôtels avec le nombre d'étoiles demandé.
    D'ailleurs cette limitation à 2 étoiles/3 étoiles est assez limitative. Moi je verrais de suite le truc évolutif avec un tableau de catégories d'hôtels
    Exemple
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    typedef struct {
        short nb_etoiles;
        float prix;
    } t_hotel;
     
    t_hotel tab_hotels[]={
        {2, 75.0},
        {3, 100.0},
        {-1, 0},
    };

    Et le traitement
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    t_hotel *pt_hotel;
    for (pt_hotel=tab_hotels; pt_hotel->nb_etoiles != -1; pt_hotel++)
        ...
    Ce qui te permet de rajouter facilement plus tard d'autres catégories d'hôtels
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    t_hotel tab_hotels[]={
        {0, 25.0},
        {1, 50.0},
        {2, 75.0},
        {3, 100.0},
        {5, 1500.0},
        {-1, 0},
    };
    sans changer le traitement...
    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. Tableau de pointeurs sur Structure
    Par kenzo75 dans le forum C
    Réponses: 18
    Dernier message: 02/02/2013, 09h24
  2. pointeur sur structure tableau statique
    Par pspflashsystem dans le forum Débuter
    Réponses: 2
    Dernier message: 30/05/2009, 11h53
  3. pointeur sur structure
    Par julien.63 dans le forum C
    Réponses: 7
    Dernier message: 04/06/2007, 17h50
  4. problème pointeur sur structure
    Par lejohn dans le forum C
    Réponses: 9
    Dernier message: 01/05/2007, 13h17
  5. Réponses: 2
    Dernier message: 21/03/2007, 10h55

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