Partage
  • Partager sur Facebook
  • Partager sur Twitter

fusionner deux matrices d'ordre 4

11 juillet 2018 à 23:51:17

Bsr, j'ai vu un code sur ce blog et voulais le modifier pour fusionner deux matrices   d'ordre 4 j'ai tout essayer mais n'affice pas le resultat correctement est ce que quelqu'un peu m'aider s'il vous plait 
voici le code
#include <stdio.h>
main()
{
 /* Déclarations */
 /* Les tableaux et leurs dimensions */
 int A[50][50], B[50][50], FUS[100][100];
 int N, M;
 int IA,JA, IB,JB, IFUS,JFUS; /* indices courants */
 /* Saisie des données */
 printf("Dimension du tableau A (max.50) : ");
 scanf("%d", &N );
 printf("Entrer les éléments de A dans l'ordre croissant :\n");
 for (IA=0; IA<N; IA++)
 for (JA=0; JA<N; JA++)
    {
     printf("Elément A[%d][%d] : ", IA,JA);
     scanf("%d", &A[IA][JA]);
    }
 printf("Dimension du tableau B (max.50) : ");
 scanf("%d", &M );
 printf("Entrer les éléments de B dans l'ordre croissant :\n");
 for (IB=0; IB<M; IB++)
    for (JB=0; JB<M; JB++)
    {
     printf("Elément B[%d]B[%d] : ",IB,JB);
     scanf("%d", &B[IB][JB]);
    }
 /* Affichage des tableaux A et B */
 printf("Tableau A :\n");
 for (IA=0; IA<N; IA++){
 for (JA=0; JA<M; JA++)
     printf("%7d ", A[IA][JA]);
 printf("\n");
  }
 printf("Tableau B :\n");
 for (IB=0; IB<M; IB++){
 for (JB=0; JB<M; JB++)
     printf("%7d ", B[IB][JB]);
 printf("\n");
  }
/* Fusion des éléments de A et B dans FUS */
 /* de façon à ce que FUS soit aussi trié. */
 IA=0; IB=0; IFUS=0;
 JA=0; JB=0; JFUS=0;
 while ((IA<N) && (IB<M))
 if(A[IA][JA]<B[IB][JB])
 {
 FUS[IFUS][JFUS]=A[IA][JA];
 IFUS++;
 IA++;
  JFUS++;
 JA++;
 }
 else
 {
 FUS[IFUS][JFUS]=B[IB][JB];
 IFUS++;
 IB++;
 JFUS++;
 JB++;
 }
 /* Si IA ou IB sont arrivés à la fin de leur tableau, */
 /* alors copier le reste de l'autre tableau. */
 while (IA<N && JA<N)
 {
 FUS[IFUS][JFUS]=A[IA][JA];
 IFUS++;
 IA++;
  JFUS++;
 JA++;
 }
 while (IB<M && JB<M)
 {
 FUS[IFUS][JFUS]=B[IB][JB];
 IFUS++;
 IB++;
 JFUS++;
 JB++;
 }
 /* Edition du résultat */
 printf("Tableau FUS :\n");
 for (IFUS=0; IFUS<N+M; IFUS++) {
    for (JFUS=0; JFUS<N+M; JFUS++)
     printf("%4d ", FUS[IFUS][JFUS]);
 printf("\n"); }
 return 0;
}
voila le resultat:
 Dimension du tableau A (max.50) : 2
Entrer les ΘlΘments de A dans l'ordre croissant :
ElΘment A[0][0] : 3
ElΘment A[0][1] : 4
ElΘment A[1][0] : 5
ElΘment A[1][1] : 8
Dimension du tableau B (max.50) : 2
Entrer les ΘlΘments de B dans l'ordre croissant :
ElΘment B[0]B[0] : 9
ElΘment B[0]B[1] : 8
ElΘment B[1]B[0] : 6
ElΘment B[1]B[1] : 1
Tableau A :
      3       4
      5       8
Tableau B :
      9       8
      6       1
Tableau FUS :
   3    0    0    0
   0    8    0    0
   0    0    9    0
   0    0    0    1
  • Partager sur Facebook
  • Partager sur Twitter
12 juillet 2018 à 2:12:01

Bonjour,

Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

Pour plus d'informations, nous vous invitons à lire les règles générales du forum

Merci d'utiliser la mise en forme de code Image

Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Image de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: cpp;">Votre code ici</pre>.

  • Partager sur Facebook
  • Partager sur Twitter
12 juillet 2018 à 7:23:20

Pas de problème, première chose quand on poste un code on utilise la balise et on le remet en forme pour que ce soit lisible ^^.

