Comparaison de deux tableaux en C

Fermé
adri10 - Modifié par adri10 le 30/04/2010 à 18:35
 adri10 - 3 mai 2010 à 21:31
Bonjour à tous,

J'ai encore quelques difficultés en c et j'aurais donc besoin de votre aide^^.

J'ai tenté de créer un programme dans lequel je dois entrer deux tableaux distincts et ensuite, comparer le 1er élément du tableau 1 avec le 1er élément du tableau 2 et afficher l'élément le plus grand dans un 3eme tableau, ainsi de suite pour chacun des éléments.

Les deux premiers tableaux s'affichent convenablement mais pas le 3ème :/
Pouvez-vous me mettre sur la bonne piste pour afficher correctement le 3eme tableau?

Exemple : tableau 1 : 45 78 96
tableau 2 : 74 63 14
tableau 3: 74 78 96

Voici mon code

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

int lecture1(int tab1[])  
{  
    int tabtemp1,i1;  
    i1=0;  
    do  
    {  
                  printf("nombre du vecteur 1  ");  
                  scanf("%d",&tabtemp1);  
                    
                  if(tabtemp1>10)  
                  {  
                                if(tabtemp1<100)  
                                {  
                                                 
                                               tab1[i1]=tabtemp1;  
                                               i1++;  
                                }  
                                else  
                                if(tabtemp1!=0)  
                                printf("erreur de saisie\n\n");  
                  }  
                  else  
                  if(tabtemp1!=0)  
                  printf("erreur de saisie\n\n");  
                    
                  if(tabtemp1==0)  
                  i1=i1-1;  
    }  
    while (tabtemp1!=0);  
    return i1;  
}  


int lecture2(int tab2[])  
{  
    int tabtemp2,i2;  
    i2=0;  
    do  
    {  
                  printf("nombre du vecteur 2 ");  
                  scanf("%d",&tabtemp2);  
                    
                  if(tabtemp2>10)  
                  {  
                                if(tabtemp2<100)  
                                {  
                                                 
                                               tab2[i2]=tabtemp2;  
                                               i2++;  
                                }  
                                else  
                                if(tabtemp2!=0)  
                                printf("erreur de saisie\n\n");  
                  }  
                  else  
                  if(tabtemp2!=0)  
                  printf("erreur de saisie\n\n");  
                    
                  if(tabtemp2==0)  
                  i2=i2-1;  
    }  
    while (tabtemp2!=0);  
    return i2;  
}  


void affiche1(int tab1[],int i1)  
{  
     int n1;  
     for(n1=0;n1<=i1;n1++)  
     {  
                       printf(" %d ",tab1[n1]);  
     }  
}  


void affiche2(int tab2[],int i2)  
{  
     int n2;  
     printf("\n\n\n\n");  
     for(n2=0;n2<=i2;n2++)  
     {  
                       printf(" %d ",tab2[n2]);  
     }  
}  


int comparaison(int tab3[], int tab1[],int tab2[],int i1,int i2)  
{  
    int n3,n1,n2,i3;  
    i3=i1;  
    for(n1=0;n1<=i1;n1++)  
    {  
                         for(n2=0;n2<=i2;n2++)  
                         {  
                                              for(n3=0;n3<=i3;n3++)  
                                              {  
                                                                   if (tab1[n1]>tab2[n2])  
                                                                   {  
                                                                                         tab3[n3]=tab1[n1];  
                                                                   }  
                                                                   else  
                                                                   tab3[n3]=tab2[n2];  
                                              }  
                         }  
    }  
    return n3;  
}  

void affiche3(int tab3[],int n3)  
{  
     int f3;  

     for(f3=0;f3<=n3;f3++)  
     {  
                          printf(" %d  ",tab3[f3]);  
     }  
}  

int main()  
{  
    int tab1[50],nbt1,nbt2,tab2[50],nbt3,tab3[50];  
    nbt1=lecture1(tab1);  
    nbt2=lecture2(tab2);  
    affiche1(tab1,nbt1);  
    affiche2(tab2,nbt2);  
    printf("\n\n");  
    nbt3=comparaison(tab3,tab1,tab2,nbt1,nbt2);  
    affiche3(tab3,nbt3);  
    system("pause");  
}



