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 :

Changer la taille d'un tableau déjà initialisé


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 47
    Par défaut Changer la taille d'un tableau déjà initialisé
    Bonjour
    Je souhaite créer un programme qui aurait un certain nombre d'entrées dans un tableau. comme l'utilisateur serait amené à ajouter/supprimer des entrées, je cherche à faire un script qui ne limite pas à un certains nombre d'entrées max. J'ai donc cherché à voir s'il éxistait des script pour redimensionner des tableaux. J'ai trouvé un petit script sur que j'ai modifié à la fin avec la fonction realloc();

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
        {
            int nbl, nbc,j, i;
            int **tableau;
     
            printf("\n saisir le nombre de lignes :");
            scanf("%d",&nbl);
            printf("\n saisir le nombre de colones :");
            scanf("%d",&nbc);
     
            tableau = (int **)malloc(nbl * sizeof(int *));
            if (tableau == NULL)
                printf("\nEchec lors de l'allocation memoire!!!");
     
            for (int i=0;i<nbl;i++)
                {
                    tableau[i] = (int *)malloc(nbc * sizeof(int));
                    if (tableau[i] == NULL)
                        {
                            for (int j=0;j<i;j++)
                               {
                                   free(tableau[j]);
     
                                   printf("\n Echec lors de l'allocation memoire!!!");
                               }
                        }
                }
     
            // on remplis le tableau de chiffres 1 *****************
            for(i=0;i<nbc;i++)
                {
                    for(j=0;j<nbl;j++)
                        {
                            tableau[i][j]=1;
                        }
                }
            //on l'affiche *************************
            for(i=0;i<nbc;i++)
                {
                    for(j=0;j<nbl;j++)
                        {
                           printf(" %d ",tableau[i][j]);
                        }
                    printf("\n");
                }
     
     
    // pour l'instant je ne redimensionne que le nombre de lignes
            printf("\n resaisir le nombre de lignes :");
            scanf("%d",&nbl);
            realloc(*tableau, nbl);
            //on l'affiche *************************
            for(i=0;i<nbc;i++)
                {
                    for(j=0;j<nbl;j++)
                        {
                           printf(" %d ",tableau[i][j]);
                        }
                    printf("\n");
                }
     
            scanf("%d",&i);
        }
    Mais en sortie, si je spécifie au début un tableau de 10x10 et qu'ensuite je veux le redimensionner à 9, voici ce qui est affiché :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    resaisir le nombre de colonnes :9
    1  1  1  1  196611  0  2228624  2228624  1
    1  1  1  1  1  1  1  1  1
    1  1  1  1  1  1  1  1  1
    1  1  1  1  1  1  1  1  1
    1  1  1  1  1  1  1  1  1
    1  1  1  1  1  1  1  1  1
    1  1  1  1  1  1  1  1  1
    1  1  1  1  1  1  1  1  1
    1  1  1  1  1  1  1  1  1
    1  1  1  1  1  1  1  1  1
    Comment ça se fait ?


    Sinon, si par exemple je veux supprimer la ligne n°5, comment faire pour que le tableau se réindexe ? (que les numéros suivants soient décrémentés de 1)

    Merci
    totofweb

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    La solution à ton problème est très simple : utilise la classe standard std::vector<> qui est là exactement pour faire ce genre de boulot.

    La doc : http://www.sgi.com/tech/stl/Vector.html

    Un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <vector> // le bon en-tête
     
    std::vector<int> v; // création d'un tableau d'entiers vide
     
    v.push_back(1); // ajout d'éléments
    v.push_back(2);
    v.push_back(3)
     
    v.resize(10, 50); // redimensionne le tableau : 10 éléments initialisés avec la valeur 50
     
    v[5] = 0; // accès indéxé
     
    // etc...
    Pour des tableaux à 2 dimensions tu peux faire un vector<vector<int> >, ou bien télécharger une bibliothèque qui s'occupe encore mieux de ça.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 47
    Par défaut
    Ok merci beaucoup.

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

Discussions similaires

  1. Changer la taille d'un tableau
    Par Abyssin dans le forum VB.NET
    Réponses: 2
    Dernier message: 22/02/2012, 22h37
  2. Réponses: 1
    Dernier message: 25/03/2010, 00h18
  3. comment rendre changer la taille d'un tableau
    Par Khalid.bounouader dans le forum ASP.NET
    Réponses: 4
    Dernier message: 18/09/2008, 23h39
  4. Changer la taille de police dans un tableau
    Par Steinz dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 2
    Dernier message: 31/05/2008, 13h32
  5. Changer la taille d'un tableau dynamique
    Par clem1313 dans le forum Langage
    Réponses: 1
    Dernier message: 28/02/2006, 01h57

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