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 :

afficher la diagonale d'une matrice carrée


Sujet :

C++

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 105
    Points : 198
    Points
    198
    Par défaut afficher la diagonale d'une matrice carrée
    je veux écrire une fonction qui affiche les les éléments du dioganole d'une matrice carre

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void PRINTF(int *t,int n)
    {
        int i ,j ;
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            if(i==j)
                cout<<t[i][j]<<"|" ;
        }
    }
    le compilateur me déclare :

    error: invalid types 'int[int]' for array subscript
    des solution s'il vous plait

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Salut,

    t est déclaré int* t, tu ne peux donc pas avoir une utilisation de la forme t[i][j], tu as une indirection de trop.
    Soit ta déclaration de t doit être int** t soit tu n'utilises qu'un index.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2016
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 105
    Points : 198
    Points
    198
    Par défaut
    merci mais quand j'essai d'utiliser la fonction pour un tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int t[4][4]={{2,5,6,8},{4,5,6,8},{4,5,6,9},{1,10,2,33}} ;
    PRINTF(t,4);
    le compilateur me déclare :
    error: cannot convert 'int (*)[4]' to 'int**' for argument '1' to 'void PRINTF(int**, int)'

  4. #4
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 471
    Points : 6 109
    Points
    6 109
    Par défaut
    Bonjour,

    Voici la solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <iostream>
     
    void PRINTF(const int* t, int n)
    {
        for(int i = 0; i < n*n; i += n+1)
            std::cout << t[i] << "|";
    }
     
    int main(int argc, char **argv)
    {
        int t[4][4]={{2,5,6,8},{4,5,6,8},{4,5,6,9},{1,10,2,33}};
        PRINTF(*t, 4);
    }
    Remarque : Une solution avec un pointeur vers pointeur d'entier ressemblerait à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <iostream>
     
    void PRINTF(const int* const* tab, int n)
    {
        for(int i = 0; i < n; ++i)
            std::cout << tab[i][i] << "|";
    }
     
    int main(int argc, char **argv)
    {
        int t[4][4]={{2,5,6,8},{4,5,6,8},{4,5,6,9},{1,10,2,33}};
        int* tab[4] = {t[0],t[1],t[2],t[3]}; // tableau de 4 int*
        PRINTF(tab, 4);
    }

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Le mieux serait encore d'utiliser std::vector, quitte à avoir un std::vector<std::vector<int>> dans un premier temps. Faire du C++ ce n'est pas utiliser std::cout au lieu de printf.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

Discussions similaires

  1. Probleme de rafraichissement d'un BDGrid
    Par marmotte dans le forum Bases de données
    Réponses: 10
    Dernier message: 28/05/2004, 18h07
  2. Réponses: 2
    Dernier message: 30/05/2002, 08h54
  3. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01
  4. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50
  5. [Kylix] Probleme de nombre flottant!!
    Par yopziggy dans le forum EDI
    Réponses: 5
    Dernier message: 02/05/2002, 10h13

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