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 -
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;
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;
A voir également:
- Calcule sur les matrices
- Comment calculer la moyenne sur excel - Guide
- Installer calculatrice sur mon portable - Télécharger - Calcul & Conversion
- Comment calculer un total sur excel - Guide
- Comment calculer une note sur 20 ✓ - Forum Bureautique
- Barbara veut calculer automatiquement son budget dans un tableau. citez un des logiciels lui permettant de faire des calculs sur des tableaux de nombres (tableur). ✓ - Forum Excel
2 réponses
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:
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).
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).
pourquoi vous n'utilisez pas l'allocation automatique ???
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
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