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 affichage sortie de matrice


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2015
    Messages : 8
    Par défaut Problème affichage sortie de matrice
    Bonsoir,

    Le but de mon programme est de mettre à zéro toutes les cases de ma matrice, mon programme s'exécute mais la matrice ne s'affiche pas dans mon terminal.

    Voici mon main.cpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <iostream>
    #include "graphe.h"
    using namespace std;
     
    int main()
    {
    	graphe g;
    	init_graphe(g);
    }

    Voici mon fichier.h :

    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
    #ifndef GRAPHE
    #define GRAPHE
     
    typedef int mat[52][52];
     
    struct arc_arete
    {
    	char initial; //sommet initial	
    	char finale; //sommet final
    	float poids; //cout de l'arc ou arete
    };
     
    struct graphe
    {
    	int nature_du_graphe; //valeur 0 si graphe orienté et valeur 1 sinon
    	int nb_sommets; //nb de sommets du graphe
    	int nbarcs; //nb d'arc du graphe
    	char liste_sommets[52]; //liste des sommets du graphe
    	arc_arete arcs[100]; //liste des arcs ou aretes du graphe (100 max)
    	mat matriceadjacence;
    };
     
    void init_graphe(graphe &g);
     
    #endif
    Voici ma fonction.cpp

    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
    #include <iostream>
    #include "graphe.h"
    using namespace std;
     
    void init_graphe(graphe &g)
    {
    	int i,j;
    	for (i=0; i<g.nb_sommets; i++)
    	{
    		for (j=0; j<g.nb_sommets; j++)
    		{
    			g.matriceadjacence[i][j]=0;
    			cout<<g.matriceadjacence[i][j]<<endl;
    		}
     
    	}
     
    }
    Merci d'avance de me dire ce qui cloche, j'ai du mal à discerner mes erreurs. Merci.
    Bonne soirée.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 505
    Par défaut
    Merci d'avance de me dire ce qui cloche
    A peu près tout, ça fait au moins 20 ans qu'on ne code plus comme ça en C++.
    Votre code, c'est du C avec des flux.

    j'ai du mal à discerner mes erreurs
    Normal, vous devez avoir un professeur fossile ou qui a obtenu son badge de professeur de C++ en une beuverie d'université en échange d'un badge de professeur de C.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef int mat[52][52];
    C'est quoi ce typedef, WTF ???

    Qui initialise "nb_sommets" ?

    Les constructeurs, c'est pas pour les chiens, donc cette "init_graphe" est une aberration.

    Si vous voulez faire du C++, utilisez des std::array à la place de ces tableaux C-styles (complètement inutile et casse-gueule en C++).

    Pensez à poster votre code avec la base /[CODE/] (le bouton [#]).

    Pensez aussi à indenter correctement votre code.

    Et lisez un livre sur le C++11 ou le C++14, pas un vieux truc qui traine dans les bibliothèques universitaires depuis 20 ans.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2015
    Messages : 8
    Par défaut
    Merci pour tout vos conseils, je vais tâcher de mettre tout ça au propre.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Normal, vous devez avoir un professeur fossile ou qui a obtenu son badge de professeur de C++ en une beuverie d'université en échange d'un badge de professeur de C.
    Bravo, avec des remarques comme çà il va tout de suite mieux comprendre le C++.
    Et tu as oublié de dire que tous ces méchants professeurs d'université étaient aussi responsables des attentats terroristes et du réchauffement climatique...

    @Garrisonn: tu utilises nb_sommets dans init_graphe mais il faut que tu l'initialises avant. Et c'est vrai que ton code est horrible et que tu devrais regarder un bouquin de C++ moderne...
    Dernière modification par Invité ; 23/11/2015 à 23h24.

  5. #5
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Billets dans le blog
    21
    Par défaut
    @Garrisonn: console-toi en te disant qu'on apprend plus de ses erreurs que de ses réussites; maintenant tu sais ce qu'il en coûte de ne pas suivre les principes du C++ et surtout l'un des plus importants:
    Ressource acquisition is initialization (RAII) ou en français: quand on acquiert une ressource, on l'initialise. Tu as réservé une ressource (en l'occurrence un int) sans l'initialiser et tu t'es fait mal. Pour faire face à ce problème, le C++ te donne un outil puissant: les objets et leurs constructeurs.

    Pour un objet défini avec struct ou class, tu peux définir un constructeur qui en initialise les composants. Pour un exemple simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct Point {
      int _x, _y;
      Point() : _x(0), _y(0) {} // un constructeur par défaut qui met x et y à 0
      Point(int x, int y) : _x(x), _y(y) {} // un constructeur pour déterminer les coordonnées du point
    };
    Pour reprendre ton exemple en lui donnant un tour plus C++ (mais il reste du travail à faire):

    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
    // C++
    struct Graphe
    {
    	bool est_oriente; //valeur 1 si graphe orienté et valeur 0 sinon --> modif pour être plus expressif, aucun lien avec le C++
    	int nb_sommets; //nb de sommets du graphe
    	int nbarcs; //nb d'arc du graphe
     
            std::vector<char> liste_sommets; //utilise des vecteurs pour t'éviter des limites de taille artificielles et les parcourir aisément
    	std::vector<arc_aretes> arcs; // idem
    	std::vector<std::vector<int>> matrice; // et en prime tu t'évites les typedef 
     
            Graphe() : est_oriente(true), nb_sommets(8), nbarcs(7), matrice(std::vector<std::vector<int>>(8, std::vector<int>(8, 0))) {} // à moins que tu n'aies d'autres valeurs par défaut évidemment
                                                                                           //  l'initialisation à 0 est faite juste au-dessus ^
     
    };

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    par contre, tu as tout intérêt à ne pas faire de vector de vector.
    au pire, un array de array, et au mieux un vector ou un array.

    Regarde dans la faq les deux entrées sur les matrices:
    pourquoi et comment coder correctement une matrice.

Discussions similaires

  1. Problème affichage matrices
    Par chefaso dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 23/08/2012, 18h51
  2. Problème affichage sortie Weka
    Par sniperpro dans le forum Weka et MOA
    Réponses: 3
    Dernier message: 23/04/2010, 13h49
  3. Réponses: 0
    Dernier message: 13/04/2010, 18h24
  4. Réponses: 3
    Dernier message: 19/12/2009, 21h22
  5. Problème d'affichage d'une matrice
    Par zicoadis dans le forum Débuter
    Réponses: 4
    Dernier message: 26/01/2008, 17h36

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