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 :

produit de deux matrices


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 44
    Points : 26
    Points
    26
    Par défaut produit de deux matrices
    je suis en train de créer un programme en langage c qui calcule le produit de deux matrice de dimensions (l,c) et (c,k) entrés par l'utilisateur, voila le code source :

    *******
    Code : C*
    *******
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(int argc, char *argv[])
    {
    int i,j,l,c,k; 
    int A[50][50];
    int B[50][50];
    int P[50][50]; 
     
    printf("Donner le nombre des lignes de la matrice A\n"); 
    scanf("%d",&l); 
    printf("Donner le nombre des colonnes de la matrice A\n"); 
    scanf("%d",&c); 
     
    printf("Enter les elements de la matrice A\n");
    for(i=0;i<l;i++)  
       for(j=0;j<c;j++)
         {
         printf("Enter la valeur de A[%d][%d] ",i,j);
         scanf("%d",&A[i][j]);
         printf("\n");
         }
    printf("\n===> Matrice A <===\n");
    for (i=0;i<l;i++)
        {
         for(j=0;j<c;j++)
              printf("%7d", A[i][j]);
         printf("\n");
        }
     
    printf("le nombre des lignes de la matrice B est %d\n",c); 
    printf("Donner le nombre des colonnes de la matrice B\n"); 
    scanf("%d",&k);
     
    printf("Enter les elements de la matrice B\n");
    for(i=0;i<c;i++)  
       for(j=0;j<k;j++)
         {
         printf("Enter la valeur de B[%d][%d] ",i,j);
         scanf("%d",&B[i][j]);
         printf("\n");
         }
    printf("\n===> Matrice B <===\n");
    for (i=0;i<l;i++)
        {
         for(j=0;j<c;j++)
              printf("%7d", B[i][j]);
         printf("\n");
        }
     
     
    for(i=0;i<l;i++)
       for(j=0;j<c;j++)        
           P[i][j]=A[i][j]*B[i][j];
           for(j=0;j<k;j++)        
              P[i][j]=P[i][j]+A[i][j]*B[i+1][j+1];
     
              /* voila le problème ici
              j'arrive pas à faire l'opération comme il faut */
     
    printf("Le produit des matrices A et B est la matrice P : \n");
    printf("\n===> Matrice P <===\n");
    for (i=0;i<l;i++)
        {
         for(j=0;j<c;j++)
              printf("%7d", P[i][j]);
         printf("\n");
        }
     
      system("PAUSE");      
      return 0;
    }
    comment dois-je faire ?
    merci d'avance

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 52
    Points : 62
    Points
    62
    Par défaut
    Si on applique la formule décrite dans le lien suivant,

    http://fr.wikipedia.org/wiki/Produit_matriciel

    A l'intérieur de tes deux boucles sur les lignes et les colonnes servant a parcourir toute la matrice,
    tu initialise la valeur P[ligne][col] à 0
    tu ajoutes une troisième boucle allant de 0 à la dimension commune des deux matrices -1 dans laquelle tu incrémentes ta valeur P[ligne][col]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    P[ligne][col]+=A[Ligne][k]*B[k][Col]

    Pour plus de clarté, utilise des noms de variables qui veulent dire quelque chose.

    Attention à la présentation du code, je ne suis pas sur que ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for(i=0;i<l;i++)
       for(j=0;j<c;j++)        
           P[i][j]=A[i][j]*B[i][j];
           for(j=0;j<k;j++)        
              P[i][j]=P[i][j]+A[i][j]*B[i+1][j+1];
    fasse ce que tu crois qu'il devrait faire. si tu le présente correctement, tu obtient cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for(i=0;i<l;i++)
       for(j=0;j<c;j++)        
           P[i][j]=A[i][j]*B[i][j];
    for(j=0;j<k;j++)        
        P[i][j]=P[i][j]+A[i][j]*B[i+1][j+1];
    Bon courage

  3. #3
    Membre averti Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Points : 301
    Points
    301
    Par défaut
    Salut !

    Soient 2 matrices A et B, C étant leur prod->uit on a le produit :

    Pour i = 0 -> NbLignesA
    Pour j = 0 -> NbColonnesB
    Pour k = 0 -> NbColonnesA
    Faire :
    C[i][j] = C[i][j] + A[i][k] * B[k][j]
    Mais bon la ça n'a pas grand chose a voir avec le C !

    Autre chose, pour saisir qq chose sur l'entrée standard, faut mieux éviter d'utiliser scanf mais plutot fgets + fonction de conversion qui va bien !

    Bon courage

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 44
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par Fred83 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    P[ligne][col]+=A[Ligne][k]*B[k][Col]
    salut Fred83
    j'ai pas bien compris cette instruction, et de quoi s'agit-il += ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 52
    Points : 62
    Points
    62
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    P[ligne][col]+=A[Ligne][k]*B[k][Col]
    est une façon compacte d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    P[ligne][col]=P[ligne][col]+A[Ligne][k]*B[k][Col]

  6. #6
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 44
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par Fred83 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    P[ligne][col]+=A[Ligne][k]*B[k][Col]
    est une façon compacte d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    P[ligne][col]=P[ligne][col]+A[Ligne][k]*B[k][Col]
    merci bcp Fred83. ça semblait marcher.

Discussions similaires

  1. Réponses: 0
    Dernier message: 25/04/2011, 00h50
  2. Produit de deux matrices
    Par informaticienne_ing dans le forum Assembleur
    Réponses: 1
    Dernier message: 03/05/2009, 01h51
  3. Produits de deux matrices
    Par pampouna302 dans le forum C
    Réponses: 1
    Dernier message: 09/03/2009, 18h27
  4. Algorithme qui fait le produit de deux matrices
    Par ApprentiDeveloppeur dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 12/11/2008, 17h32

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