Partage
  • Partager sur Facebook
  • Partager sur Twitter

Allocation dynamique

Sujet résolu
    13 octobre 2020 à 15:21:42

    Bonjour 

    Je ne voit pas comment résoudre cette énocé, serai t il possible d'avoir un peu d'aide ?

    Écrire une fonction d’allocation mémoire et d’initialisation d’un tableau de n Date, avec n passé en paramètre.

    • Partager sur Facebook
    • Partager sur Twitter
      13 octobre 2020 à 15:29:59

      On ne connait pas tes connaissance dans le langage C, il faudrait donc nous donner une base pour t'aider (un code de départ par exemple).

      Il faudrait donc poser une question un peu plus précise sur ce que tu ne comprends pas (l'allocation, les fonctions, etc...).

      • Partager sur Facebook
      • Partager sur Twitter
        14 octobre 2020 à 14:33:11

        Bonjour 

        En faite je doit stocker une structure dans un tableau de n valeur 

        typedef struct
        {
            int jour;
            int heure;
            int minutes;
            double secondes;
        }Date;
        
        void Sasie(Date X)
        {
            printf("Jour =");
            scanf("%d",&X.jour);
            printf("Heure =");
            scanf("%d",&X.heure);
            printf("Minutes =");
            scanf("%d",&X.minutes);
            printf("Secondes =");
            scanf("%lf",&X.secondes);
            printf("%d/7  %d:%d:%f ",X.jour,X.heure,X.minutes,X.secondes);
        }
        
        void Allocation(int n,int t[])
        {
            Date e;
            int i = 0;
            t[i]=(int*)malloc(n*sizeof(int));
            for (; i < n; i++) {
                t[i]=Date;
            }
        }
        
        

        J ai commencé par ca mais j'ai une erreur et je vois pas comment faire .

        • Partager sur Facebook
        • Partager sur Twitter
          14 octobre 2020 à 15:11:34

          Salut ChristMstg,

          Tu utilises cette struct :

          typedef struct
          {
              int jour;
              int heure;
              int minutes;
              double secondes;
          }Date;

          En C standard, on dispose du type standard time_t pour stocker des dates (accessible par l'entête time.h), et on utilise les struct tm et mktime() pour initialiser des dates.

          http://www.cplusplus.com/reference/ctime/

          Si tu dois utiliser une struct car il s'agirait d'un exercice imposé, les membres et types de la struct me semblent bizarres.

          En dehors de cela, voici quelques observations sur ta fonction Sasie() :

          • cette fonction ne peut pas servir à initialiser la struct X, car tu passes une copie de la struct en paramètre
          • il faut passer un pointeur sur la struct
          • et à l'intérieur de la fonction accéder aux membres de la struct avec l'opérateur -> et non pas le point
          • il manque sans doutes une lettre "i" au nom de ta fonction ;-)

          Sur la fonction Allocation(), ce que tu fais est incompréhensible. Peux tu nous expliquer ce qu'elle est sensée faire ?

          -
          Edité par Dlks 14 octobre 2020 à 15:12:56

          • Partager sur Facebook
          • Partager sur Twitter
            14 octobre 2020 à 15:27:21

            ChristMstg a écrit:

            J ai commencé par ca mais j'ai une erreur et je vois pas comment faire .

            Si il y a une erreur, à défaut de voir comment faire, tu vois un message d'erreur.

            • quel message ?
            • qu'est-ce que tu ne comprends pas dans ce que dit le message ?

            -
            Edité par michelbillaud 14 octobre 2020 à 15:28:14

            • Partager sur Facebook
            • Partager sur Twitter
              14 octobre 2020 à 15:32:43

              Tu ne devrais pas faire l'affichage de la saisie dans la fonction saisie. En principe une fonction ne doit faire qu'une seule chose.

              D'ailleurs, si tu avais fait l'affichage en dehors de la fonction, tu te serais aperçu que ta fonction saisie avait un problème.

              • Partager sur Facebook
              • Partager sur Twitter
                15 octobre 2020 à 19:16:26

                Bonsoir 

                oui en effet je me suis rendu compte de ma betise et changeait 2 , 3 truc 

                #include <stdio.h>
                #include <stdlib.h>
                /* Exo 1 */
                
                void Exo1()
                {
                    int a =33;
                    int *b ;
                    printf("Adresse de a: %p\n",a);
                    printf("Valeur de a: %d\n\n",a);
                    printf("La variable b pointe maintenat sur a .\n");
                    b=&a;
                    printf("Adresse d b: %p\n",b);
                    printf("Valeur de b: %d\n\n",*b);
                    printf("La variable affectee à la variable a est maintenant 10 .\n");
                    a=10;
                    b=&a;
                    printf("Adresse de b: %p\n",b);
                    printf("Valeur pointee par b: %d\n\n",*b);
                    printf("La valeur pointee pat la variable b vaut maintenat 20\n");
                    *b=20;
                    printf("Adresse de a: %p\n",a);
                    printf("Valeur de a: %d\n\n",a);
                
                }
                
                // Exo 2
                // MAlloc car tu peux pas retourner une adresse qui s'autodetruit
                
                /* Exo 3 */
                typedef struct
                {
                    int jour;
                    int heure;
                    int minutes;
                    double secondes;
                }Date;
                
                void Sasie(Date *X)
                {
                    scanf("%d",&X->jour);
                
                    scanf("%d",&X->heure);
                
                    scanf("%d",&X->minutes);
                
                    scanf("%lf",&X->secondes);
                }
                
                
                
                Date*Allocation(int n)
                {
                    Date *T;
                    T=(Date *)malloc(n*sizeof(Date));
                    if (T!=NULL){
                        for (int i = 0; i < n; i++) {
                            Sasie(&(T[i]));
                        }
                    }
                }
                
                
                int main()
                {
                    Date *A;
                    int n;
                    scanf("%d",&n);
                    Allocation(n);
                }
                
                
                
                
                
                • Partager sur Facebook
                • Partager sur Twitter
                  15 octobre 2020 à 19:54:06

                  Ta fonction Allocation, elle n'est pas terminée ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 octobre 2020 à 10:21:07

                    Si justement mais rien ne ce passe
                    • Partager sur Facebook
                    • Partager sur Twitter
                      19 octobre 2020 à 12:10:11

                      Et que veux-tu qu'il ce passe ?

                      Tu saisies bien les valeurs, mais elles restent enfermées dans la fonction à jamais !

                      Si tu veux les externaliser, il faut les retourner à la fin de la fonction. Si tu as mis un type de retour pointeur sur Date, c'était surement ce que tu envisageais !

                      PS : Change moi le nom de cette fonction sasie en saisie, c'est agaçant !  

                      -
                      Edité par rouloude 19 octobre 2020 à 12:12:24

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Allocation dynamique

                      × 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