#include <stdio.h>
main()
{
	/* Déclarations */
	/* Les tableaux et leurs dimensions */
	int A[50][50], B[50][50], FUS[100][100];
	int N, M;
	int IA,JA, IB,JB, IFUS,JFUS; /* indices courants */

	/* Saisie des données */

	printf("Dimension du tableau A (max.50) : ");
	scanf("%d", &N );
	printf("Entrer les éléments de A dans l'ordre croissant :\n");
	for (IA=0; IA<N; IA++)
	{
		for (JA=0; JA<N; JA++)
		{
			printf("Elément A[%d][%d] : ", IA,JA);
			scanf("%d", &A[IA][JA]);
		}
	}

	printf("Dimension du tableau B (max.50) : ");
	scanf("%d", &M );
	printf("Entrer les éléments de B dans l'ordre croissant :\n");
	for (IB=0; IB<M; IB++)
	{
		for (JB=0; JB<M; JB++)
		{
			printf("Elément B[%d]B[%d] : ",IB,JB);
			scanf("%d", &B[IB][JB]);
		}
	}
	
	/* Affichage des tableaux A et B */

	printf("Tableau A :\n");
	for (IA=0; IA<N; IA++)
	{
		for (JA=0; JA<M; JA++)
		{
			printf("%7d ", A[IA][JA]);
		}
		printf("\n");
	}

	printf("Tableau B :\n");
	for (IB=0; IB<M; IB++)
	{
		for (JB=0; JB<M; JB++)
		{
			printf("%7d ", B[IB][JB]);
		}
		printf("\n");
	}
	/* Fusion des éléments de A et B dans FUS */
	/* de façon à ce que FUS soit aussi trié. */
	IA=0; IB=0; IFUS=0;
	JA=0; JB=0; JFUS=0;
	while ((IA<N) && (IB<M))
	{
		if(A[IA][JA]<B[IB][JB])
		{
			FUS[IFUS][JFUS]=A[IA][JA];
			IFUS++;
			IA++;
			JFUS++;
			JA++;
		}
		else
		{
			FUS[IFUS][JFUS]=B[IB][JB];
			IFUS++;
			IB++;
			JFUS++;
			JB++;
		}
	}
	/* Si IA ou IB sont arrivés à la fin de leur tableau, */
	/* alors copier le reste de l'autre tableau. */
	while (IA<N && JA<N)
	{
		FUS[IFUS][JFUS]=A[IA][JA];
		IFUS++;
		IA++;
		JFUS++;
		JA++;
	}
	while (IB<M && JB<M)
	{
		FUS[IFUS][JFUS]=B[IB][JB];
		IFUS++;
		IB++;
		JFUS++;
		JB++;
	}
	/* Edition du résultat */
	printf("Tableau FUS :\n");
	for (IFUS=0; IFUS<N+M; IFUS++)
	{
		for (JFUS=0; JFUS<N+M; JFUS++)
		{
			printf("%4d ", FUS[IFUS][JFUS]);
		}
		printf("\n");
	}
	return 0;
}

ensuite que veux tu dire par fusionner deux matrice d'ordre 4 ? 

genre multiplication, addition, concaténation -> matrice carré 16, matrice rectangle 4/16 ou 16/4 ?

  • Partager sur Facebook
  • Partager sur Twitter

la connaissance est une chose qui ne nous appauvrit pas quand on la partage.

Mon GitHub

12 juillet 2018 à 20:02:54

Bonjour, merci pour vos conseilles 

fusionner deux matrice d'ordre 4 c'est-a-dire une matrice 4*4

  • Partager sur Facebook
  • Partager sur Twitter
13 juillet 2018 à 7:23:38

l'algo, grossomodo c'est ça :

for ( i = 0; i < nbLines; i++ )
{
    for ( j = 0; j < nbColonnes; j++ )
    {
        out[ i ][ j ] = 0;
        for ( k = 0; k < nbColonnes; k++ )
        {
            out[ i ][ j ] += m1[ i ][ k ] * m2[ k ][ i ];
        }
    }
}

// nbLines : nombre de ligne de la matrice 1
// nbColobbes : nombre de colonnes de la matrice 1

maintenant à toit de faire ^^

  • Partager sur Facebook
  • Partager sur Twitter

la connaissance est une chose qui ne nous appauvrit pas quand on la partage.

Mon GitHub

13 juillet 2018 à 23:42:44

Bonsoir, j'ai fini par résoudre le problème de fusionnement de deux matrices

voici le code  

#include <stdio.h>

