Calcule sur les matrices

wendtoin1988 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
tj anh Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
j'aimerais que quelqu'un m'aide a voir pourquoi il ne marche pas mon programme en C
sur le compilateur dec-c++.et ci possible apporter votre retouche.
voici le sujet:

Implémenter un programme de manipulaion de matrices.le programme doit proposer
un menu permettant de faire:
- saisir 2 matrices A et B (n lignes, p colonnes) et une matrice carrée C d'ordre n
- Transposer la matrice B
- Addition de deux matrices
- Produit de deux matrices
- Calculer le Déterminant de la matrice carrée C


#include <stdio.h>
#include <stdlib.h>
#define n 5
#define p 6
void affichemenu ();
void saisiematrices (int A[][],int B[][],int C[][],int n,int p);
void affichematrices (int A[][],int B[][],int C[][],int n,int p);
void transpositionmatriceB (int B[][],int T[][],int n,int p);
void additionmatrice (int A[][],int B[][],int S[][],int n,int p);
void produitmatrice (int A[][],int B[][],int M[][],int n,int p);
//void determinantmatricecarreC;//
int main()
{
int A[n][p];
int B[n][p];
int C[n][n];
int T[n][p];
int S[n][p];
int M[n][p];
int n,p;
int i,j,k;
saisiematrices (A,B,C,n,p);
affichematrices(A,B,C,n,p);
transpositionmatriceB (B,T,n,p);
additionmatrice (A,B,S,n,p);
produitmatrice (A,B,M,n,p);
printf("Nombre de lignes (n.5) : ");
scanf("%d", &n );
printf("Nombre de colonnes (p.6) : ");
scanf("%d", &p );
system("PAUSE");
return 0;
}
/* Saisie des données */
void saisiematrices (int A[][],int B[][],int C[][],int n,int p)
{
int i,j,n,p;
printf("Nombre de lignes (n.5) : ");
scanf("%d", &n );
printf("Nombre de colonnes (n.5) : ");
scanf("%d", &p );
printf("*** Matrice A ***\n");
for (i=0; i<n; i++)
for (j=0; j<p; j++)
{
printf("Element[%d][%d] : ",i,j);
scanf("%d", &A[i][j]);
}
printf("*** Matrice B ***\n");
for (i=0; i<n; i++)
for (j=0; j<p; j++)
{
printf("Element[%d][%d] : ",i,j);
scanf("%d", &B[i][j]);
}
printf("*** Matrice Carre C ***\n");
for (i=0; i<n; i++)
for (j=0; j<n; j++)
{
printf("Element[%d][%d] : ",i,j);
scanf("%d", &C[i][j]);
}
}
//*Affichage des matrices*//
void affichematrices (int A[][],int B[][],int C[][],int n,int p)
{
int i,j,n,p;
printf("La matrice A :\n");
for (i=0; i<n; i++)
{
for (j=0; j<p; j++)
printf("%7d", A[i][j]);
printf("\n");
}
printf("La matrice B :\n");
for (i=0; i<n; i++)
{
for (j=0; j<p; j++)
printf("%7d", B[i][j]);
printf("\n");
}
printf("La matrice Carre C :\n");
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
printf("%7d", A[i][j]);
printf("\n");
}
}
//*** transposition de la matrice B***//
void transposee(int B[][], int T[][], int n,int p)
{
int i,j;
for (i=0; i<n; i++)
for (j=0; j<p; j++)
{
T[j][i]=B[i][j];
}
return T[j][i];
}
/* Edition du résultat */
printf("La matrice transposée de B :\n");
for (i=0; i<n; i++)
{
for (j=0; j<p; j++)
printf("%7d", T[i][j]);
printf("\n");
}
//*** somme de deux matrice ***//
void somme(int A[][], int B[][],int S[][], int n,int p)
{
int i,j;
for (i=0; i<n; i++)
for (j=0; j<p; j++)
{
S[i][j] =A[i][j] + B[i][j];
}
return S[j][i];
}
/* Edition du résultat */
printf("La matrice somme de A et B :\n");
for (i=0; i<n; i++)
{
for (j=0; j<p; j++)
printf("%7d", S[i][j]);
printf("\n");
}
//*** Produit de deux matrice ***//
void produit(int A[][], int B[][],int M[][], int n,int p)
{
int i,j,k;
for (i=0; i<n; i++)
for (j=0; j<n; j++)
{
M[i][j]=0;
for (k=0; k<n; k++)
M[i][j] =M[i][j] + A[i][k] * B[k][j];
}
return M[i][j];
}
/* Edition du résultat */
printf("La matrice produite de A et B :\n");
for (i=0; i<n; i++)
{
for (j=0; j<p; j++)
printf("%7d", M[i][j]);
printf("\n");
}
//***Calcule du Determinant de la Matrice Carree C ***//


