Programme c besoin d'aide

Fermé
int main Messages postés 80 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 4 janvier 2009 - 4 janv. 2009 à 22:29
MRAD Messages postés 86 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 17 avril 2009 - 5 janv. 2009 à 13:03
Bonsoir
Voila j'ai un TP à remettre (rassurez vous je l'ai fait :) ), seulement voila quand je le compile il m'affiche aucune erreur mais lors de l'exécution le programme plante et je sais vraiment pas pourquoi.
Merci de jeter un coup d'oeil au dit TP et au programme ci-dessous.

TP
Écrire une fonction permettant de calculer le produit de deux matrices de dimension n et m; puis une fonction calculant la somme de deux matrices de même dimension.
Écrire ensuite la fonction main où vous appellerez les deux fonctions à l'exécution, l'utilisateur doit avoir le choix entre faire la somme ou le produit des matrices.
Fin du tp

Code source
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//****************************Produit des matrices*********************************

int prod( )
{
 int i,j,k,m,n,p;
 float mat1[m][n],mat2[p][m],mat3[m][p];

 printf("Saisir la dimension commune au deux matrices (dimension ligne matrice 1, colonne martrice 2): ");
 scanf("%f",&m);

//Remplissage de la premiere matrice-------------------------------------

printf("\n****** Matrice 1 ******\n");
printf("Nombre de colonne de la matrice 1 : ");
scanf("%f",&n);
for(i=0;i<m;i++){
                 for(j=0;j<n;j++){
                                  printf ("ligne %d, colonne %d : ",i+1,j+1);
			                      scanf ("%d",&mat1[i][j]);
                                  }
                 }

//Remplissage de la seconde matrice----------------------------------

printf("\n****** Matrice B ******\n");
printf("Nombre de ligne de la matrice 2: ");
scanf("%f",&p);
for(i=0;i<p;i++){
                 for(j=0;j<m;j++){
                                  printf ("ligne %d, colonne %d : ",i+1,j+1);
			                      scanf ("%d",&mat2[i][j]);
                                  }
                 }

// Affectation du résultat de la multiplication à la 3eme matrice -----------------------

 for (i=0; i<n; i++){
     for (j=0; j<p; j++)
         {
          mat3[i][j]=0;
          for (k=0; k<m; k++)
               {mat3[i][j]= mat1[i][j]*mat2[k][j]+mat3[i][j];}
         }
                     }

 // Edition du résultat -----------------------------------------------

 printf("Matrice résultat :\n");
 for (i=0; i<n; i++)
    {
     for (j=0; j<p; j++)
          {printf("%7d", mat3[i][j]);}
     printf("\n");
    }

printf("\n\n");
printf("\t\t\t\t\t\t\t\t  ======= Fin =======")

}

//***********************Somme des matrices*******************************

int som( )
{
int i,j,n,m;
float mat1[n][m],mat2[n][m],mat3[50][50];


printf("-----Saisie des dimensions commune au deux matrices: -----");
 printf("Nombre de lignes: ");
 scanf("%d", &n );
 printf("Nombre de colonnes: ");
 scanf("%d", &m );

//Remplissage de la premiere matrice--------------------------------------------

 printf("\n****** Matrice 1 ******\n");
 for(i=0;i<n;i++){
                 for(j=0;j<m;j++){
                                  printf ("ligne %d, colonne %d : ",i+1,j+1);
			                      scanf ("%d",&mat1[i][j]);
                                  }
                  }

//Remplissage de la seconde matrice--------------------------------------------

 printf("\n****** Matrice 2 ******\n");
 for(i=0;i<n;i++){
                 for(j=0;j<m;j++){
                                  printf ("ligne %d, colonne %d : ",i+1,j+1);
			                      scanf ("%d",&mat1[i][j]);
                                  }
                  }

// Affichage des matrices---------------------------------------------------------------

 printf("************Premiere matrice:************\n");
 for (i=0; i<n; i++)
    {
     for (j=0; j<m; j++)
          {printf("%7d", mat1[i][i]);}
     printf("\n");
    }
 printf("************Seconde matrice************:\n");
 for (i=0; i<n; i++)
    {
     for (j=0; j<m; j++)
          {printf("%7d", mat2[i][j]);}
     printf("\n");
    }

// Affectation du résultat de l'addition a la 3eme matrice ---------------------

 for (i=0; i<n; i++){
     for (j=0; j<m; j++)
           {mat3[i][j] = mat1[i][j]+mat2[i][j];}
                     }

// Edition du résultat-----------------------------------------------------------

 printf("Matrice 3: résultat :\n");
 for (i=0; i<n; i++)
    {
     for (j=0; j<m; j++)
          printf("%7d", mat3[i][j]);
     printf("\n");
    }
printf("\n\n");
printf("\t\t\t\t\t\t\t\t  ======= Fin =======");
}