Merci beaucoup

A voir également:

5 réponses

Kuku007 Messages postés 183 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 7 septembre 2011 23
30 avril 2010 à 19:55
Salut !

Ton problème vient de ta fonction de comparaison !
Alors déjà ton algorithme ne m'a pas forcément l'air au point, ou alors c'est voulu... mais j'en doute un peu...

Pour commencer lors de la saisie de tes tableaux, ils n'ont pas forcément la même taille ! Je ne sais pas si tu l'avais remarqué ou si c'est volontaire. Bref je vais considérer que l'utilisateur a saisi autant de nombres pour les 2 tableaux pour faciliter la comparaison.

Ensuite lors de la comparaison, si j'ai bien compris ce que tu dis au début du post tu souhaites comparer les éléments de chaque tableau un à un.

Et c'est là que ça coince totalement !
Tu pars du premier élément de tab1 et tu le compares à l'ensemble des éléments de tab2 (première incohérence) et ensuite tu vas écrire (i3-1) fois le même nombre (en fonction de ton résultat if) dans ton tableau tab3.

D'ailleurs ce nombre devrait être le résultat issu du if entre le premier élément de tab1 et du dernier élément de tab2 !

Je me trompe ?
0
Kuku007 Messages postés 183 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 7 septembre 2011 23
30 avril 2010 à 19:57
Ah même pas ! Au final tu fais la comparaison entre le dernier élément de tab1 et le dernier élément de tab2 et c'est cette même valeur qui est dupliqué i1 fois dans tab3.
0
Bonjour et merci pour ta réponse.

Alors je ne devrais pas faire de boucle for pour les éléments du 2eme tableau et je ferais une boucle for simplement pour le 1er tableau et ensuite une boucle if pour le second?

Pour le 3ème tableau, je retirerais aussi la boucle for (qui ne me paraissait pas très correcte) je le l'écrirais alors comme ceci:

si tab1[i1]>tab2[i2]

tab3[i3]=tab1[i1]

sinon tab3[i3]=tab2[i2]???
0
Bonjour,

J'ai modifié mon code pour les fonctions comparaison et affiche3 mais j'ai maintenant un gros plantage :/

int comparaison(int tab3[], int tab1[],int tab2[],int i1,int i2)  
{
    int n1,n2,n3;
    for(n1=0;n1<=i1;n1++) 
    {
                          if(tab1[n1]>tab2[n2])
                          {
                                               tab3[n3]=tab1[n1];
                                               n2++;
                                               n3++;
                          }
                          else
                          {
                              tab3[n3]=tab2[n2];
                              n2++;
                              n3++;
                          }
    }
    return n3;
}
    

void affiche3(int tab3[],int n3)  
{  
     int f3;  

     for(f3=0;f3<=n3;f3++)  
     {  
                          printf(" %d  ",tab3[f3]);  
     }  
}  
0
Kuku007 Messages postés 183 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 7 septembre 2011 23
Modifié par Kuku007 le 3/05/2010 à 13:03
Normal que ça plante !
Tu n'initialises pas tes compteurs n2 et n3.

C'est pas grave c'est de toute manière pas la bonne démarche !
Si tu fais bien de la comparaison une à une ! C'est simple : tu conserves que n1 !!!

Un seul compteur de boucle suffit si tous les tableaux ont la même tailles.

du style


int comparaison(int tab3[], int tab1[],int tab2[],int i1)
{
int n1;
for(n1=0;n1<i1;n1++)
{
if(tab1[n1]>tab2[n1])
tab3[n1]=tab1[n1];
else
tab3[n1]=tab2[n1];
}
return n1;
}

0
Kuku007 Messages postés 183 Date d'inscription dimanche 28 février 2010 Statut Membre Dernière intervention 7 septembre 2011 23
3 mai 2010 à 12:55
Salut !
Désolé j'étais parti en grand week end de mariage donc pas d'internet ;-)
J'essaierais de regarder ça ce soir si j'oublie pas héhé.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Merci beaucoup pour ton aide! problème résolu!
0