//fonction affichage Menu//
void affichemenu ()
{
printf("********MENU*********\n");
printf("1- saisie et affichage des matrices \n");
printf("2- Transposition matrice B \n");
printf("3- Addition matrice A et B \n");
printf("4- Produit matrice A et B \n");
printf("5- Determinant de la matrice carree C \n");
printf("quitter\n");
printf("Entrer votre choix\n");
scanf("votre choix %d");
}
case '1':
void saisiematrices (int A[][],int B[][],int C[][],int n,int p),void affichematrices (int A[][],int B[][],int C[][],int n,int p);
break;
case '2':
void transpositionmatriceB (int B[][],int T[][],int n,int p);
break;
case '3':
void additionmatrice (int A[][],int B[][],int S[][],int n,int p);
break;
case '4':
void produitmatrice (int A[][],int B[][],int M[][],int n,int p);
break;

2 réponses

ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223
 
Salut, c'est le bazar ton code, pense à utiliser l'indentation (décalage du code selon les blocs).

Premièrement , tu as #define-é n et p à des normbres, or tu utilises n et p comme noms de paramètres et comme variables -> pas bon!

Deuxièmement, on ne déclares pas une variable qui est déja déclarée, ici dans les protoypes de fonction:
void saisiematrices (...,int C[n_n][p_n],int n,int p) {
int i,j,n,p; // On ne redéfinit pas n ni p!

Et puis plein de lignes de codes en dehors d'une fonction... non, quoi!
Et des fonctions void qui renvoient quelque chose... NON, quoi!

Troisièmement, les case de affichemenu ne sont pas dans un switch, et même pas dans la fonction!
De plus, le scanf "votre choix" ne récupère aucun nombre, déclares un int avant et passes-lui un pointeur vers cet int.
Et le contenu de ces case n'est pas correct: on n'appelle pas une fonction en copian-collant son prototype! Enlèves ces "void", et déclares des tableaux comme dans main() pour leur passer après. Et pourquoi y'a une virgule entre les 2 fonctions du premier case? C'est un point-virgule qu'il faut mettre.

Y'a encore beaucoup à dire.

Tu sembles connaitre les bases de bases du C, mais tu t'es lancé dans quelque chose d'un peu trop complexe a mon avis, il faut d'abord que tu apprennes comment fonctionnent les tableaux, comment on les passes aux fonctions, etc.. surtout les multidimensionnels comme ça.
https://openclassrooms.com/fr/courses
Et apprends aussi qu'on ne met pas de code en dehors des fonctions, sauf les déclarations, définitions, assembleur inline, directives préprocesseur et d'autres choses (j'ai pas de liste exhaustive).
2
tj anh Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
pourquoi vous n'utilisez pas l'allocation automatique ???
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Qu'entends-tu par allocation automatique ??
0
tj anh Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
comme ca,
par ex: int a[] = new int[10];
vous ne l'avez pas rencontré ??
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Ca n'existe pas en C...
0
tj anh Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
Oh, Pardon, :D
je me suis trompé, comme ca
par ex:
int count;
scanf("%d",&count);
int *array = new int [count];

les élément d'array dépend de valeur count; si vous entrez la valeur count= 10, => array contient 10 élément; count = 5, array a 5 élément :D

De-là, vous pouvez allouer une matrice 2 dimensions :D
bonne journée
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
nt count;
scanf("%d",&count);
int *array = new int [count];

Ce n'est pas du C non plus...
0