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 :

tableau dynamique


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Deficient visuel
    Inscrit en
    Mai 2019
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Deficient visuel

    Informations forums :
    Inscription : Mai 2019
    Messages : 196
    Points : 37
    Points
    37
    Par défaut tableau dynamique
    Dans le main , lors de ma declaration de mon tableau tab , je suis obligé de rentrer une valeur entre crochet ? La j'ai mis un maximum de 20 valeurs par l'intermediaire de MAX mais le nombre de valeur rentrée dépendra du nombre d'article demandé . Je suis pas sur d'avoir été clair dans ma question
    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
    #include <stdio.h>
    #include <stdlib.h>
    #define MAX 20
     
    int nb_article(){
     int nb;
     do{
       printf("Nombre d'article voulu:\n");
       scanf("%d",&nb);
       }while(nb<5);
    return nb;
    }
     
     
    void taille(int t,int tab[]){
     int i;
     for(i=0;i<t;i++){
      printf("Entrez une taille:");
      scanf("%d",&tab[i]);}
    }
     
    int main(){
     int tab[MAX];
     int nombre,i;
     
     nombre=nb_article();
     taille(nombre,tab);
     
     printf("Le nombre d'article choisi est de:%d\n",nombre);
     printf("Les tailles choisis sont:\n");
     for(i=0;i<nombre;i++)
      printf("%d\n",tab[i]);
      puts("\n");
     return 0;
    }

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    En C, pour obtenir un tableau dynamique (dont la taille n'est connue que lors de l'exécution), il faut utiliser la fonction malloc (et free). malloc demande à votre système d'exploitation d'attribuer de la mémoire pour votre programme. free permet de lui rendre (pour qu'il puisse la réutiliser pour d'autres programmes/choses).

    Du coup, ça donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int* tab = malloc(MAX * sizeof(*tab));
    if(tab == NULL)
    {
        printf("Erreur d'allocation\n");
        return -1;
    }
    // ...
    // exemple d'utilisation :
    // tab[1] = 10
    free(tab);
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par chris7522 Voir le message
    Dans le main ,
    Bonjour à toi aussi
    Citation Envoyé par chris7522 Voir le message
    lors de ma declaration de mon tableau tab , je suis obligé de rentrer une valeur entre crochet ?
    Tu as trois façons de programmer ce genre d'algo

    La plus sécurisée: tu fais comme l'a dit LittleWhite: tu récupères la taille nécessaire puis tu alloues de la mémoire en quantité suffisante pour stocker un tableau de cette taille. Tu dois obligatoirement prévoir le cas où cette allocation ne peut pas se faire (enfin pas pour un simple TP mais je parle d'un vrai programme industriel) et donc coder une solution alternative (généralement on arrête le traitement et on remonte une info pour prévenir l'appelant comme le montre LittleWhite) et aussi coder la libération du tableau.
    Là encore ça le fait assez facilement car le tableau est en une dimension mais quand tu commences à entrer dans la 2D (par exemple un tableau de chaines) ça devient vite coton à programmer (surtout la partie où tu veux allouer 50 chaines et où l'allocation plante à la 49°)...

    La plus simple: tu considères que dans un traitement normal, il n'y aura pas plus de "MAX" éléments et tu définis ce "MAX" de façon arbitraire (comme tu l'as fait). Tu peux aussi renforcer la fonction qui saisit le nombre d'articles pour que l'utilisateur ne puisse pas mettre plus que "MAX". Et si demain "MAX" change, tu n'as qu'une modif à faire et recompiler pour que tout ton code s'adapte à la nouvelle valeur.

    Une 3° qui se veut comme la première en simplifié: les VLA (Variable Length Array). C'est un truc assez récent du C où tu as le droit d'écrire par exemple n=nb_article(); int tab[n]. Le souci de cette 3° méthode c'est que si la réservation de place ne peut pas se faire, tu n'as aucun moyen de le savoir et ton programme explose en vol. Bref ce n'est pas un truc que je recommande mais bien entendu tout dépend toujours de la criticité de ton programme. Si c'est une démo style "TP école" ok mais si ça doit gérer le calculateur d'un MCAS...
    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]

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Deficient visuel
    Inscrit en
    Mai 2019
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Deficient visuel

    Informations forums :
    Inscription : Mai 2019
    Messages : 196
    Points : 37
    Points
    37
    Par défaut
    Bien compris . Merci a tous d' avoir pris le temps pour toutes ces explications

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/03/2015, 18h31
  2. récupérer la memoire et tableau dynamique
    Par Guigui_ dans le forum Langage
    Réponses: 6
    Dernier message: 06/01/2003, 08h02
  3. AFFICHER UN TABLEAU DYNAMIQUE
    Par ghassenus dans le forum Langage
    Réponses: 2
    Dernier message: 28/12/2002, 14h19
  4. [Kylix] tableau dynamique
    Par sdoura2 dans le forum EDI
    Réponses: 1
    Dernier message: 31/10/2002, 08h57
  5. Réponses: 4
    Dernier message: 13/05/2002, 16h43

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