Addition de deux matrices sous PIC. Problème MPLAB ?
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Addition de deux matrices sous PIC. Problème MPLAB ?



  1. #1
    Stan200

    Addition de deux matrices sous PIC. Problème MPLAB ?


    ------

    Bonjour,

    C'est encore moi !
    J'ai cherché à faire la somme de deux matrices en C.
    J'ai implanté l'algorithme sous MPLAB pour la somme de deux matrices d'entiers et ça fonctionne ! (valeurs vérifié par le WATCH)

    Pour ce faire, j'ai utilisé les pointeurs.
    Selon ce site (lien ici), une matrice mat[NB_Lignes][NB_COLONNES ] est équivalente à *(matrice + (NB_COLONNES * ligne) + colonne).
    J'ai donc utilisé ce principe.

    Je désire faire la somme de deux matrices de float ou double : ça ne fonctionne pas.
    Pourtant l'algorithme est exactement le même, j'ai juste remplacé "int" par "double".


    Voici l'algorithme avec les int qui fonctionne :
    Code:
    #include <18F45K20.h> 
    
    
    
    
    void addi(int **tab1,int **tab2, int **res){
     	int i=0;
     	int j=0;
    	int k=0;
    
        for(i=0;i<2;i++){
                for(j=0;j<2;j++){
    				*(res+(1*i)+j)=*(tab1+(1*i)+j)+*(tab2+(1*i)+j);
    			}
    	}
    }
    
    
    
    int t1[2][2]={{2,3},{47,35}};
    int t2[2][2]={{1,0},{0,1}};
    int resultat[2][2];
    
    void main() 
    { 
    
    addi(t1,t2,resultat);
    
    while(1);    
    }
    J'obtiens resultat[2][2]={{3,3},{47,36}}



    Pour le deuxième code :
    Code:
    #include <18F45K20.h> 
    
    void addi(double **tab1,double **tab2, double **res){
     	int i=0;
     	int j=0;
    	int k=0;
    
        for(i=0;i<2;i++){
                for(j=0;j<2;j++){
    				*(res+(1*i)+j)=*(tab1+(1*i)+j)+*(tab2+(1*i)+j);
    			}
    	}
    }
    
    
    
    double t1[2][2]={{2.2,3.4},{47.2,35.7}};
    double t2[2][2]={{1.0,0.0},{0.0,1.0}};
    double resultat[2][2]={0.0};
    
    void main() 
    { 
    
    addi(t1,t2,resultat);
    
    while(1);    
    }

    J'obtiens resultat[2][2]={{3.2,3.4},{47.0,0.0}}

    C'est la deuxieme ligne qui pose problème. Je ne sais pas comment agir car pour des int cela fonctionne parfaitement.
    Est ce un problème avec MPLAB ? (je suis sous MPLAB 8.92)

    J'aimerais vraiment pouvoir résoudre ce problème et obtenir la somme de deux double ou float correcte (je suis ouvert à d'autres méthodes s'il le faut).

    Merci pour votre aide

    -----

  2. #2
    Stan200

    Re : Addition de deux matrices sous PIC. Problème MPLAB ?

    Bonjour,

    Est ce que quelqu'un pourrait essayer ces codes chez lui pour voir s'il obtient les mêmes résultats que moi ?
    Cela me permettrait de voir si le problème vient de chez moi ou pas.

    Merci

  3. #3
    satinas

    Re : Addition de deux matrices sous PIC. Problème MPLAB ?

    Ton code à la compilation produit des warnings, et il serait bon de les analyser. Je vois pas où dans la doc, il pointe des tableaux à plusieurs dimensions avec des des int**.

  4. #4
    Aurélien

    Re : Addition de deux matrices sous PIC. Problème MPLAB ?

    Trois remarques rapides :

    - deja, déclares tes variables globale avant tes fonctions
    - ensuite, tu passes des pointeurs en parametre, c'est bien, mais il ne faut qu'une seule *, pas 2 (s'il fallait mettre une etoile par dimension, on serait pas sortis !)
    - ta façon d'additionner les matrices est bizarre "*(res+(1*i)+j)=*(tab1+(1*i)+j )+*(tab2+(1*i)+j);" Tu m'expliques à quoi ça sert de faire "1*i". Essaies plutot cela : res[i][j] = tab1[i][j] + tab2[i][j]; Deja plus clair..

    Aurélien

  5. A voir en vidéo sur Futura
  6. #5
    satinas

    Re : Addition de deux matrices sous PIC. Problème MPLAB ?

    Ta fonction a besoin de la taille des dimensions des tableaux pour délimiter leur contenu et trouver leurs éléments, donc il faut les lui fournir (en partie). Elle connait t1, t2 mais elle ne sait pas que ce sont des arguments.
    Dernière modification par satinas ; 07/08/2014 à 17h59.

  7. #6
    ranarama

    Re : Addition de deux matrices sous PIC. Problème MPLAB ?

    pb d'initialisation peut etre :
    double resultat[2][2]={0.0}; que la 1ere ligne je pense

  8. #7
    Stan200

    Re : Addition de deux matrices sous PIC. Problème MPLAB ?

    Bonjour à tous !

    Je vous remercie pour vos réponses.
    Je vais retravailler tout ça ce soir et je vous tiens au courant demain.

  9. #8
    satinas

    Re : Addition de deux matrices sous PIC. Problème MPLAB ?

    N'oublie pas qu'un argument de fonction c'est une valeur de type int, double, ... ou une adresse dans le cas d'un pointeur, d'un tableau, ou une structure. Et une adresse, ça n'indique pas la nature de ce sur quoi ça pointe, tu es censé le savoir à l'arrivée dans la fonction, et l'indiquer dans la spécification des arguments tab1, ...
    Dernière modification par satinas ; 07/08/2014 à 19h10.

  10. #9
    bobflux

    Re : Addition de deux matrices sous PIC. Problème MPLAB ?

    L'erreur saute aux yeux dans le code fourni dans le premier post.

    Mais bon, si ta fonction n'est capable que d'additionner des tableaux 2x2, dû aux constantes en dur dans le code, alors pourquoi tu passes des int** parfaitement hors sujet, et pas des pointeurs sur une struct matrice2x2 ?... ou pourquoi pas, soyons fous, une struct matrice qui a ses propres dimensions dedans ?...

Discussions similaires

  1. [Divers] Addition de deux concentration ?
    Par lekidolittel dans le forum Biologie
    Réponses: 1
    Dernier message: 25/10/2013, 16h02
  2. probleme calcul produit de deux matrices
    Par slimebdx dans le forum Mathématiques du collège et du lycée
    Réponses: 2
    Dernier message: 12/06/2009, 19h43
  3. Problème sous MpLAB C30
    Par invitec63490c6 dans le forum Électronique
    Réponses: 1
    Dernier message: 16/03/2009, 13h39
  4. Problème en simulation sous MPLAB!
    Par invite953f8104 dans le forum Électronique
    Réponses: 1
    Dernier message: 10/09/2008, 16h28
  5. Addition de deux signaux
    Par invite28064c25 dans le forum Électronique
    Réponses: 5
    Dernier message: 16/05/2005, 22h09
Découvrez nos comparatifs produits sur l'informatique et les technologies.