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 :

exercice : Matrice en c++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 24
    Par défaut exercice : Matrice en c++
    salut tous le monde
    je suis un nouveau membre dans ce forum et je suis vraiment impressioné par le progrès qu'il a eu grâce à vous cher développeurs
    aprés j'aimerai bien avoir une réponse de votre part sur un exercice de TD de langage C++.je coince sur une manipulation des pointeurs
    dans l'exo je doit faire une fonction:
    -int** ConstructionMatrice(int n, int p) permettant d’allouer dynamiquement de la mémoire pour
    une matrice M à n lignes et p colonnes.
    - void RemplitMatrice(int** M, int n, int p) permettant de faire remplir la matrice M par l’utilisateur.
    - void A cheMatrice(int** M, int n, int p) permettant d’a cher la matrice à l'écran.ffi ffi- int** AdditionneMatrice(int ** M,int n, int p, int **N, int m, int q) permettant d’additionner deux matrices
    voilà le code source que j'ai fait et malheureusement ça plante:

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    #include <iostream>
    using namespace std;
    int** ConstructionMatrice(int n, int p){
          int i;
          int** tab;
       tab=new int*[n];                     //  déclaration la fonction qui fait l'allocation de la matrice
          for(i=1;i<=n;i++){
          tab[i]=new int[p];}
          return tab;}
          void RemplitMatrice(int** tab, int n, int p)   // déclaration de la fonction  permettant de faire remplir la matrice M par 
                                                          // l’utilisateur
          {  
               int i,j;
               for(i=1;i<=n;i++){
               for(j=1;j<=p;j++){
               cout<<"tab["<<i<<"]"<<"["<<j<<"]      :";
               cin>>tab[i][j];
               cout<<endl;}}}
          void AfficheMatrice(int** tab, int n, int p){     // fonction qui permet d'afficher une matrice entrée en parametre
               int i,j;
               for(i=1;i<=n;i++){
               for(j=1;j<=p;j++){cout<<tab[i][j]<<"   ";}
               cout<<endl;}}
         int** AdditionneMatrice(int ** M,int n, int p, int **N, int m, int q){    // fonction qui additionne deux matrice passé en parametre
               int i,j;
               if(n==m && p==q){
     
               int **tab= ConstructionMatrice(n,p);  //j'alloue l'espace mémoire pour le pointeur de retour tab
               for(i=1;i<=n;i++){
               for(j=1;j<=p;j++){
               tab[i][j]=M[i][j]+N[i][j];
               }}
               return tab;}
               }
     
        main(){
        int n,p,m,q;
        cout<<"entrer le nombre de ligne"<<endl;
        cin>>n;
        cout<<"entrer le nombre de colonne"<<endl;
        cin>>p;
        int**temp= ConstructionMatrice(n,p); // là je construit un poiteur sur un tableau à deux dimensions
        RemplitMatrice(temp,n,p);     //remplissage de la matrice premiere matrice
        AfficheMatrice(temp,n,p);//  affichage de la premiere matrice
        cout<<"entrer le nombre de ligne"<<endl;
        cin>>m;
        cout<<"entrer le nombre de colonne"<<endl;
        cin>>q;
        int**temp1=ConstructionMatrice(m,q);   //contruction d'un deuxieme pointeur
        RemplitMatrice(temp1,m,q);    //remplissage de la deuxieme matrice
        AfficheMatrice(temp1,m,q);    //affichage de la deuxieme matrice
       int** temp2= AdditionneMatrice(temp,n,p,temp1,m,q);   //là je crée un pointeur temp2 et je lui affecte la matrice resultat de l'addition
        AfficheMatrice(temp2,m,q);// affichage de la matrice résultat
        system("pause");
        return(0);
    }
    dans l'attente d'une réponse de votre part veuillez agréez mes salutation les plus réspectueuses
    Fichiers attachés Fichiers attachés

  2. #2
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    735
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 735
    Par défaut
    Salut et bienvenue sur le forum

    Chez moi, le code ne compile pas et m'indique une erreur dans la fonction AdditionneMatrice(), car elle doit renvoyer un int** mais ne fait rien si les 2 matrices n'ont pas les mêmes dimensions.
    J'ajoute un return M; entre l'avant-dernière et la dernière accolade, ça compile et tout fonctionne impec'.

    Quelques remarques :
    • Essaye de bien indenter ton code, j'ai cru d'abord que le problème venait des accolades

    • Le fonction ConstructionMatrice() devrait initialiser tous les champs à zéro, histoire de ne pas avoir de problème si l'utilisateur appelle une autre fonction avant RemplirMatrice().

    • Tu mélanges C et C++ car tu créé des fonctions qui devraient être regroupées en une classe et non séparées comme on ferait en C. Cela dit, tu n'as visiblement pas encore vu le mécanisme de classes, donc ça viendra avec le temps.

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,

    Visiblement, ton prof et ses cours sont à fuir absolument. Les allocations telles que proposées dans cet exercice relèvent de l'hérésie !!! Difficile d'être résistant aux exceptions avec un tel code ! Sans parler des fuites mémoires

    En outre ce qu'a dit manudiclemente:
    Les index en C++ ne vont pas de 1 à n mais de 0 à n-1. De ce fait, tout tes accès provoquent un débordement.
    Qu'est ce qu'il se passe si au lieu de saisir une valeur pour un élément de la matrice, je me trompe et je saisi une chaîne de caractère ? => faq Comment vérifier les valeurs saisies avec cin ?

  4. #4
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 24
    Par défaut
    dabord je vous remercie pour votre intéraction à mon sujet ça fait énormément plaisir puis aprés j'ai fait un return M mé ça donne pas le resultat voulu.je comprend même pas pourquoi l'ajouter car j'ai déja fait un return tab qui est sennsé être le resultat de la sommation des deux matrice passé en paramètre
    ce sont mes petits pas en C++ nous n'avons pas encore avancé dans les classes mais ça ira avec le temps

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2012
    Messages : 24
    Par défaut
    voilà le problème est résolut je tiens à vous remercier Mr 3DArchi votre indication m'a bcp aidé au lieu de commencer mon tableau de 0 j'ai commencé de 1 ce qui a causé un débordement au niveau de la compilation voilà le code

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    #include <iostream>
    using namespace std;
    int** ConstructionMatrice(int n, int p){
          int i;
          int** tab;
       tab=new int*[n];                     //  déclaration la fonction qui fait l'allocation de la matrice
          for(i=0;i<n;i++){
          tab[i]=new int[p];}
          return tab;}
     
     
    void RemplitMatrice(int** tab, int n, int p)   // déclaration de la fonction  permettant de faire remplir la matrice M par 
                                                          // l’utilisateur
          {  
               int i,j;
               for(i=0;i<n;i++){
               for(j=0;j<p;j++){
               cout<<"tab["<<i<<"]"<<"["<<j<<"]      :";
               cin>>tab[i][j];
               cout<<endl;}}}
     
     
    void AfficheMatrice(int** tab, int n, int p){     // fonction qui permet d'afficher une matrice entrée en parametre
               int i,j;
               for(i=0;i<n;i++){
               for(j=0;j<p;j++){cout<<tab[i][j]<<"   ";}
               cout<<endl;}}
     
     
    int** AdditionneMatrice(int ** M,int n, int p, int **N, int m, int q){    // fonction qui additionne deux matrice passé en parametre
               int i,j;
     
               int **tab= ConstructionMatrice(n,p);  //j'alloue l'espace mémoire pour le pointeur de retour tab
               for(i=0;i<n;i++){
               for(j=0;j<p;j++){
               tab[i][j]=M[i][j]+N[i][j];
               }}
               return tab;
               }
     
        main(){
        int n,p,m,q;
        cout<<"entrer le nombre de ligne"<<endl;
        cin>>n;
        cout<<"entrer le nombre de colonne"<<endl;
        cin>>p;
        int**temp= ConstructionMatrice(n,p); // là je construit un poiteur sur un tableau à deux dimensions
        RemplitMatrice(temp,n,p);     //remplissage de la matrice premiere matrice
        AfficheMatrice(temp,n,p);//  affichage de la premiere matrice
        cout<<"entrer le nombre de ligne"<<endl;
        cin>>m;
        cout<<"entrer le nombre de colonne"<<endl;
        cin>>q;
        int**temp1=ConstructionMatrice(m,q);   //contruction d'un deuxieme pointeur
        RemplitMatrice(temp1,m,q);    //remplissage de la deuxieme matrice
        AfficheMatrice(temp1,m,q);    //affichage de la deuxieme matrice
        if(n==m && p==q){
       int** temp2= AdditionneMatrice(temp,n,p,temp1,m,q);   //là je crée un pointeur temp2 et je lui affecte la matrice resultat de l'addition
       cout<<"matrice resultat de la somme des deux matrices"<<endl;
        AfficheMatrice(temp2,n,p);}// affichage de la matrice résultat
        else cout<<"sommation impossible"<<endl;
        system("pause");
        return(0);
    }

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

Discussions similaires

  1. Exercice - Matrice creuse
    Par smerfe dans le forum Mathématiques
    Réponses: 4
    Dernier message: 15/07/2014, 17h49
  2. Exercice de synthèse: Addition de matrices
    Par Ecam2010 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/12/2010, 21h41
  3. [Dev-Pascal] Cherche exercices sur les matrices
    Par Virusnonoy dans le forum Autres IDE
    Réponses: 1
    Dernier message: 15/02/2009, 16h53
  4. exercices sur les matrices
    Par dakiahanan dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 23/12/2008, 01h32
  5. exercice sur les matrices
    Par massimo dans le forum MATLAB
    Réponses: 3
    Dernier message: 22/03/2007, 17h20

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