main()
{
 /* Déclarations */
 /* Les tableaux et leurs dimensions */
 int A[50][50], B[50][50], FUS[100][100];
 int N, M;
 int IA,JA, IB,JB, IFUS,JFUS; /* indices courants */

 /* Saisie des données */
 printf("Dimension du tableau A (max.50) : ");
 scanf("%d", &N );
 printf("Entrer les éléments de A dans l'ordre croissant :\n");
 for (IA=0; IA<N; IA++)
 for (JA=0; JA<N; JA++)
    {
     printf("Elément A[%d][%d] : ", IA,JA);
     scanf("%d", &A[IA][JA]);
    }
 printf("Dimension du tableau B (max.50) : ");
 scanf("%d", &M );
 printf("Entrer les éléments de B dans l'ordre croissant :\n");
 for (IB=0; IB<M; IB++)
    for (JB=0; JB<M; JB++)
    {
     printf("Elément B[%d]B[%d] : ",IB,JB);
     scanf("%d", &B[IB][JB]);
    }
 /* Affichage des tableaux A et B */
 printf("Tableau A :\n");
 for (IA=0; IA<N; IA++){
 for (JA=0; JA<N; JA++)
     printf("%7d ", A[IA][JA]);
 printf("\n");
 }

 printf("Tableau B :\n");
 for (IB=0; IB<M; IB++){
 for (JB=0; JB<M; JB++)
     printf("%7d ", B[IB][JB]);
 printf("\n");
}
/* Fusion des éléments de A et B dans FUS */
 /* de façon à ce que FUS soit aussi trié. */


 //IA=0; IB=0; IFUS=0;
 //JA=0; JB=0; JFUS=0;
 IFUS=0,JFUS=0;
int i=0,j=0;
 for(i=0;i<M;i++){
        JFUS=0;
        for(j=0;j<M;j++){
            FUS[IFUS][JFUS]=A[i][j];
            JFUS++;
        }

        IFUS++;
 }


 /* Si IA ou IB sont arrivés à la fin de leur tableau, */
 /* alors copier le reste de l'autre tableau. */
 IFUS=0;
 int tempJ=JFUS;
 for(i=0;i<N;i++){
        JFUS=tempJ;
        for(j=0;j<N;j++){
            FUS[IFUS][JFUS]=B[i][j];
            JFUS++;
        }
IFUS++;
 }

 /* Edition du résultat */
 //int CA[M+N][M+N];
 printf("Tableau FUS :\n");
 for (i=0; i<IFUS; i++){
 for (j=0; j<JFUS; j++)
     printf("%7d ", FUS[i][j]);
 printf("\n");
 }
 return 0;
}

et voila le resultat

Dimension du tableau A (max.50) : 4
Entrer les ΘlΘments de A :
ElΘment A[0][0] : 56
ElΘment A[0][1] : 78
ElΘment A[0][2] : 23
ElΘment A[0][3] : 45
ElΘment A[1][0] : 12
ElΘment A[1][1] : 89
ElΘment A[1][2] : 3
ElΘment A[1][3] : 4
ElΘment A[2][0] : 5
ElΘment A[2][1] : 6
ElΘment A[2][2] : 12
ElΘment A[2][3] : 89
ElΘment A[3][0] : 21
ElΘment A[3][1] : 22
ElΘment A[3][2] : 34
ElΘment A[3][3] : 22
Dimension du tableau B (max.50) : 4
Entrer les ΘlΘments de B  :
ElΘment B[0]B[0] : 1
ElΘment B[0]B[1] : 2
ElΘment B[0]B[2] : 3
ElΘment B[0]B[3] : 4
ElΘment B[1]B[0] : 5
ElΘment B[1]B[1] : 6
ElΘment B[1]B[2] : 7
ElΘment B[1]B[3] : 8
ElΘment B[2]B[0] : 9
ElΘment B[2]B[1] : 0
ElΘment B[2]B[2] : 11
ElΘment B[2]B[3] : 22
ElΘment B[3]B[0] : 33
ElΘment B[3]B[1] : 44
ElΘment B[3]B[2] : 55
ElΘment B[3]B[3] : 66
Affichage du Tableau A :
     56      78      23      45
     12      89       3       4
      5       6      12      89
     21      22      34      22
Affichage du Tableau B :
      1       2       3       4
      5       6       7       8
      9       0      11      22
     33      44      55      66
Affichage du Tableau FUSIONNER :
     56      78      23      45       1       2       3       4
     12      89       3       4       5       6       7       8
      5       6      12      89       9       0      11      22
     21      22      34      22      33      44      55      66
  • Partager sur Facebook
  • Partager sur Twitter
14 juillet 2018 à 0:01:08

Hello,

Ton programme ne fonctionne pas

EDIT: en fait si, à condition que les deux matrices aient la même taille. Mais alors, pourquoi N et M ? Et qu'est-ce qui empêche l'utilisateur d'entrer 4 pour N et 6 pour M ? Auquel cas, ton programme ne fonctionne pas.

-
Edité par edgarjacobs 14 juillet 2018 à 0:12:05

  • Partager sur Facebook
  • Partager sur Twitter

On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent