bonjour les amis
</couleur>
voila un exercice que je n'arrive pas à l'executer correctement .
il s'agit de :
exercice:
on dispose e deux tableaux A et B ( de dimension N et M ), triés par ordre croissant .fusionner les éléments de A et B dans un troisieme tableau F trie par ordre croissant.
Réaliser le rogramme permettant :
*La saisi de deux tableaux .
*le tri dans l'ordre croissant des deux tableaux:
*la fusion des deux tableaux selon la méthodes cité si dessus .
-comparer a[i]et b[j];
-remplacer c[k] par le plus petit des deux éléments ; avancer dans tab C et dans le tableau qui a contribué son élément .
-lorsque l'un des deux tableaux A ou B est epuisé ,il suffit de recopier les éléments restant de l'auter tableau dans le tableau C.
*afficher les trois tableux .
voici non essai , le probléme que j'ai rencontré c'est au niveau du fusion de deux tabs ,il se peut que j'ai mal raisonné,mais le 3 tab ne s'affiche pas correctement .
code source:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int a[100];b[100];c[100],j,k,n,i,m,aux,permt,tdec;
void main ()
{
clrscr();
textbackground(217);
do
{
printf("taper n ");
scanf("%d",&n);
}
while((n<1)||(n>100));
do
{
printf("taper m ");
scanf("%d",&m);
}
while((m<1)||(m>100));
//remplissage
for(i=0;i<n;i++)
{
printf("taper l'element %d = ",i+1);
scanf("%d",&a[i]);
}
for(j=0;j<m;j++)
{
printf("taper l'element %d = ",j+1);
scanf("%d",&b[j]);
}
//trie d'ordre croissante du tab A
do
{
permt=0;
for(i=0;i<n-1;i++)
{
if(a[i]>a[i+1])
{
aux=a[i];
a[i]=a[i+1];
a[i+1]=aux;
permt=1;
}
}
}
while(permt==1);
//TRI DU tab B
do
{
permt=0;
for(j=0;j<m-1;j++)
{
if(b[j]>b[j+1])
{
aux=b[j];
b[j]=b[j+1];
b[j+1]=aux;
permt=1; //permutation
}
}
}
while(permt==1);
printf("\n");
//affichage
printf("\n table 1 \n ");
for(i=0;i<n;i++)
{
printf("\t %d ",a[i]);
}
printf("\n table 2 \n ");
for(j=0;j<m;j++)
{
printf("\t %d ",b[j]);
}
//fusion
k=0;
i=0;
j=0;
do
{
if(a[i]<=b[j])// comparaison de deux tableaux
{
c[k]=a[i];
k++;
i++;
}
else
{
c[k]=b[j];
k++;
j++;
}
}
while((i<n)||(j<m));
if(i==n-1)// le tab A est epuise
{
j--;
k--;
do
{
j++;
k++;
c[k]=b[j]; // recopier le reste du tab b dans le tab de fusion
}
while (j<n); // tant que le tab B n'est pas epuise
}
if(j==m-1) // le tab B est epuis‚
{
i--;
k--;
do
{
i++;
k++;
c[k]=a[i];// recoier le reste du tab b dans le tab de fusion
}
while (i<n);// tant que le tab A n'est pas epuis‚
}
tdec=k+1; // la taille du tab fusion
printf("\n tab de fusion \n ");
//afichge du tab fusion
for(k=0;k<tdec;k++)
{
printf("\t %d ",c[k]);
}
getch();
}
MERCI de m'aider .
-----