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 :

Parcours d'un tableau à deux dimension.


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 77
    Par défaut Parcours d'un tableau à deux dimension.
    Bonjour,

    Je dois parcourir les colonnes ou rangées d'un tableau à deux dimensions pour trouver la valeur maximale d'une colonne ou rangée et je me demande qu'elle serait la meilleur façon de le faire. Actuellement, j'ai écrit une fonction qui parcours une rangee ou une colonne spécifique en fonction d'un paramètre :

    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
     
    int parcours(..., int type, int *rangee, int *colonne)
    {
                ...
     
     
    	for(int i = 0; i < DIMENSION; ++i)
    	{
    		switch(type)
    		{
    			case RANGEE :
    				*colonne = i;
    				break;
     
    			case COLONNE :
    				*rangee = i;
    				break;
    		}
    		...
    	}
     
    ...
    }
    Mais je trouve cela lourd... Existe-t-il une meilleur façon de procéder? Peut-être à l'aide des pointeurs?

    P.S je dois absolument utiliser un tableau à deux dimensions...

    Merci beaucoup...

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Sais tu qu'il n'y a rien de plus proche d'un tableau à deux dimensions qu'un tableau à une seule contenant ligne*colone éléments
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 77
    Par défaut
    Bonjour,

    Effectivement, mais je dois absolument utiliser un tableau à deux dimension alloué dynamiquement....

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Mais rien ne t'empêche d'allouer dynamiquement un tableau à une seule dimension qui fonctionne de la même manière qu'un tableau à plusieurs dimensions...:

    Que tu travailles sous une forme proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int **tab;
    tab=new int*[20];
    for(size_t i=0;i<20;i++)
        tab[i]=new int[30];
    /*...*/
    ou sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int *tab;
    tab=new int[20*30];
    /*...*/
    cela reviendra au final au même...

    La seule différence sera que, d'un coté tu accédera à l'élément sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int elem=tab[3][5];
    et que de l'autre coté, tu y accédera sous la forme de
    Mais le gros avantage résidera dans l'utilisation courante
    • tu ne dois pas utiliser un pointeur de pointeur pour disposer de ta matrice
    • l'allocation et la libération des ressources se font en une seule fois
    • ...

    En effet, le fait de devoir gérer réellement les deux dimensions séparément pose un problème dés l'allocation de la mémoire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int **tab;
    tab= new *int[ligne];
    for( size_t i=0;i<ligne;i++)
    {
        tab[i]=new int[colone];
        /* que va-t-il se passer si l'allocation échoue ??? */
    }
    et on retrouve le problème de devoir gérer la libération des colones avant celle de la matrice:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    /* obligatoire pour éviter les fuites mémoire */
    for(size_t i=0;i<ligne;i++)
    {
        delete[] tab[i];
    }
    /* pour enfin libérer la mémoire allouée à la matrice */
    delete [] tab;
    alors que le fait de gérer sa matrice comme si elle était qu'un vecteur tout simple permet de tout faire en une seule passe (tant que la mémoire est suffisante):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int *tab;
    /* allocation en une seule passe */
    tab=new int[ligne*colone];
    /*...*/
    /* libération en une seule passe */
    delete [] tab;
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Et l'utilisation de std::vector, tu en dis quoi ?

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 77
    Par défaut
    Je ne peux utiliser la classe vector....


    J'aime bien l'idée de koala01, je vais vérifier si je peux utiliser un tableau à une seule dimension...

    Merci beaucoup...

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

Discussions similaires

  1. Parcours d'une matrice/tableau à deux dimensions
    Par yal001 dans le forum Mathématiques
    Réponses: 5
    Dernier message: 20/11/2008, 14h59
  2. Affichage d'un tableau à deux dimensions.
    Par Allan dans le forum C
    Réponses: 3
    Dernier message: 11/12/2005, 18h29
  3. Réponses: 1
    Dernier message: 18/11/2005, 11h38
  4. tri alphabétique dans un tableau deux dimensions
    Par *!!cocco!!* dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 06/12/2004, 21h38
  5. Passage d'un tableau à deux dimensions
    Par karl3i dans le forum C
    Réponses: 3
    Dernier message: 20/10/2003, 14h50

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