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 :

Problème de débutant dans les tableaux


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 3
    Par défaut Problème de débutant dans les tableaux
    Bonjour,
    j'ai posté il y a quelque temps une question sur les tableaux dynamiques multidimensionnels... Grace au forum, j'ai compris le problème, et je vous en remercie...

    Seulement voilà, la question portait sur un tableau bidimensionnel, mais avec seulement une dimension dynamique...

    Je procédais alors ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int *monTableau [3];
    monTableau [0] = new int[x];
    monTableau [1] = new int[x];
    monTableau [2] = new int[x];
    A présent, je souhaite allouer les deux dimensions selon une instruction...

    Je procède ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int *monTableau [1];
    monTabeau[0] = new int[x];
    monTableau[x] = new int [y];
    Lorsque je l'écris, le compilateur ne me signale pas d'erreur, mais lorsque je définis des valeurs du tableau, il me donne ces erreurs :
    error C2109: subscript requires array or pointer type
    error C2679: binary '>>' : no operator defined which takes a right-hand operand of type 'float' (or there is no acceptable conversion)
    error C2106: '=' : left operand must be l-value
    Toutes ces erreurs sont présentes sur des lignes où j'utilise le tableau...
    Par exemple, si je mets cin>>monTableau[0][i][j], il me signale une erreur...
    Ou encore, si j'écris quelque chose du genre monTableau [0][i][j] = 5

    Quelqu'un peut-il m'aider ? merci d'avance.

    Edit Alp : Merci d'utiliser les balises code

  2. #2
    Membre éprouvé
    Inscrit en
    Mai 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2007
    Messages : 157
    Par défaut
    Tout d'abord utilise les balises codes pour tes messages, ce sera plus lisible.

    Pour resoudre des problemes de ce niveau, une solution toute simple : FAQ :http://c.developpez.com/faq/cpp/?pag...hoix_conteneur

    Je pense serieusement qu'avec un vecteur de deux int ca ira beaucoup, beaucoup plus vite.

    Maintenant si tu cherches a allouer un tableau dynamiquement, ce n'est pas un int tab[1] qu'il te faut mais un pointeur du type
    int **tab;

    apres il faut allouer pour la premiere dimension et ensuite pour chaque ligne (ou colonne ca depend du point de vue) ...

  3. #3
    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
    Lorsque l'on voit le code que tu écris, on voit des erreurs de base.

    Le mieux est de revoir le chapitre "Tableaux" ainsi que le chapitre "Allocations dynamiques" de ton cours/bouquin de C++.

    Ce n'est pas méchant, c'est juste pour que tu construises des bases solides afin de mieux avancer dans le C++.

  4. #4
    Membre éprouvé
    Inscrit en
    Mai 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2007
    Messages : 157
    Par défaut
    Juste pour te macher le travail, car de temps en temps, on cherche et on trouve pas (je parle pour moi...)

    http://c.developpez.com/faq/cpp/?pag..._new_array_dim

    Bon courage

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 3
    Par défaut Je suis vraiment débutant, il faut m'excuser
    C'est vrai que je suis vraiment un newbie, je programme que depuis 4 mois...

    Je prends volontiers ta critique, Alp, mais mon (mes) bouquins ne parlent pas assez des tableaux dynamiques pour ce que je veux faire... Tu pourrais me citer les erreurs pour que je me corrige ? merci

  6. #6
    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
    Ce n'est pas vraiment une ligne précise qui pose problème.

    Je te conseille de suivre le lien de la FAQ donné plus haut, tu verras un peu comment il faut faire.

    Je te conseille de prendre un bouquin digne de ce nom, ou de regarder les cours dans http://c.developpez.com/cours/, afin de lire les chapitres dont tu as besoin pour comprendre ce dont il s'agit ici.

  7. #7
    Membre éprouvé
    Inscrit en
    Mai 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2007
    Messages : 157
    Par défaut
    Est ce que tu pourrais poster ton code entier car des erreurs ne viennent pas de ce que tu as ecrit...

    Pour te donner une petite idee de ce qui ne va pas, je pense que tu n'as pas forcement compris la logique des pointeurs....

    quand tu cherches a definir un tableau fixe effectivement tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #define TAILLE_TABLEAU 40 
    int main(int argc, char **argv)
    {
        int TableauUneDimension[TAILLE_TABLEAU];
        TableauUneDimension[4] = 90;
    }
    Maintenant a une dimension variable,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int main(int argc, char **argv)
    {	int *tab[10];
    	for(size_t size=0;size<10;size++)
    	{
    		tab[size] = new int(size);
    		tab[size][0] = size; //rempli le premier element de chaque ligne
    		std::cout << tab[size][0] << std::endl;
    	}
    	return 0;
    }
    Maintenant deux dimensions avec une dynamique
    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
    	int *tab[10];
    	unsigned int tabDim=0;
    	std::cout << "Dim:";
    	std::cin>>tabDim;
    	for(size_t size=0;size<10;size++)
    	{
    		tab[size] = new int[tabDim];
    		for (size_t size2 = 0; size2< tabDim;size2++)
    		{
    			tab[size][size2] = size +size2;
    			std::cout << tab[size][size2] << " ";
    		}
    		std::cout << std::endl;
    	}
    	return 0;
    Et pour finir, en appliquant exactement le meme schema, un tableau a deux dimensions, dont les deux valeurs sont saisies par l'utilisateur
    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
    #include <iostream>
    #include <iomanip>
     
    int main(int argc, char **argv)
    {	int **tab;
    	unsigned int tabDim1=0,tabDim2=0;
    	std::cout << "Dim1:";	std::cin>>tabDim1;
    	std::cout << "Dim2:";	std::cin>>tabDim2;
     
    	tab = new int *[tabDim1];
    	for(size_t size=0;size<tabDim1;size++)
    	{
    		tab[size] = new int[tabDim2];
    		for (size_t size2 = 0; size2< tabDim2;size2++)
    		{
    			tab[size][size2] = size +size2;
    			std::cout << tab[size][size2] << " ";
    		}
    		std::cout << std::endl;
    	}
    	return 0;
    }
    Toujours partir d'un exemple basic, comprendre la relation du nom de la variable avec l'element complet (tab est un pointeur de pointeurs de pointeurs!)

  8. #8
    Membre expérimenté Avatar de Twindruff
    Inscrit en
    Janvier 2005
    Messages
    216
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 216
    Par défaut
    Dans les posts que je vois, vous proposez toujours de faire un new/malloc pour chaque ligne du tableau, il serait plus efficace d'allouer un espace pour les n*m éléments et ensuite d'avoir un tableau de pointeurs d'éléments, qui chacun désigne un début de ligne du talbeau 2D.

    Edit: ah c'est ce qui est dans la faq en fait

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 3
    Par défaut Moi et les pointeurs...
    En effet Rikau, j'ai pas tout compris sur les pointeurs... Je suis entrain de revoir le chapitre, mais je m'embrouille pas mal entre le pointeurs, les références, etc...

    Bref, j'ai réécrit la partie qui me posait problème en suivant ce que me dit la faq... Ca marche, mais j'aimerais bien comprendre ce que j'écris. Enfin ça viendra avec le temps, j'espère.

    Si ca vous intéresse toujours voila la partie du code dans son ensemble :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            int nbCI;
    	cout<<"Entrez le nombre de charges indirectes a repartir : ";
    	cin>>nbCI;
    	cout<<endl;
     
     
    	float **tRP =0;
    	tRP = new float* [nbS];
    	  for ( int dim_allouee = 0; dim_allouee < nbS; dim_allouee++)
        {
           tRP[dim_allouee] = new float [nbCI];
        }
    ... Comme ça, ca a l'ait très bancal... Dans ma tête c'est la même chose... Mais bon.
    En tout cas, merci pour votre aide, j'ai quand même fait un petit progrès grâce à vous...

Discussions similaires

  1. problème dans les tableaux
    Par mido1951 dans le forum C
    Réponses: 22
    Dernier message: 05/03/2013, 21h29
  2. Probléme Bizzare dans les tableaux
    Par amine008 dans le forum Développement Windows
    Réponses: 2
    Dernier message: 27/10/2010, 10h13
  3. [WD-2003] Problème de tailles fixes dans les tableaux
    Par ptitmau dans le forum VBA Word
    Réponses: 9
    Dernier message: 17/08/2010, 21h24
  4. Petit problème de débutant avec les tableaux
    Par crazy_zakaria dans le forum Débuter
    Réponses: 10
    Dernier message: 20/11/2009, 10h25
  5. [VB.NET] [Débutant] Probléme de variable dans les requettes
    Par Silvia12 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/03/2005, 13h13

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