C++ algo

cs_altay Messages postés 21 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 17 août 2005 - 7 avril 2003 à 20:48
Krox68 Messages postés 157 Date d'inscription jeudi 17 octobre 2002 Statut Membre Dernière intervention 11 septembre 2004 - 20 avril 2003 à 13:10
L'analyste programmeur a 3 dimension
est ce que quelqu'un pourrait me faire l'algo de ce code
merci d'avance :
#pragma hdrstop

#include <conio.h>
#include
#include
#include <stdlib.h>

//---------------------------------------------------------------------------

int **multiplieMatrice(int **matriceA, int colonnesA, int lignesA, int **matriceB, int colonnesB, int lignesB);

#pragma argsused
int main(int argc, char* argv[])
{
int lignes1;
int colonnes1 ;
int lignes2 ;
int colonnes2 ;
int **m1 ;
int **m2 ;
int **m3 ;
int i, j ;

do
{
cout << "1ere matrice : " << endl ;
cout << "combien de lignes ? " ;
cin >> lignes1 ;

cout << endl << "combien de colonnes ? " ;
cin >> colonnes1 ;

cout << endl << "2eme matrice : " << endl ;
cout << "combien de lignes ? " ;
cin >> lignes2 ;

cout << endl << "combien de colonnes ? " ;
cin >> colonnes2 ;

if (colonnes1!= lignes2)
cout << "erreur, les matrices ne peuvent pas etre multipliees!!! " << endl ;

}
while (colonnes1 != lignes2) ;

// si les matrices sont ok : colonnes1 == lignes2

m1 = (int**)malloc(lignes1 * sizeof(int*)) ;
m2 = (int**)malloc(lignes2 * sizeof(int*)) ;

if (!m1)
{
free(m1) ;
cout << endl << "erreur d'alloc 1ere matrice!!! " ;
return NULL ;
}

for (i=0 ; i<lignes1 ; i++)
{
m1[i] = (int*)malloc(colonnes1 * sizeof(int)) ;

if (!m1[i])
{
free(m1) ;
cout << endl << "erreur d'alloc lignes!!! " ;
return NULL ;
}
}

if (!m2)
{
free(m2) ;
cout << endl << "erreur d'alloc 1ere matrice!!! " ;
return NULL ;
}

for (i=0 ; i<lignes2 ; i++)
{
m2[i] = (int*)malloc(colonnes2 * sizeof(int)) ;

if (!m2[i])
{
free(m2) ;
cout << endl << "erreur d'alloc lignes!!! " ;
return NULL ;
}
}

cout << endl << "1ere matrice : " << endl ;

for (i=0 ; i<lignes1 ; i++)
{
for (j=0 ; j<colonnes1 ; j++)
{
cout << endl << "nombre en place " << i << " ; " << j << " ? " ;
cin >> m1[i][j] ;
}
}

cout << endl ;

// affichage 1ere matrice
for (i=0 ; i<lignes1 ; i++)
{
for (j=0 ; j<colonnes1 ; j++)
{
cout << setw(3) << m1[i][j] ;
}
cout << endl ;
}

cout << endl << "2eme matrice : " << endl ;

for (i=0 ; i<lignes2 ; i++)
{
for (j=0 ; j<colonnes2 ; j++)
{
cout << "nombre en place " << i << " ; " << j << " ? " ;
cin >> m2[i][j] ;
}
}

cout << endl ;

// affichage 2eme matrice
for (i=0 ; i<lignes2 ; i++)
{
for (j=0 ; j<colonnes2 ; j++)
cout << setw(3) << m2[i][j] ;
cout << endl ;
}

// multiplication des matrices

m3 = multiplieMatrice(m1, colonnes1, lignes1, m2, colonnes2, lignes2) ;

cout << endl << "Multiplication des matrices......" << endl ;
cout << endl << "Matrice Resultat : " << endl ;

for (i=0 ; i<lignes1 ; i++)
{
for (j=0 ; j<colonnes2 ; j++)
cout << setw(3) << m3[i][j] ;
cout << endl ;
}

free(m1) ;
free(m2) ;
free(m3) ;

cout << endl << endl << "appuyer sur une touche pour quitter..." ;
getch () ;
return 0 ;

}
//---------------------------------------------------------------------------

// fonction multiplication des 2 matrices

int **multiplieMatrice(int **matriceA, int colonnesA, int lignesA, int **matriceB, int colonnesB, int lignesB)
{
int **matriceR ;
int i, j, k ;

matriceR = (int**)malloc(lignesA * sizeof(int*)) ;

if (!matriceR)
{
free(matriceR) ;
cout << endl << "erreur d'alloc matrice reponse !!! " ;
return NULL ;
}

for (i=0 ; i<lignesA ; i++)
{
matriceR[i] = (int*)malloc(colonnesB * sizeof(int)) ;

if (!matriceR[i])
{
free(matriceR) ;
cout << endl << "erreur d'alloc lignes!!! " ;
return NULL ;
}
}

for (i=0 ; i<lignesA; i++)
for (j=0 ; j<colonnesB; j++)
{
matriceR[i][j] = 0 ;

for (k=0 ; k<colonnesA ; k++)
matriceR[i][j] += matriceA[i][k] * matriceB[k][j] ;
}
return matriceR ;
}

3 réponses

cs_payen Messages postés 252 Date d'inscription mercredi 25 octobre 2000 Statut Membre Dernière intervention 1 mai 2005
9 avril 2003 à 18:51
mais ... pour faire l'algo, il te suffit de lire les cin, cout et les commentaires. d'ailleurs, pourquoi faire l'algo qd on a le code? c'est plutot l'inverse qui est interessant ...
0
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
12 avril 2003 à 20:19
C'est l'algoritme de base d'une saisie de 2 matrices, de leur multiplication, et leur affichage.

pour toute ligne i de la matrice 1 et pour toute colonne j de la matrice 2
valeur temporaire= 0
{ pour toute colonne k de la matrice 1
valeur temporaire= valeur temporaire + valeur de la ligne i et de la colonne k de la matrice 1 * valeur de la ligne k et de la colonne j de la matrice 2 }

valeur de la ligne i et de la colonne j de la matrice résultante= valeur temporaire


Core Breaker :)
0
Krox68 Messages postés 157 Date d'inscription jeudi 17 octobre 2002 Statut Membre Dernière intervention 11 septembre 2004 1
20 avril 2003 à 13:10
Krox68
oua complexe...
0
Rejoignez-nous