//*************************Fonction main****************************

int main()
{
int choix,controle;
char ligne[20];

      printf("\t\t\t\t\t======== ");
      printf("\t\t\t\t\t\t\t\t  ======= Menu =======");
      printf("\t\t\t\t\t\t\t\t\t========\n\n ");

      while(choix<1 || choix>2){
      printf("\t\tEntrez '1' pour determiner la Somme de deux matrices\n");
      printf("\t\tEntrez '2' pour determiner le Produit de deux matrices\n\n");
      printf("\t\t\t\t    Votre choix ?:  ");
                        gets (ligne);
                        controle=sscanf(ligne,"%d",&choix);
                        while(!controle){
                                         do{printf("\t\t\t\tVous devez saisir '1' ou '2':\t");
                                            gets (ligne);
                                            controle=sscanf(ligne,"%d",&choix);
                                            }
                                         while(controle<1);
                                        }
                                  }
      printf("\n\n");

      switch (choix)
                        {
    case 1:
       som( );
       break;
    case 2:
       prod( );
       break;
                        }
      printf("\n\n");
      system("PAUSE");
      return 0;
}




Merci d'avoir pris le temps de lire

4 réponses

bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 859
4 janv. 2009 à 22:42
J'aime bien ton "Merci d'avoir pris le temps de lire"
Je n'ai lu que les 2 premières lignes et je suis sûr que ce n'est que ça :p

 int i,j,k,m,n,p;
 float mat1[m][n],mat2[p][m],mat3[m][p];


Tu initialises mat1, mat2 et mat3 avec des nombres (m n et p) qui ne sont même pas initialisés. Chacune de tes matrices est donc de taille complètement aléatoire, et après quand tu essayes d'écrire dedans ... avec un coup de pas de chance (ce qui arrive tout le temps lol) ... tu essayes d'écrire en dehors de celle-ci donc ça plante :)
0
int main Messages postés 80 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 4 janvier 2009 3
4 janv. 2009 à 22:51
Merci bien sa devait sans doute etre sa jai initialisé les trois matrices à 50 et paf sa passe je vais serifié s'il y pas d'autre bug
Merci encore
0
int main Messages postés 80 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 4 janvier 2009 3
4 janv. 2009 à 23:02
Encore moi :p. La je sais pas vraiment quoi pensé j'avais tantôt initialisé les 3 matrices à [50][50] mais la j'ai comme l'impression que dans la saisie des éléments des matrices je soit obligé d'entré des valeurs pour 50 lignes et 50 colonne c'est trop fatiguant :)).
Merci de me dépanner
0
bizu53 Messages postés 1274 Date d'inscription samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 859
5 janv. 2009 à 12:47
Pourrait-tu coller le début de ton code (avec la partie que tu as modifiée) ?
Il y a tellement de façon de le faire que je ne pourrais pas vraiment te dire sans ton nouveau code
0
MRAD Messages postés 86 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 17 avril 2009 4
5 janv. 2009 à 13:03
Bonjour, hors du remplissage des matrice, tu dois simplement specifier le nombre de case que tu va remplir, m et n ne sont pas necessairement egaux a 50, lorsque tu declare tes matrice :
mat1[50][50],mat2[50][50]
0