tableau bidimensionnel

2 réponses
Avatar
debutant
Bonjour, le but du programme est de créer deux tableaux bidimensionnels, le remplir par des valeurs aléatoire et de réaliser une addition et une multiplication des éléments de ces deux tableaux et d'afficher le résultat dans deux tableaux différents.
l'addition est facile mais la multiplication est disons(mon professeur m'a dit qu' il fallait proceder comme une multiplication dans une matrice), ben voici ce que j'ai fait mais je voudrais un tuyau sur la multiplication(nombre de variable qu'il faut utiliser et l'algorithme qui vient avec) merci d'avance:

#include<stdio.h>
#include<stdlib.h>

void main(){
float A[3][3], B[3][3],S[3][3],P[3][3];
int ligne, colonne;
/*Remplissage par des valeurs aleatoire*/
for(ligne=0;ligne<3;ligne++){
for(colonne=0; colonne<3;colonne++){
A[ligne][colonne]=rand()%100;
B[ligne][colonne]=rand()%100;
}
}
/* Fin du remplissage*/

/* Affichage du contenu de A*/
printf("Contenu du tableau A:\n");
for(ligne=0;ligne<3;ligne++){
for(colonne=0;colonne<3;colonne++){
printf("%.3f ",A[ligne][colonne]);
if(colonne==2){/*Pour avoir la forme d'un tableau 3cols 3rows*/
printf("\n");
}
}
}
/*Fin de l'affichage de A*/

/*Affichage du contenu de B*/
printf("\n\nContenu du tableau B:\n");
for(ligne=0;ligne<3;ligne++){
for(colonne=0;colonne<3;colonne++){
printf("%.3f ",B[ligne][colonne]);
if(colonne==2){/*Pour avoir la forme d'un tableau 3cols 3rows*/
printf("\n");
}
}
}
/*Fin de l'affichage de B*/


/*Debut calcul somme*/
printf("\n\nContenu du tableau somme:\n");
for(ligne=0;ligne<3;ligne++){
for(colonne=0;colonne<3;colonne++){
S[ligne][colonne]=A[ligne][colonne]+B[ligne][colonne];
}
}
/*Fin calcul somme*/

/*Debut affichage somme*/
for(ligne=0;ligne<3;ligne++){
for(colonne=0;colonne<3;colonne++){
printf("%.3f ",S[ligne][colonne]);
if(colonne==2){/*Pour avoir la forme d'un tableau 3cols 3rows*/
printf("\n");
}
}
}
/*Fin affichage de la somme*/

/*Debut calcul du produit*/
for(ligne=0;ligne<3;ligne++){
for(colonne=0;Colonne<3;colonne++){
for(i=0;i<3;i++){
temp[ligne][colonne]=A[ligne][colonne]*B[ligne][colonne];
P[ligne][colonne]=temp[ligne][colonne]+(A[ligne][colonne]*B[ligne][colonne]);
}

2 réponses

Avatar
FX
debutant a écrit :
Bonjour, le but du programme est de créer deux tableaux bidimensionnels, le
remplir par des valeurs aléatoire et de réaliser une addition et une
multiplication des éléments de ces deux tableaux et d'afficher le résultat dans
deux tableaux différents.
l'addition est facile mais la multiplication est disons(mon professeur m'a dit
qu' il fallait proceder comme une multiplication dans une matrice), ben voici
ce que j'ai fait mais je voudrais un tuyau sur la multiplication(nombre de
variable qu'il faut utiliser et l'algorithme qui vient avec) merci d'avance:

#include<stdio.h>
#include<stdlib.h>

void main(){
float A[3][3], B[3][3],S[3][3],P[3][3];
int ligne, colonne;
/*Remplissage par des valeurs aleatoire*/
for(ligne=0;ligne<3;ligne++){
for(colonne=0; colonne<3;colonne++){
A[ligne][colonne]=rand()%100;
B[ligne][colonne]=rand()%100;



Tu devrais initaliser le générateur de nombre aléatoire avec un appel du
style srand(time(NULL)). Sinon, ta suite aléatoire risque d'être
toujours la même.

Tu fais exprès d'initialiser des float avec des int? Tu as un risque de
perte de précision et tu vas peut-être te retrouver avec des résultats
non entiers.

}
}
/* Fin du remplissage*/

/* Affichage du contenu de A*/
printf("Contenu du tableau A:n");
for(ligne=0;ligne<3;ligne++){
for(colonne=0;colonne<3;colonne++){
printf("%.3f ",A[ligne][colonne]);
if(colonne==2){/*Pour avoir la forme d'un tableau 3cols 3rows*/
printf("n");



Tu peux aussi sortir ce printf du for(colonne), tu auras le même
résultat sans avoir à effectuer de test.

}
}
}
/*Fin de l'affichage de A*/

/*Affichage du contenu de B*/
printf("nnContenu du tableau B:n");
for(ligne=0;ligne<3;ligne++){
for(colonne=0;colonne<3;colonne++){
printf("%.3f ",B[ligne][colonne]);
if(colonne==2){/*Pour avoir la forme d'un tableau 3cols 3rows*/
printf("n");
}
}
}
/*Fin de l'affichage de B*/



Je te conseillerais d'écrire une fonction affiche_matrice(float M[3][3])
plutôt que de recopier le même code plusieurs fois.

/*Debut calcul somme*/
...
/*Fin affichage de la somme*/

/*Debut calcul du produit*/
for(ligne=0;ligne<3;ligne++){
for(colonne=0;Colonne<3;colonne++){
for(i=0;i<3;i++){
temp[ligne][colonne]=A[ligne][colonne]*B[ligne][colonne];
P[ligne][colonne]=temp[ligne][colonne]+(A[ligne][colonne]*B[ligne][colonne]);
}



Déjà, il te manque des déclarations: i et temp.

Ensuite, tu dois connaître la formule du calcul du produit de 2
matrices. C'est une question de mathématiques, pas de C, et attention ce
n'est pas commutatif donc A*B est différent de B*A. La formule pour A*B est:

P[ligne][colonne] = sum_i A[ligne][i]*B[i][colonne]

FX
Avatar
xtof pernod
Le 10/07/2010 13:23, FX a fait rien qu'à écrire:
debutant a écrit :
(...)
#include<stdio.h>
#include<stdlib.h>

void main(){
(...)
}



Déjà, il te manque des déclarations: i et temp.




Dit autrement: "Je n'ai même pas essayé de compiler ce que je poste" =)

Ensuite, tu dois connaître la formule du calcul du produit de 2
matrices. C'est une question de mathématiques, pas de C, et attention ce
n'est pas commutatif donc A*B est différent de B*A. La formule pour A*B
est:

P[ligne][colonne] = sum_i A[ligne][i]*B[i][colonne]



Ah ben, pareil: _o<
Error: line 1: missing semicolon

FX



Ah flûte, c'est pas du C, mais des maths, tu l'as clairement dit, en plus.
C'est fou comme ça se ressemble, parfois, ces trucs-là..

--
christophe.