[c] matrice débutant
Résolu
Flow31-
Messages postés
84
Date d'inscription
Statut
Membre
Dernière intervention
-
kanabson -
kanabson -
Bonjour tout le monde,
j'utilise le c et non le c++.
Mes matrices sont des matrices carrés allant de 2 a 10.
j'arrive à bien rentrer les nombres dedant avec :
void entrermatcarre(int *pmat,int p) {
/*Matrice*/
int i,j;
/*j : colonne*/
/*i : ligne*/
printf("\n\nEntrez les composantes de votre matrice : ");
for(j=0;j<p;j++)
{
for (i=0;i<p;i++)
{
printf("\n\nSaisissez la composante (nombre entier) %d de la colonne X %d : ",(i+1),(j+1));
scanf("%d",pmat+i);
printf("\nVotre composante %d de la colonne %d : %d",(i+1),(j+1),*(pmat+i));
}
}
return;
}
mais j'ai un gros problème pour afficher tout simplement les matrices en entier , voici mes essais :
void ecrirematcarre(int *mat,int p)
{
if (p==2)
{
/*affichage d'une matrice carre d'ordre 2*/
printf("\n\nValeur de votre matrice : ");
for (i=0;i<(p-1);i++)
for(j=0;j<(p-1);j++)
{
{
printf("\n%d %d",*(mat+j),*(mat+j+1));
}
}
}
ou encore
void ecrirematcarre(int *mat[i][j],int p)
{
/* affichage ligne par ligne*/
int i,j;
if (p==2)
{
/*affichage d'une matrice carre d'ordre 2*/
printf("\n\nValeur de votre matrice : ");
for(i=0;i<(p-1);i++)
{
for(j=0;j<(p-1);j++)
{
printf("\n%d",*mat[i][j]);
}
}
}
}
je sais utiliser convenablement un main et appeler les fonctions!
Es-ce que quelqu'un peut me débloquer facilement ?
Merci d'avance !
ps : j'utilise grasp sous linux.
j'utilise le c et non le c++.
Mes matrices sont des matrices carrés allant de 2 a 10.
j'arrive à bien rentrer les nombres dedant avec :
void entrermatcarre(int *pmat,int p) {
/*Matrice*/
int i,j;
/*j : colonne*/
/*i : ligne*/
printf("\n\nEntrez les composantes de votre matrice : ");
for(j=0;j<p;j++)
{
for (i=0;i<p;i++)
{
printf("\n\nSaisissez la composante (nombre entier) %d de la colonne X %d : ",(i+1),(j+1));
scanf("%d",pmat+i);
printf("\nVotre composante %d de la colonne %d : %d",(i+1),(j+1),*(pmat+i));
}
}
return;
}
mais j'ai un gros problème pour afficher tout simplement les matrices en entier , voici mes essais :
void ecrirematcarre(int *mat,int p)
{
if (p==2)
{
/*affichage d'une matrice carre d'ordre 2*/
printf("\n\nValeur de votre matrice : ");
for (i=0;i<(p-1);i++)
for(j=0;j<(p-1);j++)
{
{
printf("\n%d %d",*(mat+j),*(mat+j+1));
}
}
}
ou encore
void ecrirematcarre(int *mat[i][j],int p)
{
/* affichage ligne par ligne*/
int i,j;
if (p==2)
{
/*affichage d'une matrice carre d'ordre 2*/
printf("\n\nValeur de votre matrice : ");
for(i=0;i<(p-1);i++)
{
for(j=0;j<(p-1);j++)
{
printf("\n%d",*mat[i][j]);
}
}
}
}
je sais utiliser convenablement un main et appeler les fonctions!
Es-ce que quelqu'un peut me débloquer facilement ?
Merci d'avance !
ps : j'utilise grasp sous linux.
A voir également:
- [c] matrice débutant
- Logiciel de programmation pour débutant - Guide
- Logiciel montage vidéo débutant - Guide
- Vous ne pouvez pas modifier une partie de matrice ✓ - Forum Excel
- Formation sap débutant pdf ✓ - Forum Logiciels
- OU TELECHARGER SAP - Forum Logiciels
11 réponses
deja sa m'etonne que ta fonction entrematcarre() fonctionne tu dis que tu utilise des matrice carré et tu lui donnes pas en argument un tableau 2D...
moi je verrais plutot ta fonction comme ça
moi je verrais plutot ta fonction comme ça
void entrermatcarre(int **pmat,int p) { /*Matrice*/ int i,j; /*j : colonne*/ /*i : ligne*/ printf("\n\nEntrez les composantes de votre matrice : "); for(i=0;i<p;i++) { for (j=0;j<p;j++) { printf("\n\nSaisissez la composante (nombre entier) %d de la colonne X %d : ",(i+1),(j+1)); scanf("%d",&pmat[i][j]); printf("\nVotre composante %d de la colonne %d : %d",(i+1),(j+1),pmat[i][j]); } } }et pour ecrire ta matrice
void ecrirematcarre(int **mat,int p) { int i,j; printf("\n\nValeur de votre matrice : "); for (i=0;i<p;i++) { for(j=0;j<p;j++) { printf("%d ",pmat[i][j]; } printf("\n"); } }
Tu peux aussi gérer une matrice par un simple tableau comme suit :
#include <stdio.h> #include <stdlib.h> void entrermatcarre(int *pmat,int p) { int i, j, cpt; printf("\n\nEntrez les composantes de votre matrice : "); cpt = 0; for(j=0;j<p;j++){ for (i=0;i<p;i++){ printf("\n\nSaisissez la composante (nombre entier) %d de la colonne X %d : ",(i+1),(j+1)); scanf("%d",&pmat[cpt++]); printf("\nVotre composante %d de la colonne %d : %d\n",(i+1),(j+1),*(pmat+i)); } } } void ecrirematcarre(int *mat,int p) { int i, j; printf("Affichage \n"); for(i=0; i<p-1;i+=2) printf("%d\t", mat[i]); printf("\n"); for(j=1;j<p;j+=2) printf("%d\t", mat[j]); printf("\n"); } int main(int argc, char *argv[]) { int *mat; mat = (int *)calloc(4, sizeof(int)); entrermatcarre(mat, 2); ecrirematcarre(mat, 4); system("PAUSE"); return 0; }A toi de choisir ;-)
et hop, encore un long message.... pour mype, voici ce qu'il me dit et ce que j'ai fait :
void entrermatcarre(int *pmat[10][10],int p)
{
/*Matrice*/
int i,j;
/*j : colonne*/
/*i : ligne*/
printf("\n\nEntrez les composantes de votre matrice : ");
for(i=0;i<p;i++)
{
for (j=0;j<p;j++)
{
printf("\n\nSaisissez la composante (nombre entier) %d de la colonne X %d : ",(i+1),(j+1));
scanf("%d",&pmat[i][j]);
printf("\nVotre composante %d de la colonne %d : %d",(i+1),(j+1),pmat[i][j]);
}
}
}
void ecrirematcarre(int *mat[10][10],int p)
{
int i,j;
printf("\n\nValeur de votre matrice : ");
for (i=0;i<p;i++)
{
for(j=0;j<p;j++)
{
printf("%d",*mat[i][j]);
}
printf("\n");
}
}
avec ce main ;
int main (void) /*Prototype de la fonction main*/
{
/*Declaration des variables */
int n,re;
int *M[10][10];
/*Declaration les fonctions utilisees (prototype) par la fonction main */
int taillematrice(void);
void entrermatcarre(int *pmat[10][10],int p);
void ecrirematcarre(int *mat[10][10],int p);
/*Initialisation des variables*/
/*saisie par scanf et verification des variables*/
do
{
n=taillematrice();
entrermatcarre(&M[0][0],n);
ecrirematcarre(&M[0][0],n);
/*traitement des donnees - calcul divers*/
/*edition des donnees par printf*/
do
{
printf("\n\nVoulez vous relancez le programme ?");
printf("\ntappez 1 pour oui et 0 pour non : ");
scanf("%d",&re);
}
while(re<0||re>1);
}
while(re==1);
return 0;
}
il me met : passage de l'argument 1 "ecrirematcarre" d'un type pointeur incompatible. meme erreur pour entrermatcarre
et Tassin, je vais bientôt tester ton message :), je suis un peu long je sais! je vous tien au courant :)
void entrermatcarre(int *pmat[10][10],int p)
{
/*Matrice*/
int i,j;
/*j : colonne*/
/*i : ligne*/
printf("\n\nEntrez les composantes de votre matrice : ");
for(i=0;i<p;i++)
{
for (j=0;j<p;j++)
{
printf("\n\nSaisissez la composante (nombre entier) %d de la colonne X %d : ",(i+1),(j+1));
scanf("%d",&pmat[i][j]);
printf("\nVotre composante %d de la colonne %d : %d",(i+1),(j+1),pmat[i][j]);
}
}
}
void ecrirematcarre(int *mat[10][10],int p)
{
int i,j;
printf("\n\nValeur de votre matrice : ");
for (i=0;i<p;i++)
{
for(j=0;j<p;j++)
{
printf("%d",*mat[i][j]);
}
printf("\n");
}
}
avec ce main ;
int main (void) /*Prototype de la fonction main*/
{
/*Declaration des variables */
int n,re;
int *M[10][10];
/*Declaration les fonctions utilisees (prototype) par la fonction main */
int taillematrice(void);
void entrermatcarre(int *pmat[10][10],int p);
void ecrirematcarre(int *mat[10][10],int p);
/*Initialisation des variables*/
/*saisie par scanf et verification des variables*/
do
{
n=taillematrice();
entrermatcarre(&M[0][0],n);
ecrirematcarre(&M[0][0],n);
/*traitement des donnees - calcul divers*/
/*edition des donnees par printf*/
do
{
printf("\n\nVoulez vous relancez le programme ?");
printf("\ntappez 1 pour oui et 0 pour non : ");
scanf("%d",&re);
}
while(re<0||re>1);
}
while(re==1);
return 0;
}
il me met : passage de l'argument 1 "ecrirematcarre" d'un type pointeur incompatible. meme erreur pour entrermatcarre
et Tassin, je vais bientôt tester ton message :), je suis un peu long je sais! je vous tien au courant :)
ton main n'est pas correct c'est pour ça...
essaye comme ça
essaye comme ça
void entrermatcarre(int **pmat,int p) { /*Matrice*/ int i,j; /*j : colonne*/ /*i : ligne*/ printf("\n\nEntrez les composantes de votre matrice : "); for(i=0;i<p;i++) { for (j=0;j<p;j++) { printf("\n\nSaisissez la composante (nombre entier) %d de la colonne X %d : ",(i+1),(j+1)); scanf("%d",&pmat[i][j]); printf("\nVotre composante %d de la colonne %d : %d",(i+1),(j+1),pmat[i][j]); } } } void ecrirematcarre(int **mat,int p) { int i,j; printf("\n\nValeur de votre matrice : "); for (i=0;i<p;i++) { for(j=0;j<p;j++) { printf("%d ",pmat[i][j]; } printf("\n"); } } int main (void) /*Prototype de la fonction main*/ { /*Declaration des variables */ int n,re; int M[10][10]; /*Declaration les fonctions utilisees (prototype) par la fonction main */ int taillematrice(void); void entrermatcarre(int pmat[10][10],int p); void ecrirematcarre(int mat[10][10],int p); /*Initialisation des variables*/ /*saisie par scanf et verification des variables*/ do { n=taillematrice(); entrermatcarre(M,n); ecrirematcarre(M,n); /*traitement des donnees - calcul divers*/ /*edition des donnees par printf*/ do { printf("\n\nVoulez vous relancez le programme ?"); printf("\ntappez 1 pour oui et 0 pour non : "); scanf("%d",&re); } while(re<0||re>1); } while(re==1); return 0; }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
mon new problème est de multiplier 2 matrices entre elles. (toujours en c)
voici mon début :
void matcarparmatcar(int mat[10][10],int pat[10][10], int rat[10][10],int p)
{
int i,j;
printf("\n\nMultiplication de deux matrices carres ");
for (i=0;i<p;i++)
{
for(j=0;j<p;j++)
{
rat[i][j]=(mat[i][j]*pat[i][j]);
}
return;
}
mais là je n'ai que la premiere composante du produit matriciel sur les 3 (je fais mes tests avec un ordre 3)
mon ancienne ligne était : rat[i][j]=(mat[i][j]*pat[i][j]+mat[i+1][j+1]*pat[i+1][j+1]+mat[i+2][j+2]*pat[i+2][j+2]) et elle est fausse mais je n'arrive pas à trouver la réponse ;
j'ai vu sur le forum des allusions à des alloc( ou des m_alloc() , pourrai-ton m'expliquer? Merci d'avance...
mon new problème est de multiplier 2 matrices entre elles. (toujours en c)
voici mon début :
void matcarparmatcar(int mat[10][10],int pat[10][10], int rat[10][10],int p)
{
int i,j;
printf("\n\nMultiplication de deux matrices carres ");
for (i=0;i<p;i++)
{
for(j=0;j<p;j++)
{
rat[i][j]=(mat[i][j]*pat[i][j]);
}
return;
}
mais là je n'ai que la premiere composante du produit matriciel sur les 3 (je fais mes tests avec un ordre 3)
mon ancienne ligne était : rat[i][j]=(mat[i][j]*pat[i][j]+mat[i+1][j+1]*pat[i+1][j+1]+mat[i+2][j+2]*pat[i+2][j+2]) et elle est fausse mais je n'arrive pas à trouver la réponse ;
j'ai vu sur le forum des allusions à des alloc( ou des m_alloc() , pourrai-ton m'expliquer? Merci d'avance...
pas besoin d'utiliser des malloc puisse que tu as déclaré tes matrices en statique il faut que tu utilise une troisieme boucle et ne pas oublié d'initialisé la matrice du resultat aussi avant
essaye ça
essaye ça
void matcarparmatcar(int mat[10][10],int pat[10][10], int rat[10][10],int p) { int i,j,k; for(i=0;i<p;i++) for(i=0;i<p;i++) rat[i][j]=0; printf("\n\nMultiplication de deux matrices carres "); for (i=0;i<p;i++) { for(j=0;j<p;j++) { for(k=0;k<p;k++){ rat[i][j]+=mat[i][k]*pat[k][j];} } } return; }
RE bonjour,
oui j'ai vu l'idée c'est génial mais je ne comprends pas pourquoi ça ne marche pas, j'ai fait le test à la main en bougeant les variables et ça devrait marcher mais je n'y arrive toujours pas :/
void matcarparmatcar(int mat[10][10],int pat[10][10], int rat[10][10],int p)
{
int i,j,k;
for (i=0;i<p;i++)
{
for(j=0;j<p;j++)
{
rat[i][j]=0;
}
}
printf("\n\nMultiplication de vos deux matrices carres :A*B ");
for (i=0;i<p;i++)
{
for(j=0;j<p;j++)
{
for(k=0;k<p;k++)
{
/* += : additionne 2 valeurs et la stocke dans la variable de gauche */
rat[i][j]+=mat[i][k]*pat[k][j];
}
}
}
return;
}
oui j'ai vu l'idée c'est génial mais je ne comprends pas pourquoi ça ne marche pas, j'ai fait le test à la main en bougeant les variables et ça devrait marcher mais je n'y arrive toujours pas :/
void matcarparmatcar(int mat[10][10],int pat[10][10], int rat[10][10],int p)
{
int i,j,k;
for (i=0;i<p;i++)
{
for(j=0;j<p;j++)
{
rat[i][j]=0;
}
}
printf("\n\nMultiplication de vos deux matrices carres :A*B ");
for (i=0;i<p;i++)
{
for(j=0;j<p;j++)
{
for(k=0;k<p;k++)
{
/* += : additionne 2 valeurs et la stocke dans la variable de gauche */
rat[i][j]+=mat[i][k]*pat[k][j];
}
}
}
return;
}
jpense que c'est bon...
pour quoi ça marche pas ? quelle erreur ?
poste ton main aussi le probleme doit venir de là
pour quoi ça marche pas ? quelle erreur ?
poste ton main aussi le probleme doit venir de là
en fait, la fonction suivante marche, allé savoir pourquoi :/ ...
void matcarparmatcar(int mat[10][10],int pat[10][10], int rat[10][10],int p)
{
int i,j,k;
int s;
printf("\n\nMultiplication de vos deux matrices carres :A*B ");
for (i=0;i<p;i++)
{
for(j=0;j<p;j++)
{
s=0;
for(k=0;k<p;k++)
{
/* += : additionne 2 valeurs et la stocke dans la variable de gauche */
s+=mat[i][k]*pat[k][j];
}
rat[i][j]=s;
}
}
return;
}
void matcarparmatcar(int mat[10][10],int pat[10][10], int rat[10][10],int p)
{
int i,j,k;
int s;
printf("\n\nMultiplication de vos deux matrices carres :A*B ");
for (i=0;i<p;i++)
{
for(j=0;j<p;j++)
{
s=0;
for(k=0;k<p;k++)
{
/* += : additionne 2 valeurs et la stocke dans la variable de gauche */
s+=mat[i][k]*pat[k][j];
}
rat[i][j]=s;
}
}
return;
}
ben tout est bon jpense que tu te trompe dans ton calcul...
j'ai testé avec le premier exemple de ce site et j'obtiens le bon resultat...
j'ai testé avec le premier exemple de ce site et j'obtiens le bon resultat...
je veux multiplier 3 matrices entre elles :
void produit3matcar (int mat[10][10],int pat[10][10], int rat[10][10],int qat[10][10],int p)
{
int i,j,k,s;
int r[10][10];
void matcarparmatcar(int mat[10][10],int pat[10][10], int rat[10][10],int p);
matcarparmatcar(mat,pat,r,p);
matcarparmatcar(r,rat,qat,p);
return;
}
je n'ai pas le droit d'utiliser des fonctions dans des fonctions ?!
void produit3matcar (int mat[10][10],int pat[10][10], int rat[10][10],int qat[10][10],int p)
{
int i,j,k,s;
int r[10][10];
void matcarparmatcar(int mat[10][10],int pat[10][10], int rat[10][10],int p);
matcarparmatcar(mat,pat,r,p);
matcarparmatcar(r,rat,qat,p);
return;
}
je n'ai pas le droit d'utiliser des fonctions dans des fonctions ?!
Tout marche merci
une question : j'ai un petit problème à propos d'un if
en fait je veux comparer 2 matrices : une matrice et sa transposée pour pouvoir vérifier si elle est symétrique (il faut que A^-1=A.
voici ma fonction :
void matcarsym (int mat[10][10],int p)
{
printf("\n\nVerification de la symetrie de la matrice ");
int pat[10][10],i,j;
void transposecar(int mat[10][10],int pat[10][10],int p);
for (i=0;i<p;i++)
{
for(j=0;j<p;j++)
{
pat[i][j]=0;
}
}
transposecar(mat,pat,p);
if ( for (i=0;i<p;i++)
{
for(j=0;j<p;j++)
{
pat[i][j]=0;
||
}
}
)
{
printf("\n\nVotre matrice est symetrique : A-1 = A ");
}
else
{
printf("\n\nVotre matrice n'est pas symetrique. ");
}
return;
}
merci d'avance xd
une question : j'ai un petit problème à propos d'un if
en fait je veux comparer 2 matrices : une matrice et sa transposée pour pouvoir vérifier si elle est symétrique (il faut que A^-1=A.
voici ma fonction :
void matcarsym (int mat[10][10],int p)
{
printf("\n\nVerification de la symetrie de la matrice ");
int pat[10][10],i,j;
void transposecar(int mat[10][10],int pat[10][10],int p);
for (i=0;i<p;i++)
{
for(j=0;j<p;j++)
{
pat[i][j]=0;
}
}
transposecar(mat,pat,p);
if ( for (i=0;i<p;i++)
{
for(j=0;j<p;j++)
{
pat[i][j]=0;
||
}
}
)
{
printf("\n\nVotre matrice est symetrique : A-1 = A ");
}
else
{
printf("\n\nVotre matrice n'est pas symetrique. ");
}
return;
}
merci d'avance xd
tu peux utiliser un booleen pour voir si t'es matrice sont identique ensuite tu l'utilise dans le if
int symetrique=1; for(i=0;i<p;i++) { for(j=0;j<p;j++) { if(mat[i][j]!=pat[i][j]) symetrique=0; } } if(symetrique==1) { printf("\n\nVotre matrice est symetrique : A-1 = A "); } else { printf("\n\nVotre matrice n'est pas symetrique. "); } return;