Bonsoir tout le monde !
Alors voilà comme l'indique le titre, le but est de fusionner 2 tableaux composés préalablement par l'utilisateur qui doit faire en sorte de les remplir en tenant compte de l'ordre .
J'ai réalisé un programme qui m'est paru très logique, il y'a eu des erreurs a l'éxecution, j'ai vérifié ça avec mon professeur durant 15 minutes, il n'est pas arrivé a localiser d'erreurs, je suis revenu chez moi j'ai testé un truc et ça a fait marcher le programme à merveille mais je ne comprends pas pourquoi il ne marche pas sans cela ! Donc voici mon programme :
Alors voilà le programme qui ne marche pas ! par exemple quand j'execute, je donne au tableau A les valeurs 2,4,6 et au tableau B 1,2,3 , le tableau fusionné me donne 2,4,6 xD, si je mets 1,2,3,8 a B par exemple j'aurai FUS = 2,4,6,8 .Code:#include <stdio.h> #include <conio.h> #define NMAX 100 #define MMAX 100 int main() { int i,A[NMAX],B[MMAX],M,N,j,FUS[NMAX+MMAX],t=0 ; printf("Entrez la taille de votre premier tableau \n") ; scanf("%d",&N) ; printf("Entrez des valeurs triees a l'ordre croissant pour le 1er tableau \n"); for(i=0;i<N;i++) { printf("Entrez une valeur pour la %d case \t",i+1); scanf("%d",&A[i]); } printf("Entrez la taille de votre 2eme tableau \n") ; scanf("%d",&M) ; printf("Entrez des valeurs triees a l'ordre croissant pour le 2eme tableau \n"); for(j=0;j<M;j++) { printf("Entrez une valeur pour la %d case \t",j+1); scanf("%d", &B[j]); } \\ jusqu'a là, le but est d'initialiser les 2 tableaux triés i=0 ; j=0 ; while (i<N || j<M) \\ on ne sait pas quel tableau risque de s'épuiser, autant ne pas mettre de && . { if(i<N && j<M) { if (B[j] < A[i]) { FUS[t]=B[j] ; j++ ; } if (A[i] < B[j]) { FUS[t]=A[i]; i++ ; } if (A[i]==B[j]) \\ pas de répétitions . { FUS[t]=A[i] ; i++ ; j++ ; } t++ ; } if(i==N && j<M) \\On traite les différents cas possibles d'épuisement . { FUS[t]=B[j] ; j++ ; t++ ; } if(j==M && i<N) { FUS[t]=A[i]; i++ ; t++ ; } } printf("la fusion de vos 2 tableaux est : \n ") ; \\ Et voila ! for(i=0;i<t;i++) printf("%d \n",FUS[i]); return 0; }
le truc que j'ai fais qui a tout réglé c'est que j'ai mi l'incrémentation de t a l'intérieur de chaque "if", j'avais mis ça au début mais voyant que je le repete dans chaque je me suis dis je pourrai l'enlever et le mettre en bas puisque dans tout les cas le t est incrémenté, eh bein non ... et je ne comprends pas pourquoi >< j'espère que vous pourrez m'expliquer ^^
Merci à tous et bonne soirée .
-----