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 � dimension variable


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    �tudiant
    Inscrit en
    D�cembre 2005
    Messages
    53
    D�tails du profil
    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 53
    Par d�faut tableau � dimension variable
    bonjour, j'essaye de faire un programme qui r'ealise la transform�e d'ADAMAR,
    en fait c'est l'histoire d'une matrice carr�e d'ordre 2 puissance n g�n�r�e � l'aide d'une matrice car�e d'ordre 2 puissance n-1.
    voila ma question: comment cr�er un tableau qui gere �a? j'ai essay� les pointeurs
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    int **TabOrdN, **TabOrd2N, ord;
    for(int i=0;i<ord,i++)  for(int j=0;j<ord,j++)
    {
      TabOrd2N[i][j]=TabOrdN[i][j];     TabOrd2N[i+ord][j]=TabOrdN[i][j];
      TabOrd2N[i][j+ord]=TabOrdN[i][j];     TabOrd2N[i+ord][j+ord]= -TabOrdN[i][j];
    }
    mais ca me donne des resultats bizzares ( ╝╝+�♣◘○♠♥�,♦☺�╚╔┼█)

  2. #2
    Membre �clair�
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Par d�faut
    t'as bien sur allou� toutes les cases de tes matrices ?

  3. #3
    Membre confirm�
    �tudiant
    Inscrit en
    D�cembre 2005
    Messages
    53
    D�tails du profil
    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 53
    Par d�faut
    c'est justement �a le probleme combien de cases allouer puisque la taille sera variable? je voudrais faire quelque chose de r�current

  4. #4
    Membre �clair� Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Par d�faut
    Salut,

    Je ne connais pas cet algoritme mais l� d�j�
    les 2 boucles for cote � cote c pas trop bon, de m�me
    que les d�r�f�rencement ??? des pointeurs.
    Je suis d'ailleur �tonn� que �a compile!
    Essaies plut�t un truc comme �a;
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    int **TabOrdN, **TabOrd2N, ord;
    for(int i=0;i<ord,i++)  
    {
      TabOrd2N[i][j]=TabOrdN[i][j];     
      TabOrd2N[i][j+ord]=TabOrdN[i][j];    
     
      for(int j=0;j<ord,j++)
      {
       TabOrd2N[i+ord][j]=TabOrdN[i][j];
       TabOrd2N[i+ord][j+ord]= -TabOrdN[i][j];
      }
    }
    je ne sais pas si c'est l'algo que tu cherche mais c plus clair.
    Pour ce qui est des tableau redimensionnables je te conseillerais
    d'utiliser plut�t les vector de la stl, il y aura moins de risque d'erreurs.

  5. #5
    Membre �clair�
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Par d�faut
    Citation Envoy� par tintin72
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    int **TabOrdN, **TabOrd2N, ord;
    for(int i=0;i<ord,i++)  
    {
      TabOrd2N[i][j]=TabOrdN[i][j];     
      TabOrd2N[i][j+ord]=TabOrdN[i][j];    
     
      for(int j=0;j<ord,j++)
      {
       TabOrd2N[i+ord][j]=TabOrdN[i][j];
       TabOrd2N[i+ord][j+ord]= -TabOrdN[i][j];
      }
    }
    vous faites un concours la c'est �a ?

  6. #6
    Membre confirm�
    �tudiant
    Inscrit en
    D�cembre 2005
    Messages
    53
    D�tails du profil
    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 53
    Par d�faut
    je crois que ton algo fais la meme chose, c'est vrai que c'est plus clair, je vais essayer avec stl, merci..

  7. #7
    Membre �clair�
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Par d�faut
    Citation Envoy� par akfp85
    je crois que ton algo fais la meme chose, c'est vrai que c'est plus clair, je vais essayer avec stl, merci..
    tu rigoles ? il n'a plus rien a voir, et surtout j est d�clar� dans la deuxieme boucle.. C'est n'importe quoi ce qu'il a mis !

    enfin bon, un type matrice c'est quand meme pas compliqu� a r�aliser si ?
    si tu fais un int** TU DOIS L'ALLOUER, sinon �a saute.

    je te conseille de prendre des cours sur les bases des pointeurs avant de te lancer dans tes calculs de matrice

  8. #8
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Des r�ponses group�es...

    Citation Envoy� par akfp85
    en fait c'est l'histoire d'une matrice carr�e d'ordre 2 puissance n g�n�r�e � l'aide d'une matrice car�e d'ordre 2 puissance n-1.
    voila ma question: comment cr�er un tableau qui gere �a? j
    boost.uBLAS, Blitz++, MTL, newMat, ... comme d'hab quoi.

    Pour les tableaux "rectangulaires" (pas matrices) -> boost.multi_array

    Pour les tableaux "irr�guliers" -> std::vector<std::vector<T> >

    Pour les exercices -> cerveau - crayon - papier

    La FAQ C (qui en plus ne g�re pas les cas d'erreurs) pour g�rer ces structures, c'est moyen ... en C++.

    tu peux toujours r�allouer avec realloc
    Attention, realloc() est vicieux, si �a foire, cela retourne 0. Et il ne faut pas oublier de lib�rer la m�moire en passant par des temporaires...


    Une fonction r�cursive est une fonction qui s'appelle...


    @ Koala. Ton premier code �-la-C pr�sente plusieurs probl�mes
    - il peut fuir si une erreur d'allocation survient en cours de redimensionnement
    - Il fuit car sa lib�ration de la structure initiale est partielle.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  9. #9
    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
    Citation Envoy� par Luc Hermitte
    <snip>

    Une fonction r�cursive est une fonction qui s'appelle...
    Je voulais dire par l� qu'elle pouvait tres facilement etre transform�e en r�cursive si besoin �tait... j'aurais du le dire diff�remment (mea maxima culpa )

    Citation Envoy� par Luc Hermitte
    @ Koala. Ton premier code �-la-C pr�sente plusieurs probl�mes
    - il peut fuir si une erreur d'allocation survient en cours de redimensionnement
    - Il fuit car sa lib�ration de la structure initiale est partielle.
    De fait... Je mets correction ici, pour laisser la pertinence � ta remarque (mais o� avais-je la tete :oops )

    Par contre, en relisant le code (qui n'avait pas �t� test� � la compilation, je viens, en plus, de remarquer quelques erreurs de syntaxe que je corrige partout
    Code C++ : 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
    int** Agrandit(int** depart)
    {
        try
        {
            int** tempo=new int*[taille+1];
            for(int i=0;i<taille;i++)
            {
                 //allocation des colone, puis copie des �l�ments d�j� connus
                 tempo[i]=new int[taille+1]
                 for(int j=0;j<taille;j++)
                 {
                     tempo[i][j]=depart[i][j];
                 }
                 //d�claration de l'�l�ment surnumeraire pour la ligne envisag�e
                 tempo[i][taille]= whatyouwant;
            }
        }
        //pour r�cup�rer les diff�rentes erreurs qui auraient pu survenir
        //(principalement les erreurs d'allocation)
        catch(...)
        {
             //l'affichage d'un message pourrait etre sympa, vraissemblablement
             // au travers de stc::cerr...
             // renvoie la matrice non modifi�e
             return depart;
    //NOTA: typiquement, new renvoie une exception de type 
    // std::bad_alloc(), que l'on pourrait utiliser dans le catch 
    // (sous la forme decatch(std::bad_alloc &e) ) mais il faut alors penser � 
    //inclure le fichier d'entete <stdexcept>
        }
        // lib�ration de la m�moire utilis�e par la matrice de d�part AVANT de
        // perdre l'adresse m�moire � laquelle elle commence
        for(int i=0;i<taille;i++)
        {
            //D'abord les colones
            int* supress=depart[i];
            delete[] suppress;
        }
        //puis les lignes
        delete[] depart;
        ++taille;
        return tempo;
    }
    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

  10. #10
    Expert confirm�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    D�cembre 2003
    Messages
    3 549
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (�le de France)

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

    Informations forums :
    Inscription : D�cembre 2003
    Messages : 3 549
    Par d�faut
    Sauf que si c'est la premi�re allocation qui produit une erreur, il faut pas lib�rer toutes les autres.
    Le plus simple est de loin d'utiliser std::vector<int>.

  11. #11
    Membre �clair�
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par d�faut
    Bonjour,

    et qu'est ce qu'en pense l'autur du message de toutes ces r�ponses ?

    Au d�part j'avais sugg�r� des r�ponses en utilisant des fonctions C, car le code donn� laissait sous-entendre un besoin de comprendre ce qu'�tait l'allocation de tableaux 2D, et les pointeurs ...
    avant de passer � l'utilisation des librairies C++, et des tableaux vector ...

    Mais bon ... peut �tre me suis-je tromp� ?
    C'est clair que les vector seraient une bonne solution.

    @+

Discussions similaires

  1. tableau de dimension variable
    Par kapaty dans le forum C
    R�ponses: 6
    Dernier message: 05/03/2010, 00h00
  2. R�ponses: 11
    Dernier message: 11/06/2008, 18h05
  3. tableau � dimension variable
    Par bubuche87 dans le forum D�buter
    R�ponses: 6
    Dernier message: 20/11/2007, 20h21
  4. tableau � dimension variable
    Par dnmfaw dans le forum D�buter
    R�ponses: 5
    Dernier message: 10/09/2007, 18h09
  5. [d�butant] un tableau de dimension variable selon l'objet qui le contient
    Par Epistocles dans le forum Collection et Stream
    R�ponses: 5
    Dernier message: 09/01/2007, 18h07

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