Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Erreur]TP licence info 1ere en C Parking

Mon année en dépend.. Je vais donner le plus d'informations.

    1 mai 2023 à 20:52:51

    Un pointeur est une variable qui contient une adresse. Il ne s'agit pas, comme tu as l'air de le penser, d'une structure. On ne peut y mettre qu'une valeur: l'adresse mémoire de quelque chose. Et encore, le quelque chose doit être du même type que le pointeur (exception faite pour void *, mais bon)

    struct client {
    	char name[....];
    	char plaque[....];
    	....
    };
    
    
    void f(....) {
    	struct client client;
    
    	int *int_ptr;
    	int_ptr=&client;							// bad
    
    	struct client *ptr_client;
    	ptr_client=&client;							// ok
    		
    	strcpy(ptr_client->name,"Jules");
    	strcpy(ptr_client->plaque,"CE-1293-SAR");
    	
    	....
    }



    -
    Edité par edgarjacobs 1 mai 2023 à 20:55:49

    • Partager sur Facebook
    • Partager sur Twitter

    On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

      1 mai 2023 à 21:08:38

      Normalement, tu as besoin de deux pointeurs (pointeurs sur des structures) : un pointeur sur le parking courant, et un pointeur sur le client courant.

      • Partager sur Facebook
      • Partager sur Twitter
        1 mai 2023 à 21:39:58

        Du coup je dois initialisé le ou les pointeurs dans mon main ou dans ma fonction ? et qu'est ce que je met comme paramètre pour ma fonction, je suis vraiment perdu sur ce sujet j'ai vraiment du mal à comprendre, effectivement je n'ai aucun cours parce que je n'ai rien vu justement... Si vous pouviez me montrer les lignes que je dois m'être et les expliquer s'il vous plait...  Et pour les lignes de code ci dessous, à la place de Jules je met par exemple , 

        strcpy(ptr_client->identifiant, tableau_enregistrement[ligne_info].identifiant 

        cependant j'ai aussi le soucis de char qui ne peux pas aller dans ptr_client 

        je n'y comprend vraiment pas grand chose..

        strcpy(ptr_client->name,"Jules");
        strcpy(ptr_client->plaque,"CE-1293-SAR");
        • Partager sur Facebook
        • Partager sur Twitter
          1 mai 2023 à 23:49:18

          LorisBoulanger a écrit:

          Du coup je dois initialisé le ou les pointeurs dans mon main ou dans ma fonction ? 

          Dans ton main, car tu devra revenir dessus quand tu sortiras du parking. Tu te fais une fixation sur un pointeur, mais ça pourrait être un client (struct client). Si c'est un pointeur, il devra pointer sur un client créé sur la pile ou sur le tas avec malloc.

          • Partager sur Facebook
          • Partager sur Twitter
          ...
            2 mai 2023 à 10:08:13

            > Je voudrais créer un pointeur.

            C'est pas toi qui crée les pointeurs.  Toi, tu écris une déclaration, qui conduit - lors de l'exécution du programme préalablement compilé - à réserver en mémoire de la place pour une donnée (Le pointeur) qui pourra contenir l'adresse d'une autre donnée (on dit qu'il pointe dessus). Ou NULL. Ou n'importe quoi si ce n'est pas initialisé.

            > dans main et entrer_parking

            Et ce pointeur, il servirait à pointer sur quoi ? Une ligne ? Un client (*)? Sa voiture ? Une place de parking ? 

            PS: avant de se précipiter à programmer, il faudrait d'abord définir un modèle de données qui établit les relations entre les diverses entités à propos desquelles on veut conserver des informations.
            Par exemple, je ne comprends pas dans le sujet ce qu'on veut conserver comme informations à propos des voitures qui sont sorties du parking.

            (*) enfin, pas un client : une structure contenant des données représentant les informations que l'on veut mémoriser à propos d'un client.

            -
            Edité par michelbillaud 2 mai 2023 à 11:26:21

            • Partager sur Facebook
            • Partager sur Twitter
              2 mai 2023 à 12:01:03

              Pour tester ton code j'ai modifié le main comme suit :

              int main(void)
              {
                  ligneDEnregistrement tableau_enregistrement[MAX_LIGNES];
              
                  int nb_enregistrement = lecture_csv("exemple.csv", tableau_enregistrement, MAX_LIGNES);
                  printf("nb de parking = %d\n", nb_enregistrement);
                  afficher_enregistrements(tableau_enregistrement, nb_enregistrement);    
                  calculer_stats_parkings(tableau_enregistrement, nb_enregistrement);    
              
                  clients mon_client ;
              
                  entrer_parking(tableau_enregistrement, nb_enregistrement, &mon_client);
              
                  puts(mon_client.plaque_immatriculation);
              
                  return 0;
              }

              J'ai prie la peine de créé un fichier csv pour tester (Quelqu'un t'en avais demandé un tu ne l'as pas donné).

              J'ai changé la taille de la pile (j'aurais pu diminuer la taille du tableau qui fait un peu plus de 7Mo).

              J'ai appelé les différentes fonctions pour les tester.    (dans la fonction chercher_parking ça renvois l'indice du parking sélectionné donc si je choisi le premier ça renvois 0, mais 0 c'est ce que tu choisi pour quitter prématurément la fonction pour parking non trouvé, donc on ne peut pas sélectionner le premier).

              J'ai crée un client mon_client et j'ai envoyé son adresse à la fonction entrer_parking.

              Ici il y a qu'un seul client, dans la réalité il y en aura plusieurs.

              • Partager sur Facebook
              • Partager sur Twitter
              ...
                2 mai 2023 à 14:09:10

                >  taille de la pile

                Avec des champs "chaine" qui font systématiquement 1 Ko (MAX_CHARS), y compris pour mettre des dates qui tiendraient dans un entier 32 bits, (10000*année + 100*mois + jour) c'est pas étonnant que ça pète.

                Normalement, l'intérêt de programmer en C, c'est de pouvoir utiliser efficacement les ressources dont on  dispose : temps, espace, bande passante, etc...  sinon, y a plus facile comme langage pour développer peinard des applications.

                -
                Edité par michelbillaud 2 mai 2023 à 15:53:23

                • Partager sur Facebook
                • Partager sur Twitter

                [Erreur]TP licence info 1ere en C Parking

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown